zoukankan      html  css  js  c++  java
  • WCF客户端和服务器时间不一致,导致通道建立失败的问题)

    本文转载:http://www.cnblogs.com/bcbr/articles/2288374.html

    最近,经常有客户反应,前天还用的好好的系统,今天就不能用了。

    考虑到系统近来没有做过改动和升级操作,所以从客户的机器环境入手解决,最后发现客户端的日期时间和服务端的日期时间有较大差异,将客户端机器修改成和服务端的日期时间一致后,系统恢复正常。

    查了一下资料,原来WCF安全校验通道,在建立时,会将客户端和服务端的时间进行对比,如果差异超过一定范围,通道建立工作就会失败;这个时间范围默认为5分钟,可通过配置进行修改,具体方法可到网上搜索。

    另外,客户端为什么用的好好的,突然就不行了,最后检查发现,客户端的机器在同步网络上的时间,这样,在客户端的机器同步了网络时间并且和服务端时间不一致时,系统就会出现异常。

    好了,既然发现了问题,那么怎么解决呢,想到的办法有3个:

    1.将WCF配置为非安全校验类型,这个风险较大,直接放弃

    2.修改配置,将5分钟差异范围增大为30分钟,或更长,如下:

      这个方法带来的问题是,我们必须使用customBinding绑定方式;并且,各个客户端的时间可能不一致,导致业务数据混乱

      <customBinding>

           <binding name="MyCustomBinding">

               <transactionFlow />

               <security authenticationMode="UserNameForSslNegotiated">

                   <secureConversationBootstrap>

                       <localClientSettings maxClockSkew="00:30:00" />

                       <localServiceSettings maxClockSkew="00:30:00" />

                   </secureConversationBootstrap>

                   <localClientSettings maxClockSkew="00:30:00" />

                   <localServiceSettings maxClockSkew="00:30:00" />

               </security>

               <textMessageEncoding>

                   <readerQuotas maxStringContentLength="500000"/>

               </textMessageEncoding>

               <httpTransport maxReceivedMessageSize="10485760" maxBufferPoolSize="524288" />

           </binding>

       </customBinding>

    3.系统自动同步服务端的时间,这样就能解决客户端和服务端时间不一致的问题,并却还能保证各个客户端的时间一致;具体实现方法很多,这里不再赘述。
  • 相关阅读:
    出现socket:(10107)系统调用失败
    JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
    获取滚动条距离底部的距离
    linux常用命令使用方法
    Python:一
    【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符
    【【C++ Primer 第15章】 虚析构函数
    ubuntu基本用法
    深度优先搜索(DFS)和广度优先搜索(BFS)
    【C++ Primer 第7章】定义抽象数据类型
  • 原文地址:https://www.cnblogs.com/51net/p/3149036.html
Copyright © 2011-2022 走看看