2017-08-30 72 views
1

是否可以使用觸發器URL觸發下面的代碼? 而不是通過瀏覽器中的URL來觸發。以編程方式觸發listener.GetContext()

var context = listener.GetContext(); 

是這樣的嗎?

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

或者有可能使用do while循環嗎?即不要創建觸發器而獲取上下文

+0

你問是否有可能以編程方式向URL發送請求? – benjrb

回答

0

而不是使用listener.GetContext()的,我能夠通過使用listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener)listener.EndGetContext(result),利用異步調用,GetAsync滿足我的要求。

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); 
     } 
    }