我有一台运行在我的服务器上的NetTcp WCF服务,以及一个客户端异步调用该服务的某个方法。处理WCF调用时遇到的问题返回大量数据
当服务器返回少量数据时,一切都很顺利。但是,当有大量数据要返回时,客户会立即崩溃,甚至无法捕捉到异常情况。
从我所看到的情况来看,服务器返回数据后几乎立即发生崩溃。
任何想法如何调试?是否有一些关于服务的设置,我应该调整以允许我在此调用中返回大量数据?
我有一台运行在我的服务器上的NetTcp WCF服务,以及一个客户端异步调用该服务的某个方法。处理WCF调用时遇到的问题返回大量数据
当服务器返回少量数据时,一切都很顺利。但是,当有大量数据要返回时,客户会立即崩溃,甚至无法捕捉到异常情况。
从我所看到的情况来看,服务器返回数据后几乎立即发生崩溃。
任何想法如何调试?是否有一些关于服务的设置,我应该调整以允许我在此调用中返回大量数据?
我的做法是:
这应该以不同方式并行减少带宽并解决问题。
@Marc Gravell再次获奖 - 谢谢! – 2011-04-14 11:12:51
试图通过添加下面的部分,以你的web.config增加maxReceivedMessageSize =“SomeMaxSize”
<binding name="BasicHttp" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="true" hostNameComparisonMode="StrongWildcard"
maxBufferSize="1000000" maxBufferPoolSize="524288" maxReceivedMessageSize="1000000"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
您还可以启用跟踪为您服务。
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
增加最大尺寸是不是最好的解决办法,如果你的服务是在某个时候会崩溃在IIS托管。如果您使用的是NetTCP bindig,则最好的方法是通过暴露TCP上的Stream,看看here。这里
这可能是由于最大邮件大小,请参阅:http://stackoverflow.com/questions/884235/wcf-how-to-increase-message-size-quota/884248#884248 – Nate 2011-04-13 17:23:48
多少钱是很多数据?你是否拥有客户,所以你可以对其进行调整? – driis 2011-04-13 17:24:08
你可以获取块中的数据,还是将序列化程序更改为更节俭的? – 2011-04-13 17:29:43