我有一臺運行在我的服務器上的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