最近,經常有客戶反應,前天還用的好好的系統,今天就不能用了。
考慮到系統近來沒有做過改動和升級操作,所以從客戶的機器環境入手解決,最後發現客戶端的日期時間和服務端的日期時間有較大差異,將客戶端機器修改成和服務端的日期時間一致後,系統恢復正常。
查了一下資料,原來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.系統自動同步服務端的時間,這樣就能解決客戶端和服務端時間不一致的問題,並卻還能保證各個客戶端的時間一致;具體實現方法很多,這裏不再贅述。