Problem with large requests in WCF

非 Y 不嫁゛ 提交于 2019-11-30 03:55:44

问题


I've seen this problem posted a million times, but none of the solutions have worked for me...So here I go:

When calling a WCF service I get the following error:

The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://BlanketImportService.ServiceContracts/2011/06:request. The InnerException message was 'There was an error deserializing the object of type BlanketImport.BlanketImportRequest. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 44440.'. Please see InnerException for more details.

I have modified the readerQuotas on both the client server, AND applied the bindingConfiguration tag.

Here's the server config:

<bindings>
  <basicHttpBinding>
    <binding name="BilagImportBinding" maxBufferSize="2147483647"
      maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>

<services>
  <service name="BlanketImport">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" bindingNamespace="http://BlanketImportService.ServiceContracts/2011/06" contract="BlanketImport.IBlanketImport">
    </endpoint>
  </service>
</services>

And the client config:

  <bindings>
    <basicHttpBinding>
      <binding name="BilagImportBinding" maxBufferSize="2147483647"
        maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
          maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      </binding>
    </basicHttpBinding>
  </bindings>
  <client>
    <endpoint address="http://localhost/BlanketImport/BlanketService.svc"
      binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" contract="BlanketServiceReference.IBlanketService"
      name="BasicHttpBinding_IBlanketService" />
  </client>

回答1:


Found the solution...But still very strange!

If I remove the name attribute from my binding tag and the bindingConfiguration attribute from my endpoint tag it all works. This means that the basicHttpBinding configuration is the default configuration for all basicHttpBinding endpoints




回答2:


I had the same problem whilst trying to upload files using WCF using a named binding configuration. This has to do with the changes in WCF 4.0 and "Simplified" Configuration (see MSDN)

FYI: I tried everything to solve this problem; the parameter to the service was a byte array, so we removed it and used a stream, tried changing buffered versus streaming mode and obviously the 1.5 million config options to change sizes that never got picked up with a named config.

Very strange indeed, but working with your suggestion.




回答3:


I had a similar issue where the named binding wasn't used by the endpoint. My problem was a typo in the service name. Like Livewire said, WCF 4 Simplified Configuration automatically creates a endpoint and my defined endpoint was not overwriting it.



来源:https://stackoverflow.com/questions/7470530/problem-with-large-requests-in-wcf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!