我可以轻松地检索大量数据,但是将其发送回服务会显示此错误。我尝试将元素添加到web.config和servicereferences.clientconfig中,但在任何一个中都无法识别。在某一时刻,我收到一条有关将readerQuotas添加到bindingElementExtensions的消息,但是我找不到如何执行此操作的任何有用信息。我发现有帖子说我必须修改devenv.exe.config之类的,但是要用VS来完成。
这是web.config的绑定部分:
<bindings>
<customBinding>
<binding name="QaRiM.Web.Service1.customBinding0">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="QaRiM.Web.Service1">
<endpoint address="" binding="customBinding" bindingConfiguration="QaRiM.Web.Service1.customBinding0"
contract="QaRiM.Web.Service1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
和servicereferences.clientconfig:
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_Service1">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:36533/Service1.svc" binding="customBinding"
bindingConfiguration="CustomBinding_Service1" contract="ServiceReference1.Service1"
name="CustomBinding_Service1" />
</client>
</system.serviceModel>
</configuration>
均由VS生成。
您只是缺少maximum string content length的配置。
将此添加到绑定属性(客户端和服务器)
<readerQuotas maxStringContentLength="2147483647" />
[抱歉,我没有意识到此子元素位于使用自定义绑定时所使用的编码下,在您的示例中似乎为binaryMessageEncoding
。如果没有,请尝试使用该设置的其他编码。
<bindings>
<customBinding>
<binding name="QaRiM.Web.Service1.customBinding0">
<binaryMessageEncoding>
<readerQuotas maxStringContentLength="2147483647"/>
</binaryMessageEncoding>
</binding>
</customBinding>
</bindings>
如果读取XML数据时超出了最大字符串内容长度配额(8192)。”设置后甚至忽略了web.config设置您还可以通过创建XmlDictionaryReaderQuotas实例并将MaxStringContentLength设置为2147483647,来解决代码中的问题]
然后只使用XmlDictionaryReaderQuotas的实例,在这里视为mycreatedreaderquota
XmlDictionaryReaderQuotas mycreatedreaderquota = new XmlDictionaryReaderQuotas();
mycreatedreaderquota.MaxStringContentLength = 2147483647;
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, mycreatedreaderquota);
edit:这保存了不完整的草稿,对不起
流式传输可能是您在客户端最好的选择,以避开缓冲的transferMode的阻塞性质。我不知道将持续存储多大数据的细节,但是如果您走那条路线,您的服务在客户端上的表现会更好。可以在此处找到关于仅配置客户端以进行流传输的良好入门知识:http://systemmetaphor.blogspot.com/2009/05/using-wcf-to-transfer-large-data-files.html。
希望上述帮助的组合
您是否尝试过在服务的配置中设置maxStringContentLength
?在我的情况下,将其设置为允许Silverlight客户端使用maxStringContentLength
的所需值的服务。
请注意,如果允许使用更长的字符串,但不调整maxReceivedMessageSize
,则这也会引起问题。确实需要在服务和客户端上都控制maxReceivedMessageSize
,因为一个不会从另一个继承值。