西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識 → WCF項目中客戶端與服務(wù)器時間問題步無法連接的解決方案

WCF項目中客戶端與服務(wù)器時間問題步無法連接的解決方案

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2011/4/17 15:53:21字體大。A-A+

作者:西西點擊:181次評論:0次標(biāo)簽: WCF

  • 類型:源碼相關(guān)大。79KB語言:中文 評分:5.0
  • 標(biāo)簽:
立即下載

新項目中使用了WCF 實現(xiàn)客戶端與服務(wù)器的通訊。c/s架構(gòu),客戶端采用winfrom實現(xiàn)。項目試運行期間,很多用戶都抱怨系統(tǒng)總是無法正常登錄。

查看日志發(fā)現(xiàn)如下異常信息:

System.ServiceModel.Security.MessageSecurityException: 從另一方收到未進(jìn)行安全處理或安全處理不正確的錯誤。有關(guān)錯誤代碼和詳細(xì)信息,請
參閱內(nèi)部 FaultException。 ---> System.ServiceModel.FaultException: 消息中至少有一個安全令牌無法驗證。

      WCF通訊采用了UserName安全認(rèn)證方式,用Google大神搜索一番,上述異常多是因為客戶端與服務(wù)器端時間不同步所引起的,WCF所提供的幾種Binding客戶端和服務(wù)端所允許的時間差可以是5分鐘.

原因找到了,下面就是如何解決了,網(wǎng)上大多數(shù)方法是使用 命令:net time \\IP地址或服務(wù)器名 /set /yes 去同步客戶端的時間,這種方式我直接給Pass掉了,原因如下:

      通過跟用戶的交流發(fā)現(xiàn)很多用戶是故意將時間提前或推后十幾分鐘的,原因很多就不詳細(xì)列具了。

繼續(xù)找其它解決方案,在國外一個論壇上發(fā)現(xiàn)可以使用customBinding 修改允許的最大時間偏差。let's try it!

修改前的配置文件(刪減了一些配置節(jié))如下:

01
<system.serviceModel>
02
<client/>
03
<services>
04
           <service name="userService">
05
            <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding_user"
06
             contract="Iuser"/>
07
 </service>
08
<bindings> 
09
   <wsHttpBinding>
10
    <binding name="Binding_user">
11
     <security mode="Message">
12
      <transport/>     
13
      <message clientCredentialType="UserName" />
14
     </security>
15
    </binding>
16
   </wsHttpBinding>
17
  </bindings>
18
</system.serviceModel>
1
將wsHttpBinding替換為customBinding后配置文件如下:
01
<system.serviceModel>
02
<client/>
03
<services>
04
      <service name="userService">
05
            <endpoint address="" binding="customBinding" bindingConfiguration="MyCustomBinding"
06
             contract="Iuser"/>
07
  </service> 
08
  </services>
09
  <bindings>
10
 <customBinding>
11
       <binding name="MyCustomBinding">
12
           <transactionFlow />
13
           <security authenticationMode="UserNameForSslNegotiated">
14
               <secureConversationBootstrap>
15
                   <localClientSettings maxClockSkew="00:59:00" />
16
                   <localServiceSettings maxClockSkew="00:59:00" />
17
               </secureConversationBootstrap>
18
               <localClientSettings maxClockSkew="00:59:00" />
19
               <localServiceSettings maxClockSkew="00:59:00" />
20
           </security>
21
           <textMessageEncoding>
22
               <readerQuotas maxStringContentLength="500000"/>
23
           </textMessageEncoding>
24
           <httpTransport maxReceivedMessageSize="10485760" maxBufferPoolSize="524288" />
25
       </binding>
26
   </customBinding>
27
</bindings>
28
</system.serviceModel>
1
這里將充許的最大時間偏差改為59分鐘。
1
到這里還不算完,以上只是修改的服務(wù)端配置文件,在客戶端的app.config文件中同樣要修改,客戶端配置修改后如下:
01
<system.serviceModel>
02
      <bindings>
03
    <customBinding>
04
              <binding name="MyCustomBinding" closeTimeout="00:01:00"
05
                  openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
06
                   >
07
                  <transactionFlow />
08
                  <security authenticationMode="UserNameForSslNegotiated">
09
                      <secureConversationBootstrap>
10
                          <localClientSettings maxClockSkew="00:59:00" />
11
                          <localServiceSettings maxClockSkew="00:59:00" />
12
                      </secureConversationBootstrap>
13
                      <localClientSettings maxClockSkew="00:59:00" />
14
                      <localServiceSettings maxClockSkew="00:59:00" />
15
                  </security>
16
                  <textMessageEncoding>
17
                      <readerQuotas maxStringContentLength="500000"/>
18
                  </textMessageEncoding>
19
                  <httpTransport maxReceivedMessageSize="10485760" maxBufferPoolSize="524288" />
20
              </binding>
21
          </customBinding>
22
      </bindings>
23
      <client>
24
        <endpoint address="http://********/user.svc" binding="customBinding"
25
                  bindingConfiguration="MyCustomBinding" contract="Iuser"
26
                  name="CustomBinding_Iuser" />
27
       </client>
28
  </system.serviceModel>

OK,完工,初次寫博,盡請拍磚。

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)