1

同様の問題に関するいくつかの投稿を見ましたが、解決策はありません:/

コンソール アプリケーションを使用して Windows サービスをデバッグします。Web サイトでタスクを実行し、作成ログの 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;
    }
 }

キャッチが機能しない理由がわかりません。このタスクは、Web サイトが 404 などを返すかどうかをテストできるため、この情報を処理する必要があります。

前もって感謝します

編集 : - - - - - -

削除されたコードは本当の問題ではないため、要求に応じてコードを削減します

4

1 に答える 1

1

taskでその例外をキャッチする必要があります。別のメソッドを追加して、次のようなタスクを作成します。

task.Add(Task.Factory.StartNew(() =>  Process(tp)));

void Process(TaskPlanner tp)
{
    try
    {
        tp.ExecuteBot.Execute();
    }
    catch (WebException wex)
    {
    }
}
于 2013-09-05T14:39:28.007 に答える