服务器上的WCF时间更改导致断开连接

时间:2016-09-05 11:43:05

标签: wcf time

在我的服务器(托管WCF应用程序)上更改时间时,我注意到所有客户端都将断开连接。我确实理解为什么会发生这种情况,由于超时而导致它们断开连接,因为如果我们在一小时后设置时间,则设置为15秒超时的可靠会话将很长时间到期。有趣的是,如果你把它设置回任何时间,它不会失去连接,但是将它向前设置超过15秒就会导致问题。

问题是,我们可以阻止客户端在服务器时间更改时断开连接,因为我发现这种行为很奇怪并且所有客户端都断开连接是一个真正的问题。

我们需要调整服务器时间,因为它会不同步,因为我们需要去物理位置(这是客户的位置),所以我们不能经常这样做。服务器位于高度安全的区域,由于安全原因,它们无法访问(或任何)外部服务器,因此我们需要从外部无法访问整个网络。 安装我们自己的时间服务器通常会遇到同样的问题,它会失去同步,并且保持在可接受范围内的解决方案通常太昂贵。

1 个答案:

答案 0 :(得分:0)

您可以设置绑定,以便不在SOAP中包含时间戳。使用CustomBinding。

这是一个项目的示例代码,我很好奇它是否有效!请注意,此代码还设置了SOAP 1.1版,您可以更改/删除它。

private Binding CreateBindingSoap11_NoTimeStamp()
{
    BasicHttpBinding httpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);

    BindingElementCollection elements = httpBinding.CreateBindingElements();
    elements.Find<SecurityBindingElement>().IncludeTimestamp = false;
    elements.Find<TextMessageEncodingBindingElement>().MessageVersion = MessageVersion.Soap11;

    CustomBinding newBinding = new CustomBinding(elements);

    return newBinding;
}

当然也适用于NetTcpBinding