0

wcfサービスでwsDualBindingを使用して、ソフトウェアで双方向通信を処理しています。メソッドを呼び出して顧客リストを取得する場合を除いて、すべてが正常に機能しているようです。サービスでクエリの結果を2730レコードに制限すると、約1〜2秒で結果を取得し、データグリッドに表示できます。結果を2731(もう1つ)に制限すると、次のエラーが発生します。

http:// localhost:8731 / Design_Time_Addresses / Dispatch_Studio_Server / DispatchService /は、構成されたタイムアウト(00:00:59.9990000)内に応答を受信しませんでした。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。これは、サービスがまだ操作を処理しているためか、サービスが応答メッセージを送信できなかったためである可能性があります。(チャネル/プロキシをIContextChannelにキャストし、OperationTimeoutプロパティを設定することにより)操作タイムアウトを増やすことを検討し、サービスがクライアントに接続できることを確認してください。

私の調査では、大規模なデータセットにはストリーミングの方が適していることを読みました。そのため、バッファリングの代わりにストリーミングを使用してbasicHttpBindingエンドポイントを設定しようとしましたが、基本的に同じ結果が得られます。2730レコードは正常に機能しますが、2731レコードでは次のエラーが発生します。

HTTPチャネルを介してデータを送信しているときに、エラー(トランスポート接続からデータを読み取れません:接続が閉じられました。)が発生しました。

2730レコードを大きなデータセットと正確に呼ぶことはしません。これは、この問題を引き起こしている他の何かがあると私に信じさせます。

これが私のクライアント構成です:

<system.serviceModel>

これが私のサーバー構成です:

<system.serviceModel>

ご覧のとおり、この問題を解決するためにmaxMessageReceivedSizeおよびその他の設定を変更しようとしましたが、役に立ちませんでした。

御時間ありがとうございます。

4

1 に答える 1

0

このような大量のデータをクライアントに送信してはならない (クライアントがデータの完全なセットに対してタスクを実行するとは思えない) という事実とは別に、MaxSerializedObjectsInGraph 制限に達している可能性があります。

以下を含む構成に動作を追加してみてください。

<dataContractSerializer maxItemsInObjectGraph="2147483646" />

ページネーションまたはフィルタリングを使用して、より小さな結果セットを返すことを検討することもできます。

于 2010-10-15T16:25:02.270 に答える