WCF服务无法调用另一台机器上的服务

时间:2021-01-19 20:55:16

标签: wcf networking

情况设置如下:多个 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 调用它,但我没有收到此异常。

我怀疑网络布局/设置等中的某些内容发生了变化并导致了这种情况,但我没有任何确凿的证据,因为目前网络管理员无法联系。

再次 - 一切正常,上个月没有更新交付到此环境中。

我应该去哪里寻找有关这种情况原因的任何线索?

谢谢。

1 个答案:

答案 0 :(得分:0)

事实证明,时间偏差实际上是导致此异常的原因。所有虚拟机都配置为以 AM/PM 格式显示时间,时间偏差正好是 12 小时。由于我们通常使用 24 小时格式,因此未考虑此功能。 案件已结。