【问题标题】:Request limit when using async WCF calls?使用异步 WCF 调用时的请求限制?
【发布时间】:2010-11-01 21:50:24
【问题描述】:

我在循环中使用异步 wcf 调用(比如循环运行 45 次迭代)

        ServiceClient client = ServiceClientFactory.Instance().GetServiceClient();

        for (int count = 0; count < 45; count++)
        {

            client.BeginSendCount(textBox1.Text, client_SendCountCompleted , client);

        }

发生这种情况时,并非所有请求都在服务处收到(仅收到 20 个)。但是,如果我同步执行所有调用,则服务器会收到所有调用。

我正在使用具有以下设置的 NetTcp 绑定,

closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"

[在这里我尝试按照其他一些论坛的建议减少超时,但没有任何区别]

此外,我在服务器端使用带有“NoConcurrency”的 SingleInstance(这是我考虑过的,这是这种情况下的最佳设置)。并托管在 Windows 服务中。

有人有想法吗?

帮助表示赞赏。

/BB

【问题讨论】:

  • 我确信一些绑定选项提供了保证有序和可靠(即确认)交付的能力......

标签: wcf asynchronous


【解决方案1】:

您使用什么来托管服务? IIS 可能会决定它被淹没并停止接收请求。我会调查这些设置。或者,您可能会找到一种方法来避免收到如此多的请求。

【讨论】:

  • 这是作为 winservice 托管的,我接受这样一个事实,即调用次数过多,但这种多次迭代很少发生,除了同步调用工作正常。感谢您的快速回复,我已经用更多信息更新了问题。
  • 你提到你已经“减少了超时时间”来提供帮助,但我认为你应该延长超时时间,因为服务器可能负载过大,无法在 1 分钟内做出响应(特别是如果它们是单/无并发)。尝试将它们全部推到 10 分钟。
  • 您是否更改了客户端和服务器的超时时间? “并非所有请求都在服务处收到(仅收到 20 个)。”哪 20 个?前 20 个还是随机的 20 个?
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 2017-11-15
  • 1970-01-01
  • 2021-03-05
  • 2012-03-08
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
相关资源
最近更新 更多