簡體   English   中英

在WCF服務中傳遞大量數據

[英]Passing large amounts of data in an WCF service

我已經看到這個問題彈出了幾次,但沒有真正明確的答案(因為很可能沒有)...我有一個WCF服務,需要從列表中排序的SQL返回大約14,000行數據<>基於數組。

我的服務配置如下:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IParts" closeTimeout="00:01:00"
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
        maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
          maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>

我的客戶端配置如下:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IParts" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost/RasFuseService/Parts.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IParts"
            contract="MyParts.IParts" name="BasicHttpBinding_IParts" />
    </client>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
</system.serviceModel>

有些事情是不對的,因為我收到了錯誤:

格式化程序在嘗試反序列化消息時拋出異常:嘗試反序列化參數http://tempuri.org/:GetSurplusECMResult時出錯。 InnerException消息是'對象圖中可以序列化或反序列化的最大項數是'65536'。 更改對象圖或增加MaxItemsInObjectGraph配額。 ”。 有關更多詳細信息,請參閱InnerException。

即使我明確地使用max int分配MaxItemsInObjectGraph ...

我已經閱讀過關於流媒體和分頁的內容,但實際上這個數據真的太多了嗎?

把它弄清楚( 額頭啪的一聲)我最終在客戶端寫了一個錯誤的條目。 客戶端的正確語法應該是:

  <behaviors>
    <endpointBehaviors>
      <behavior >
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      </behavior>
    </endpointBehaviors>
  </behaviors>

  <behaviors>
    <serviceBehaviors>
      <behavior>
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

它現在返回並反序列化我的大數組而不抱怨...

我有一個案例,我的WCF服務返回原始表格數據,一次幾兆字節。

XML序列化很糟糕......很多元素和浪費的空間,也很慢。 在這種情況下,我處理了自己的響應生成,並返回格式化為CSV數據的數據。 客戶端生成,發送和解析都要快得多。

我正在使用REStful WCF(這是在ASP.NET替換WCF for REST之前),所以我剛剛從我的WCF方法返回了一個Stream。

在您的客戶端配置中,您的行為有一個名稱,但您似乎沒有使用該名稱。 在某處使用名稱或省略名稱,使您的行為成為服務配置中的默認行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM