将大型WCF结果发送到Silverlight应用程序
本文关键字:Silverlight 应用程序 大型 WCF 结果 | 更新日期: 2023-09-27 18:21:31
我目前有一个Silverlight应用程序调用WCF服务,该服务返回大约7000个对象。我们可以让它返回大约6500个对象,但返回整个集合失败。它还允许我们从DTO中删除一个属性,但在中重新添加会导致失败。
因此,我们的客户端配置为:
<basicHttpBinding>
<binding name="EchoWCFBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"></binding>
</basicHttpBinding>
因此,我们的服务器配置为:
<basicHttpBinding>
<binding name="simpleHttp" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</basicHttpBinding>
我们正在使用ChannelFactory<>连接到服务,如果我们增加客户端上的maxReceivedMessageSize,它会在构造时抛出异常,说它必须是一个int.
试试这个,
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<bindings>
<basicHttpBinding>
<binding name="" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" >
<readerQuotas maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxDepth="2147483647"
maxNameTableCharCount="2147483647"
maxStringContentLength="2147483647" />
<security mode="None"/>
</binding>
</basicHttpBinding>
</bindings>
我用代码解决了这个问题,它实际上提供了更好的用户体验。我将列表分成可管理的块,并通过单独的客户端请求将它们发送到网络上。有了这个,我可以提供一个进度条。