2

クライアントが大量のデータを含むメッセージを送信できるようにするサービスを作成する必要がありますが、API の構造がわかりません。

クライアントが、可変数の関連オブジェクトを含む新しいオブジェクトを保存したいとします。たとえば、OrderDetail オブジェクトに含まれる複数の品目を含む Order です。Order には、それに関連する 1000 以上の OrderDetail オブジェクトが含まれる場合があり、それぞれに 20 ~ 40KB のデータが含まれる場合があります。クライアントは、サービスが注文全体を受け取ったことを知る必要があります。

これを作成するために ServiceStack を使用して調査したいと思います。トラフィックの多いサービスを作成することは、私がよく知っていることではありません。通常は WCF を使用しますが、大きなメッセージに対応するためにメッセージ サイズの制限を増やすことを推奨しているようです。ServiceStack は言うまでもなく、それが WCF での最善の戦略であるかどうかはわかりません。

それぞれの OrderDetail を独自のメッセージとして送信した方がよいでしょうか? 私は、オーダー全体の完全性を維持することを懸念しています。それとも、これを 20 ~ 40 MB のデータの 1 つの大きなメッセージとして保持する必要がありますか? または、ファイルとしてストリーミングしようとする必要がありますか?

4

1 に答える 1

3

ServiceStack の ProtoBuf サポートを使用します。プロトコル バッファは、最も効率的でコンパクトなワイヤ形式です。簡単なので、ServiceStack のストリーミング オプションを調査する前に、まずそれを試してください。

ServiceStack のストリーミング オプション

サービスがストリーミングから大きな恩恵を受けることがわかっている場合は、 ServiceStack サービス内でストリーミングする方法を示すServiceStack へのストリームの送信に関する記事を参照してください。サービスで要求本文をストリーミングできるようにするIRequiresRequestStreamの使用方法を示します。

DTO の要求:

[Route("/upload/{FileName}", "POST")]
public class UploadPackage : IRequiresRequestStream
{
    public System.IO.Stream RequestStream { get; set; }

    public string FileName { get; set; }
}

RequestStreamリクエスト ボディ ストリームへのアクセスは、リクエスト DTOのプロパティに挿入されます。

于 2013-03-28T19:30:16.940 に答える