WCF客户端超时但仅在使用Windows身份验证时

时间:2017-09-12 15:10:04

标签: .net wcf

我有一个使用WCF和NetTcpBinding的客户端服务器应用程序。可以使用默认的security.mode" Transport"告知服务器使用Windows身份验证。或者可能会被告知使用"无"这意味着应用程序使用自己的内部安全性

当用户启动客户端应用程序时,它会连接到服务器并传递用户的当前凭据。根据它收到的响应/异常,它将知道是否 (a)服务器正在使用Windows身份验证,并且已接受传递的凭据 (b)服务器正在使用Windows身份验证,并且传递的凭据无效 (c)服务器未使用Windows身份验证

这通常可以很好地工作但是在一个客户安装时我们遇到的问题是,当客户端连接到服务器时,没有收到响应并且它超时。但是,只有在选择Windows身份验证时才会执行此操作。如果不是(并且选择了内部安全性),那么它可靠地工作。

客户的客户端和服务器位于不同的安全域中,此实例中的预期行为是客户端将调用服务器,服务器将拒绝凭据,异常将返回给客户端。 (然后客户端会询问用户凭据并重新打电话)

我已在客户端和服务器上启用了WCF跟踪。在服务器上,我可以看到收到的请求,我可以看到SecurityNegotiationException"服务器已拒绝客户端凭据。"生成。

但是客户端没有收到回复。相反,在超时期限到期后,System.TimeoutException"打开操作未在分配的超时00:00:10内完成。分配给此操作的时间可能是较长超时的一部分。"生成(我尝试了更长的超时无效)。

因此,出于某种原因,回复并没有回到客户端。

我无法确定如何进一步诊断。我以前从未见过这个,WCF通常可靠地工作。这可能是网络或防火墙的问题吗?我无法理解的是,如果Security.Mode设置为None,它的工作原理。

如果客户端安装在服务器上并且没有跨越安全域,它也可以工作。

我非常感谢您的想法和帮助

更新:

我已经使用netsh进行了一些网络跟踪,并且在跟踪会话中偶然设法捕获了呼叫工作的场合以及呼叫失败的时机(超时)。分析消息看起来客户端尚未收到从服务器发送的2条TCP消息。然而,服务器认为他们已被承认。现在尝试让网络专家查看跟踪

0 个答案:

没有答案