繁体   English   中英

WCF客户端代理BeginExecute回调未触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM