WCF - 来自同一客户端的多个请求与来自其他客户端

时间:2016-11-15 16:05:47

标签: c# wcf iis concurrency wcf-client

我们在生产中的WCF服务中遇到了一些意外行为。这是我们能够模拟的(简化)情况:

  • 我们有一个WCF服务,可以从中检索一些东西 数据库。
  • 假设数据库存在问题,导致SQL操作超时。
  • 额外信息:服务的Instancecontexmode设置为PerCall,ConcurrencyMode为Single。

如果客户端1对服务执行请求并且客户端2执行请求,我们会看到(即在IIS中的工作进程请求中)这些请求是同时进行的,每次大约需要30秒(因为默认的SQL超时) )。

然而,由于客户端和服务器之间的超时不正确,我们实际上可以在处理初始请求之前执行来自客户端1的第二个请求。那么我们可以:

  • 来自客户1的请求1
  • 来自客户1的请求2(首次请求后大约5秒)
  • 来自客户2的请求1(与客户1的请求2大致相同)

现在来自客户端1的请求1大约需要1。 30秒,就像之前一样。来自客户端1的请求2花费少于60秒。这是可以预期的事情。 但是对我们来说意外的是,来自客户端2的请求也与客户端1的请求2或多或少地相同。我们预计它需要大约30秒。在我们看来,处理来自客户端2的呼叫仅在处理来自客户端1的第二个请求时开始。

有人可以解释这种行为吗?我们可以做些什么来避免/改善这一点?

注意:我们知道我们必须确保客户端和服务器之间的超时“同步”,但我们的实际架构比上面描述的要复杂得多。我们将进行一些优化,但即便如此,我们也可能遇到这种情况......

0 个答案:

没有答案