WCF學習五(客戶端和服務器時間不一致,導致通道建立失敗的問題)

最近,經常有客戶反應,前天還用的好好的系統,今天就不能用了。

考慮到系統近來沒有做過改動和升級操作,所以從客戶的機器環境入手解決,最後發現客戶端的日期時間和服務端的日期時間有較大差異,將客戶端機器修改成和服務端的日期時間一致後,系統恢復正常。

查了一下資料,原來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.系統自動同步服務端的時間,這樣就能解決客戶端和服務端時間不一致的問題,並卻還能保證各個客戶端的時間一致;具體實現方法很多,這裏不再贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章