问题描述
情况设置如下:多个 WCF 服务托管在一个子网内的多个虚拟机上的 IIS 上。假设我们有:
- IP 地址为 10.0.8.100 的虚拟机 A
- IP 地址为 10.0.8.101 的虚拟机 B
- IP 地址为 10.0.8.102 的虚拟机 C
A、B 和 C 在同一个域内。
机器 A 有负责身份验证的 WCF 服务,机器 B 和 C 都有调用此身份验证服务的服务。
使用绑定
<binding name="WsHttpBinding_IAuthenticationService"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNaMetableCharCount="2147483647" />
<security mode="Message">
<message clientCredentialType="None" />
</security>
一切正常,直到有一天,当机器 B 和 C 对机器 A 上的身份验证服务的单次调用失败并出现异常时:
An unsecured or incorrectly secured fault was received from the other party.
See the inner FaultException for the fault code and detail.
内部异常说:
An error occurred when verifying security for the message.
同时,这个服务可以通过它在浏览器中的地址访问,我可以成功地从任何其他机器ping任何机器。
我知道这个异常最常见的原因是时间偏差超过了 WCF 默认的 5 分钟。我以前遇到过这个问题,但这是另一种情况,因为所有虚拟机上的时间都是同步的,并且时区选择正确。
有趣的提示:我尝试将提到的身份验证服务从 A 重新定位到 B,而不是从 C 调用它,但我没有收到此异常。
我怀疑网络布局/设置等中的某些内容发生了变化并导致了这种情况,但我没有任何确凿的证据,因为目前网络管理员无法联系。
再次 - 一切正常,上个月没有更新交付到此环境中。
我应该去哪里寻找有关这种情况原因的任何线索?
谢谢。
解决方法
事实证明,时间偏差实际上是导致此异常的原因。所有虚拟机都配置为以 AM/PM 格式显示时间,时间偏差正好是 12 小时。由于我们通常使用 24 小时格式,因此未考虑此功能。 案件已结。