【问题标题】:WCF Client Proxy BeginExecute callback not firedWCF 客户端代理 BeginExecute 回调未触发
【发布时间】:2017-02-14 10:33:29
【问题描述】:

我发现有时 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 中找不到“关闭”。

知道如何获得所有回复吗?第一次响应时是否缺少某些内容,例如关闭/完成调用?

【问题讨论】:

    标签: c# .net wcf odata


    【解决方案1】:

    由于我没有找到解决方案,我将使用一种解决方法。不使用异步方法,而是在自己的线程中使用同步方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多