WCF LIST 傳輸大資料,遠程伺服器返回了意外響應 400

來源:互聯網
上載者:User

標籤:tle   idc   out   app   .config   複雜   data   metadata   svc   

WCF傳輸LIST 大資料量 出現 遠程伺服器返回了意外響應 400 錯誤提示。

出現這個問題,各種搜尋,都沒有解決問題,而且有些都比較複雜,自己琢磨了一下,其實也不是很難,好了,看下面方案。
解決方案:
在web.config(host)端<system.serviceModel>節中, 增加 services 節 如下:
<services>
      <service behaviorConfiguration="app.dcgkbehavior" name="ErpAssistWCF.DCGKService"  >
        <endpoint  address="" binding="wsHttpBinding" bindingConfiguration="BindConfig"

contract="ErpAssistWCF.IDCGKService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
</services>

service中的name 設定 為 wcf庫名+wcf SVC 檔案名稱。
endpoint中contract 設定為 wcf庫名+wcf CONTRACT 檔案名稱。

注意這裡的幾個關鍵項: behaviorConfiguration,bindingConfiguration,binding

先看第一個關鍵項,看下面的<behaviors>節的配置:
看到<behaviors>中有兩個配置,其中一個name="",這個behavior節是必須有的,不可以刪除。
看第二個behavior節,name為app.dcgkbehavior,這個name可以隨便取,但是,但是,但是,重要的事

情說三遍,這個name 必須要和上面提到的service 節中  behaviorConfiguration後的名字必須一致。

 
<behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceTimeouts transactionTimeout="00:50:00"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceThrottling maxConcurrentCalls="2147483647"

maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647"/>
        </behavior>
        <behavior name="app.dcgkbehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceTimeouts transactionTimeout="00:50:00"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceThrottling maxConcurrentCalls="2147483647"

maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
下面說第二個關鍵字 bindingConfiguration ,看下面的<bindings>節:
對了,第二個關鍵字 bindingConfiguration 後對應的名字就是這個接種 binding節的name,即為:
BindConfig

<bindings>
      <wsHttpBinding>
        <binding name="BindConfig" closeTimeout="00:10:00"
            openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
            bypassProxyOnLocal="false" transactionFlow="false"

hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
            allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647"

maxArrayLength="2147483647"
              maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
              enabled="false" />
         
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="None" negotiateServiceCredential="true"
                algorithmSuite="Default" establishSecurityContext="true" />
          </security>
         
        </binding>
      </wsHttpBinding>
     
    </bindings>
下面說第三個關鍵字 binding ,看上面的 <bindings>節中,我這裡使用的是 <wsHttpBinding>,所以

,binding關鍵字等於 “wsHttpBinding”。

以上就是在 webconfig中的設定。
設定完畢後,重建WCF。然後在 用戶端,將引用的wcf服務刪掉,重新引用。VS會自動更新

app.config。產生 配置後,其中位元組的允許大小還是預設的,可以參照服務端配置,將數值改為最大

2147483647 。
下面為 app.config產生的配置:

<wsHttpBinding>
                <binding name="WSHttpBinding_IDCGKService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00"

sendTimeout="00:10:00"
                    bypassProxyOnLocal="false" transactionFlow="false"

hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="2147483647"

maxArrayLength="2147483647"
                        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="false" />
                    <security mode="None">
                        <transport clientCredentialType="Windows"

proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows"

negotiateServiceCredential="true" />
                    </security>
                </binding>
            </wsHttpBinding>

WCF LIST 傳輸大資料,遠程伺服器返回了意外響應 400

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.