2011-04-13 11 views
1

私のサーバーでNetTcp WCFサービスが実行されており、そのサービスのメソッドの1つを非同期に呼び出すクライアントがあります。多くのデータを返すWCF呼び出しを処理する際のトラブル

サーバーが少量のデータを返すと、すべてが大変です。しかし、多くのデータが戻ってくると、クライアントは突然クラッシュします。

私が見るところでは、サーバーがデータを返すとすぐにクラッシュが発生します。

これをデバッグする方法はありますか?この呼び出しで大量のデータを返すことができるように、調整する必要のあるサービスの設定がありますか?

+0

これは最大メッセージサイズに起因する可能性があります。http://stackoverflow.com/questions/884235/wcf-how-to-increase-message-size-quota/884248#884248 – Nate

+0

データ?あなたはクライアントを所有していますので、あなたはそれを調整することができますか? – driis

+0

データをまとめるか、シリアライザをより倹約的なものに変更できますか? –

答えて

1

私のアプローチはここにある:

  • は、いくつかの呼び出し、(例えば)500行ごとの本質的ページにデータを分割します。一握りの往復(1ではなく)は待ち時間を傷つけることはありませんが、安定性が向上します
  • シリアライザ(私はここに偏っていますが、protobuf-netが好きです)を変更すると、 MTOMを有効にするとの組み合わせで

これは、帯域幅をさまざまな方法で並行して減らし、問題を修正する必要があります。

+0

@Marc Gravellは勝利の答えを持っています - ありがとうございます! –

1

あなたはまた、あなたの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> 

0

最大サイズを増やすと、あなたのサービスは、それがクラッシュしますいくつかの点でIISでホストされている場合、最善の解決策ではありません。 NetTCP bindigを使用している場合、これを実行する最善の方法は、Stream over TCPを公開することです(here参照)。

関連する問題