私は現在、クライアントがメッセージ付きのxmlファイルを送信してサーバーと通信するサービスを開発しています。メッセージングの信頼性を向上させるために (クライアントは低品質の制限されたバンドスイッチ モバイル インターネットを使用します)、これらのメッセージを 64 または 128 Kb サイズの小さな部分にチャンクし、BasicHttp バインディングで transfer="streamed" を使用して送信します。
ここで、問題があります。サーバーは、クライアントがチャンクを正常に受信したかどうかをクライアントに報告する必要があるため、fe 5 チャンクの転送に失敗した後、転送プロセスはキャンセルされ、後で試行されるように延期され、どれを追跡するかを追跡します。チャンクが受信され、どれが受信されないか。
クライアントと通信するためにコールバックメカニズムを使用することを考えているので、サーバーはサーバー側のファイルにチャンクを保存するときに、[OperationContract] のコールバックメソッド ChunkReceived を呼び出しますが、間違っている場合は修正してください。 WS Dual http バインディングでのみ機能し、basichttp バインディングではサポートされていません。ただし、ストリーミング転送は WS デュアル バインドではサポートされていません。
それで、WS Dual binding に切り替えて transfer="buffered" を使用しても問題ありませんか (チャンク サイズが比較的小さいことを考慮して) - それによって転送の信頼性が損なわれることはありませんか? または、何らかの応答メッセージを返すことで、基本的な http バインディングでクライアントと通信できるかもしれません。
[OperationContract]
ServerResponse SendChunk (Chunk chunk);
ここで、ServerResponse は enum または bool フラグを保持して、SendChunk 操作が正常かどうかをクライアントに伝えます。しかし、すべてのチャンクのステータスを追跡するために、クライアント側とサーバー側の両方である種の配列を保持する必要があります。そこで使用するのに最適なパターンが何であるかはわかりません。アドバイスをいただければ幸いです。