tbwshc

          WCF傳較大數據 例子說明

          在從客戶端向WCF服務端傳送較大數據(>65535B)的時候, 客戶端會報錯。什么遠程服務器沒反應之類的。

          問題是我實際發送的數據是剛剛從WCF服務端接收過來的,一來一去,數據量差別并不大。

          然后發現,在客戶端和服務端實際使用的是不同的配置,對于客戶端,在添加ServiceReference時自動生成的ServiceReferences.ClientConfig文件中system.serviceModel節下有這樣的設置:

          <bindings>
              <basicHttpBinding>
                  <binding name="BasicHttpBinding_WcfService" maxBufferSize="2147483647"
                      maxReceivedMessageSize="2147483647">
                      <security mode="None" />
                  </binding>
              </basicHttpBinding>
          </bindings>

          然后在Client節里應用Binding Configuration:

          <client>
                      <endpoint address="http://localhost:22000/Service/WcfService.svc"
                          binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_WcfService"
                          contract="WcfServiceReference.WcfService" name="BasicHttpBinding_WcfService" />

           

          </client>

          在Binding里指定了最大緩存字節數和最大接受字節數,相當于2G的大小!除非傳一整套連續劇,一般是夠用了。

          而在服務端,Web.config文件里,Bindings節是空的,而Service也沒有指定bindingConfiguration屬性,那么它們采用的就是默認的65535的大小。

          問題找到,解決就比較容易了:

          在Bindings節添加新的Binding設置,TB指定最大接受數據:

          <bindings>
              <basicHttpBinding>
                  <binding name="LargeDataTransferServicesBinding" maxReceivedMessageSize="2147483647"
            messageEncoding="Text" transferMode="Streamed" sendTimeout="00:10:00" />
              </basicHttpBinding>
          </bindings>

          之后給相應的Service指定bindingConfiguration屬性:

          <service behaviorConfiguration="Server.Service.WcfServiceBehavior"
            name="Server.Service.WcfService">
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeDataTransferServicesBinding" contract="Server.Service.WcfService" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
          </service>

          這樣就可以從客戶端發送足夠大的數據了。

          P.S.:

          asp.net默認只能傳4M的文件,所以盡管設定了Wcf兩端的配置,還是超不出.net的限定,所以如果要傳輸大文件,還需要在System.Web節下加上

              <httpRuntime maxRequestLength="102400" />
          這里的單位是KB,這樣就可以傳100M的文件了。當然,這么大的文件,最好還是分段傳輸比較好。

          posted on 2012-06-26 16:20 chen11-1 閱讀(1123) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 沁水县| 霍城县| 乐业县| 克拉玛依市| 丹江口市| 凤城市| 阳春市| 平南县| 海原县| 鞍山市| 万安县| 上高县| 将乐县| 永嘉县| 福安市| 静安区| 龙口市| 乌拉特中旗| 华宁县| 桑植县| 锡林浩特市| 运城市| 贵州省| 常宁市| 磐石市| 昭通市| 蓬莱市| 务川| 琼海市| 敖汉旗| 新邵县| 鹿泉市| 资溪县| 佛坪县| 社会| 漳州市| 鱼台县| 宽城| 探索| 大港区| 吴江市|