【问题标题】:wcf asynchronous concurrent call raised timeout exceptionwcf 异步并发调用引发超时异常
【发布时间】:2016-09-07 14:07:06
【问题描述】:

我正在同时使用多个线程从 SilverLight 应用程序进行 10 个并发异步 WCF 服务调用。

WCF 服务将需要 30 秒来处理来自客户端的每个调用。

当第三个线程调用 WCF 服务器时,它会给出超时异常。当我将发送超时配置更改为 10 分钟时,它适用于所有线程。

所以我的困惑是,WCF 是否考虑了所有并发调用的超时配置。请注意,我使用的是基本 HTTP 绑定。

【问题讨论】:

  • 服务是如何定义的?您使用的是什么实例化模式?
  • 默认每个会话上下文和单个并发模式

标签: wcf concurrency


【解决方案1】:

听起来只有一个服务实例处理您的调用。如果(正如您在 cmets 中所说)您将每个会话实例化和并发设置为单个,则会发生这种情况。

这些调用被视为属于同一个客户端会话,因此它们将依次由单个线程、单个服务实例排队和处理。因此,在客户端超时之前未分派的任何请求都会失败。

您应该将实例设置为每次调用,这意味着您将获得每个请求的服务实例,因此所有 10 个调用都应同时处理。

https://msdn.microsoft.com/en-us/library/ms731193(v=vs.110).aspx

【讨论】:

  • Tom 感谢您的回复,我也尝试过 percall,但有时会遇到同样的异常
  • @xavier 服务运营中所做工作的性质是什么?下游是否依赖共享资源?
  • 我们只是从服务中调用存储过程,每次处理大约需要 30 秒
  • @xavier 如果有多个线程同时调用存储过程怎么办?是否会导致数据库争用?
  • 感谢回复,我也是这么想的,所以我创建了一个与我们的生产 wcf 服务一样的 wcf 服务,但在我的示例服务中而不是 sp,我只是将 thread.sleep 设置为 30 秒,在这里我也遇到了同样的问题
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2019-07-23
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多