【问题标题】:WebException not caught in try/catchWebException 未在 try/catch 中捕获
【发布时间】:2013-09-05 14:35:06
【问题描述】:

我看到几篇有类似问题但没有解决方案的帖子:/

我使用控制台应用程序调试 Windows 服务。它在网站上执行任务,并且必须能够收集 http 代码状态以创建日志。如您所见,敏感代码在 try/catch 中。

当我调试 (F5) 时,我有一个未捕获的 WebException。当我运行 (CTRL + F5) 时,异常消息会写入我的控制台并停止我的程序。 这是我的代码:

public partial class Schedulor : ServiceBase
{
void RunTasks()
    {
        schedulor.Start();
        List<Task> task = new List<Task>();
        foreach (TaskPlanner tp in listTp)
        {
            if (tp.CountDown == 0 && tp.IsRunning == false)
            {
                // Initialisation lors de GetTasks()
                tp.IsRunning = true;
                try
                {
                    task.Add(Task.Factory.StartNew(() => tr = tp.ExecuteBot.Execute())); // WEBEXECPTION HERE (cannot find 404)
                }
                catch (Exception e)
                {                        
                    if (e is WebException)
                    {
                        // treatment
                    }                       
                }                    
            }
        }
        Task.WaitAll(task.ToArray());
        CreateLogs();
    }
  }


 public class Bot : IBot
 {
 public TaskResult Execute()
    {
        TaskResult tr = new TaskResult();
        int codeResponse, timeout;
        string credentials;
        try
        {
            WebRequest wrSettings = WebRequest.Create(settings.Url);

            // treatment
        }
        catch (Exception e)
        {
            //Console.WriteLine(e.Message);                
            if (e is WebException)
            {
                var code = ((HttpWebResponse)((WebException)e).Response).StatusCode;
                if ((int)code != settings.HttpResponse)
                {
                    tr.MyResult = TaskResult.Result.nok;
                    goto next;
                }
                else tr.MyResult = TaskResult.Result.ok;
            }
        }            
    next:
        return tr;
    }
 }

我不明白为什么我的捕获不起作用。我需要处理这些信息,因为该任务可以测试网站是否返回 404 或其他任何内容。

提前致谢

编辑:-----------

我按要求减少代码,因为删除的代码不是真正的问题

【问题讨论】:

    标签: c# httpwebrequest try-catch system.net.webexception


    【解决方案1】:

    您应该在任务中捕获该异常。添加另一个方法,并创建类似于以下内容的任务:

    task.Add(Task.Factory.StartNew(() =>  Process(tp)));
    
    void Process(TaskPlanner tp)
    {
        try
        {
            tp.ExecuteBot.Execute();
        }
        catch (WebException wex)
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      相关资源
      最近更新 更多