0

我在本地运行 WCF 服务时遇到问题。当我在本地运行服务时,从客户端上打开通道到看到调用 WCF 服务上的方法大约需要 60 多秒。如果我连接到在我们的暂存环境中运行的服务,它工作正常并且没有减速。

  • 我在 VirtualBox 托管的 VM 内运行 windows server 2008 的新机器上运行客户端和服务。
  • 已在 VM 上禁用 IPV6
  • 我的主机文件中有一个指向 localhost 的引用
  • 客户端和主机上的详细日志记录,仅显示客户端超时生成的异常。从请求开始到结束很长时间,登录服务都没有显示错误。
  • 我关闭了windows防火墙没有任何效果。
  • 客户端和服务的所有配置文件都与登台机器匹配。

我工作的其他开发人员都没有这个问题。我在运行 windows7 的单独机器上也没有这个问题(不在 VM 中)。我们的登台服务器也是所有虚拟机(Server 2008),尽管它们运行在不同的虚拟机平台上。

4

1 回答 1

0

如果您发送非常小的请求并等待每个响应,这看起来就像是Nagle 的算法击中了您。通过暂时禁用它进行测试。

如果您不是在第一次调用服务时才开始看到这种情况,而是在前 10 次左右之后才开始看到这种情况,则可能是会话泄漏。这意味着,一个人正在为每个调用创建一个新的服务客户端,然后忘记关闭它。在ServiceThrottlingBehavior.MaxConcurrentSessions服务器上用尽之后,每个后续会话都必须等到前一个超时,然后它很快就会成功。通过从默认的 60 秒减少来进行测试CloseTimeout,看看这是否是控制您所看到内容的超时。然后,当然,找到会话泄漏并关闭它以进行真正的修复。

如果您的情况都不是,您可以配置服务跟踪并使用其输出来更详细地增强问题。

于 2012-07-01T23:07:58.347 回答