安全的 WCF 服务在第二次调用客户端通道时超时

Secured WCF service timing out on 2nd invocation of client channel

我们有一个安全且经过身份验证的 WCF 服务,它不能使用服务引用。因此,我们为合约提供接口并手动打开客户端通道。

我们发现只要打开一次就一切正常。我们可以多次调用几种方法。但是,如果通道已关闭或仅设置为新实例,则 Login()(在使用该服务之前的第一步恰好需要)会超时。

更神秘的是,这只发生在我们的生产服务器上。如果我在本地 运行 相同的项目,我可以根据需要多次登录。使用 Web 浏览器中的方法(甚至在代码隐藏 ASPX 页面上)即使在生产服务器上也不会有这个问题。只有当它是一个 .NET 客户端试图打开一个针对生产服务器的客户端通道时,我们才会遇到这个问题。

我们甚至不确定从哪里开始寻找。任何建议将不胜感激。

更新:

根据@Rene 的建议,我们在双方都启用了日志记录。从客户端的日志中,有一条错误记录,基本上与我们已经通过异常获得的超时错误相同。没有任何意义。在服务器的日志中,即使在 2nd login() 之后,也有服务方法被成功调用的记录,并且从服务器的 POV 来看,请求得到服务。

此外,我发现我什至无法在我的机器上使用相同的测试项目来重现此问题。这在我的开发人员的机器上重现。我确认我们使用的是相同版本的 .NET Framework 和 Visual Studio。它肯定是客户端问题。可能是什么?

万一其他人正在寻找答案,我们终于找到了 - 问题是由于需要在客户端设置 System.Net.ServicePointManager.DefaultConnectionLimit 一些更高的值。默认值为 2,但实际上这只允许创建并使用一个代理。将其设置为 3 将允许创建和使用 2 个代理。