[英]WCF Client Proxy BeginExecute callback not fired
我发现有时OData服务(v2)的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中找不到“关闭”。
任何想法如何获得所有答复? 是否缺少某些内容,例如在第一个响应中进行了一些结束/结束呼叫?
由于找不到解决方案,因此我将使用一种解决方法。 而不是使用异步方法,将在自己的线程中使用同步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.