2017-08-30 18 views
1

トリガーURLを使用して以下のコードをトリガーすることはできますか? ブラウザでURLを訪問してトリガーするのとは対照的に。プログラムでトリガーlistener.GetContext()

var context = listener.GetContext(); 

これはなんですか?

var triggerURL = "http://www.google.ie/"; 
var request = (HttpWebRequest)WebRequest.Create(triggerURL); 

またはdo whileループを使用できますか?代わりにlistener.GetContext()を使用してのコンテキスト

+0

URLにプログラムでリクエストを送信できるかどうか尋ねていますか? – benjrb

答えて

0

を取得しながら、すなわち、トリガーを作成しません、私は、非同期呼び出し、GetAsyncを利用し、listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener)listener.EndGetContext(result)を使用して、私の要件を満たすことができました。

public static string RunServerAsync(Action<string> triggerPost) 
    { 
     var triggerURL = ""; 
     CommonCode(ref triggerURL); 

     if (listener.IsListening) 
     { 
      triggerPost(triggerURL); 
     } 

     while (listener.IsListening) 
     { 
      var context = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener); 
      context.AsyncWaitHandle.WaitOne(20000, true); //Stop listening after 20 seconds (20 * 1000). 
      listener.Close(); 
     } 

     return plateString; 
    } 

    private static async void TriggerURL(string url) 
    { 
     var r = await DownloadPage(url); 
    } 

    static async Task<string> DownloadPage(string url) 
    { 
     using (var client = new HttpClient()) 
     { 
      using (var r = await client.GetAsync(new Uri(url))) 
      { 
       if (r.IsSuccessStatusCode) 
       { 
        string result = await r.Content.ReadAsStringAsync(); 
        return result; 
       } 
       else 
       { 
        return r.StatusCode.ToString(); 
       } 
      } 
     } 
    } 

    private static void ListenerCallback(IAsyncResult result) 
    { 
     try 
     { 
      HttpListener listener = (HttpListener)result.AsyncState; 
      // Use EndGetContext to complete the asynchronous operation. 
      HttpListenerContext context = listener.EndGetContext(result); 

      if (context != null) 
      { 
       plateString = ProcessRequest(context); 
      } 
      else 
      { 
       plateString = "No response received!"; 
      } 
     } 
     catch (Exception ex) 
     { 
      NLogManager.LogException(ex); 
     } 
    } 
関連する問題