18

私は、さらに操作するために長い XML 文字列を WCF サービス メソッドに送信することを目的とした .NET、C# アプリケーションを使用しています。アプリケーションが実行時に XML 文字列を WCF サービスに送信しようとすると、次のエラー メッセージが表示されます。

"The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:strProdUserDataXML. The InnerException message was 'There was an error deserializing the object of type System.String. The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 131, position 57.'. Please see InnerException for more details."

アプリケーション側の web.config 「バインディング」と「エンドポイント」を次のように記述しました。

<binding name="EndPointHTTPGenericPortal" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    <security mode="None">
    <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
    </binding>

    <endpoint address="http://192.168.140.40/WcfGenericPortal_Service/Service1.svc" binding="basicHttpBinding" bindingConfiguration="EndPointHTTPGenericPortal" contract="IService1" name="EndPointHTTPGenericPortal" behaviorConfiguration="Graph" />

このエラーを解決する方法について誰かが私を助けることができれば、私は非常に義務付けられています. 事前にすべてに感謝します。

4

7 に答える 7

8

このエラーが発生し、クライアントとサーバーの両方の構成でサービスに this-MaxItemsInObjectGraph プロパティを追加することで解決しました。

<dataContractSerializer maxItemsInObjectGraph="2147483647" />

サーバ側

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="Service.Service1Behavior">
        <dataContractSerializer maxItemsInObjectGraph="2147483647" />
      </behavior>
</system.serviceModel>

クライアント側

<behaviors >
  <endpointBehaviors>
    <behavior name="endpointbehaviour">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </endpointBehaviors>
</behaviors>

この動作を EndPoint behaviorConfiguration="endpointbehaviour" に適用することを忘れないでください

于 2013-03-27T09:22:58.673 に答える
6

バインディングで次のことを設定してみてください。

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
    maxArrayLength="2147483647" maxBytesPerRead="2147483647"
    maxNameTableCharCount="2147483647" />

それは私の問題を解決しました。詳細については、リンクhttp://blogfornet.com/2013/08/the-maximum-string-content-length-quota-8192-has-been-exceeded-while-reading-xml-data/を参照してください。

于 2013-08-17T09:56:17.180 に答える
5

ピナキカルリ、

クォータの長さは、クライアントの構成だけでなく、サーバーの構成にも依存します。問題を明らかにするために、WCF サーバーの web.config を投稿してください。8192のクォータがすでに設定されている可能性があるため、最も簡単な方法は、その値を見つけて増やすことです。

アップデート

私が見る限り、サーバーの web.config に「readerQuotas」ノードがないため、MaxStringContentLengthの値はデフォルト ( 8192 ) に設定されています。詳細については、次のリンクを参照してください: http://msdn.microsoft.com/en-us/library/system.xml.xmldictionaryreaderquotas.maxstringcontentlength.aspx

于 2013-03-27T09:11:07.287 に答える