2017-02-14 22 views
0

我發現有時OData服務(v2)的BeginExecute方法的回調不會觸發。只有運行多個並行異步請求時纔會出現這種情況。 一些demonstartion代碼:WCF客戶端代理BeginExecute回調未觸發

public void Run() 
    { 
     Service = new SAP.TEST_SRV_Entities(new Uri(@"https://...")); 
     Service.Credentials = new NetworkCredential("user", "password"); 
     Service.MergeOption = System.Data.Services.Client.MergeOption.NoTracking; 

     for (int i = 0; i < 6; i++) 
     { 
      AsyncCallback callback = new AsyncCallback(Response); 
      string url = @"https://..."; 
      Service.BeginExecute<SAP.Folder>(new Uri(url), callback, null); 
      Console.WriteLine("Request"); 
      //System.Threading.Thread.Sleep(1000); 
     } 
    } 

    void Response(IAsyncResult asyncResult) 
    { 
     Console.WriteLine("Response"); 
     List<SAP.Folder> sapfolders = Service.EndExecute<SAP.Folder>(asyncResult).ToList(); 
    } 

程序的輸出是:

Request 
Request 
Request 
Request 
Request 
Request 
Response 
Response 
Response 
Response 

6請求啓動,但只有4結束。 我的服務器上沒有收到丟失的兩個請求。如果我在請求之間插入睡眠,或者它們被稱爲同步,那麼每件事情都很好,我會得到所有迴應。 在我看來,第一個請求是不正確的完成。增加ServicePointManager.DefaultConnectionLimit會產生更多完成的請求。 代碼由wpf按鈕的事件處理程序調用,因此應用程序未退出。

如果我錯過了在http請求的WebResponse上調用close,我會得到一個類似的錯誤。在WCF中找不到「close」。

任何想法如何得到所有的迴應?第一個答覆中是否有一些關閉/結束呼叫缺失?

回答

0

由於我沒有找到解決方案,我將使用一種解決方法。而不是使用異步方法,將在自己的線程中使用同步。