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」。
任何想法如何得到所有的迴應?第一個答覆中是否有一些關閉/結束呼叫缺失?