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 閱讀(1124) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 大宁县| 壶关县| 平果县| 安西县| 迁安市| 会同县| 于都县| 岗巴县| 交城县| 旌德县| 兰考县| 崇阳县| 卢龙县| 营口市| 怀安县| 澳门| 延吉市| 双桥区| 兴义市| 呈贡县| 荥阳市| 淮安市| 临猗县| 兴文县| 宁化县| 武强县| 东方市| 大悟县| 榆社县| 贺州市| 定兴县| 许昌县| 新民市| 自治县| 沧州市| 富裕县| 连江县| 邻水| 体育| 乐清市| 鄂托克前旗|