1

あらゆる種類のメッセージを送信するためにWCFを使用していますが、特にこのメッセージは約3200000バイトに加えて、いくつかの文字列とヘッダーです。ラージペイロードは、あらゆる面で模倣しようとした構成を持つ別のサービスを介してホストから取得されたシリアル化されたオブジェクトです。

パフォーマンスのためにnetTcpバインディングを使用しており、多くのコールバックを使用しています。クライアント側とサーバー側の両方で、見つけることができるすべてのオプションを最大レベルに設定しました。

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_IEventMissionService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="2147483647" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
      <security mode="None" />
    </binding>
    </bindings>
    <client>
      <endpoint address="net.tcp://localhost:7359/EventMissionMap" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IEventMissionService" contract="RXEventMissionMapService.IEventMissionService" name="NetTcpBinding_IEventMissionService" />
      </client>
  </system.serviceModel>

クライアントで次の説明のないエラーメッセージが表示されます。

ソケット接続が中止されました。これは、メッセージの処理エラー、リモートホストによる受信タイムアウトの超過、または根本的なネットワークリソースの問題が原因である可能性があります。ローカルソケットのタイムアウトは「00:00:59.9979996」でした。

そして内面の脱出:

既存の接続がリモートホストによって強制的に閉じられました

トレースを実行すると、もう少し多くの情報が得られます(スタックトレースの最上位):

System.ServiceModel.Channels.SocketConnection.Write(Byte []バッファー、Int32オフセット、Int32サイズ、ブール値即時、TimeSpanタイムアウト)スタックトレースの最上位内部拡張:System.Net.Sockets.Socket.Send(Byte []バッファー、Int32オフセット、Int32サイズ、SocketFlags socketFlags)

スタックトレース内部例外の最上位:

System.Net.Sockets.Socket.Send(Byte []バッファー、Int32オフセット、Int32サイズ、SocketFlags socketFlags)

ペイロードをnullに設定した場合(3.2 MBのオブジェクトを送信しない場合)、メッセージは大騒ぎせずに通過します。

オブジェクトが別のサービスから発信されているという事実は、私の問題と関係がありますか?私の目には、問題はメッセージのサイズですが、構成のオプションを増やしても、これまでのところ役に立ちませんでした。

運が悪かったので、クライアントに設定しようとしました。ストリーミングを使用すると、リクエスト/レスポンスに切り替えたり、すべてのコールバックを削除したりします...

何か案は?

4

1 に答える 1

0

私は間違っていた!!ホスト側の構成レベルで行った変更は、まったく別のサービスにありました。バッファ サイズとメッセージ サイズを最大化するとうまくいきました。どれがそれを機能させたのか本当にわかりません。同様の問題を抱えているすべての人に、ホスト側とクライアント側の両方で MaxBufferSize、MaxReceivedMessageSize、ReaderQuotas->MaxArrayLength、およびいくつかのタイムアウト設定を確認することをお勧めします。また、ホスト側のサービス動作で maxItemsInObjectGraph を最大化します。

于 2010-12-08T08:00:26.687 に答える