从我的Silverlight 3应用程序中,我使用了WCF服务。我将整数列表传递给服务。此列表可以获得非常大的> 10k条目。最终,当列表变大时,我从服务中收到错误。
我知道,我可以设置该值以允许在ServiceReference.ClientConfig文件中传输更多数据,但我不知道要设置的位置和属性。
当配置在服务器中完成时,我现在显示服务器配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
...
</appSettings>
<system.web>
<compilation debug="true" />
<httpRuntime maxRequestLength="1048576"
executionTimeout="200" />
</system.web>
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="silverlightFaults" type="DiscoDataSource.SilverlightFaultBehavior, DiscoDataSource, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<bindings>
<basicHttpBinding>
<binding name="MyBinding" closeTimeout="10:00:00" openTimeout="10:00:00"
receiveTimeout="10:00:00" sendTimeout="10:00:00" maxBufferSize="6553600"
maxBufferPoolSize="6553600" maxReceivedMessageSize="6553600" >
<readerQuotas maxArrayLength="2147483647"/>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="DiscoDataSource.Service1Behavior"
name="DiscoDataSource.Service1">
<endpoint address="" behaviorConfiguration="DiscoBehavior" binding="basicHttpBinding"
bindingConfiguration="MyBinding" name="standardEndPoint" contract="DiscoDataSource.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/DiscoDataSource/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="DiscoBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483646" />
<silverlightFaults />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="DiscoDataSource.Service1Behavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
编辑:我已经尝试了我发送的列表的大小(它是一个包含对象的字典总是为null)。在60k元素(~0.5 MB)之后,发生错误。真正困扰我的是,错误是臭名昭着的NotFound-Error - 尽管我改变了错误报告行为(适用于服务代码抛出的异常)
我已经添加了bnkdev和marc_s的答案,但不幸的是,似乎还有另一个障碍。
任何人都可以帮助我吗?
提前致谢, 弗兰克
答案 0 :(得分:1)
由于您正在使用http,因此查看httpRuntime的maxRequestLength可能是值得的,例如。
<httpRuntime maxRequestLength="2097151"/>
答案 1 :(得分:0)
maxArrayLength
中还有一个额外的参数<ReaderQuotas>
,它决定了数组中元素的最大数量 - 默认为8192.
<bindings>
<basicHttpBinding>
<binding name="standardBindingPoint" closeTimeout="10:00:00"
openTimeout="10:00:00" receiveTimeout="10:00:00" sendTimeout="10:00:00"
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxArrayLength="15000"/>
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
将其增加到超过其默认值,大到足以容纳最大的整数列表。