2012-08-13 81 views
1

這是通過AsyncCallback函數處理HttpWebRequest的代碼片段。 服務器端響應很好。它只響應一個返回消息,但是這個客戶代碼被多次調用並給出了令人頭疼的問題。多次調用異步回調函數(C#)

//創建請求 HttpWebRequest request =(HttpWebRequest)WebRequest.Create(requestUri);

 try 
     { 
      // Make request with the following inline Asynchronous callback 
      request.BeginGetResponse(new AsyncCallback((asynchronousResult) => 
       { 
        HttpWebRequest aRequest = (HttpWebRequest)asynchronousResult.AsyncState; 
        HttpWebResponse aResponse = (HttpWebResponse)aRequest.EndGetResponse(asynchronousResult); 

        using (StreamReader streamReader = new StreamReader(aResponse.GetResponseStream())) 
        { 
         // Deserialize the result 
         string jsonString = streamReader.ReadToEnd(); 
         result = DeserializeToListOfObject(jsonString); 

         JavaScriptSerializer jS = new JavaScriptSerializer(); 
         result = (List<object>)jS.Deserialize<List<object>>(jsonString); 

         if (result[0] is object[]) 
         { 
          foreach (object message in (object[])result[0]) 
          { 
           this.ReturnMessage = message; 
          } 
         } 

我得到了非常連續的相同的返回消息。 任何人都可以幫忙嗎?提前致謝。

+0

這可能與更多的*代碼* *此代碼片段。不要再次調用此代碼,直到收到響應並且您使用「ReturnMessage」。考慮開始一個線程,如果這是一個問題,所以你可以使用GetResponse()。 – 2012-08-13 16:28:33

+0

感謝Hans。我解決了這個問題。這不是因爲我的異步回調實現。剛剛在另一個地方發現了問題。 – 2012-08-13 18:05:38

回答

0

看來問題在該行

request.BeginGetResponse(new AsyncCallback((asynchronousResult) => {} 

MSDN介紹異步請求和響應

通知行的正確實施:

IAsyncResult result= 
     (IAsyncResult) myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState); 

希望這有助於。