2

WCF サーバーから大きなバイト配列を返す必要があります。

問題は-そのような配列を返すために-作成する必要がある-そしてそのような配列を作成するとき-それは自動的にラージオブジェクトヒープに移動します-つまり、サービスにストレスがかかると-実際の問題が発生しますメモリの使用と管理。

大規模なマネージド バイト配列の使用を避けるために、アンマネージド メモリを使用することを考えましたが、それでも、WCF サービスからそのような配列を返すにはどうすればよいでしょうか?

マネージ バイト配列を実際に作成することを含まない WCF サービスからバイトの「ストリーム」を返す方法はありますか? WCF 自体が BufferManager を使用していることはわかっています。そのため、アンマネージ メモリを読み取り、そのバッファ管理を使用して送信前に格納するだけであれば、問題が発生しないことを願っています。

4

1 に答える 1

2

WCFのストリーミングモードを使用できます。そのページから:

  1. データをストリーミングするには、サービスのOperationContractが次の2つの要件を満たす必要があります。

    a。ストリーミングされるデータを保持するパラメーターは、メソッド内の唯一のパラメーターである必要があります。たとえば、入力メッセージがストリーミングされるメッセージである場合、操作には1つの入力パラメーターが必要です。同様に、出力メッセージをストリーミングする場合、操作には1つの出力パラメーターまたは戻り値が必要です。

    b。パラメータと戻り値のタイプの少なくとも1つは、StreamMessage、またはIXmlSerializableのいずれかである必要があります。

  2. バインディングでストリーミングを有効にする必要があります。TransferModeプロパティを設定します。これは、次のいずれかの値を取ることができます。

    a。緩衝、

    b。Streamed。双方向のストリーミング通信を可能にします。

    c。StreamedRequest。リクエストのストリーミングのみを有効にします。

    d。StreamedResponse。応答のみのストリーミングを有効にします。

そのページには、カスタムストリームを書き戻す方法など、いくつかの適切な例もあります(下に向かっています)。

エンコーディング、ストリーミング、セッションの背景情報、およびストリーミングを使用する際のセキュリティに関する考慮事項については、このMSDNページを参照してください。

于 2012-11-20T15:43:59.913 に答える