お客様のサイトでランダムなOutOfMemoryExceptionsとInsufficientMemoryExceptionsが発生しています。GZipMessageEncoderを使用してメッセージを圧縮します。(IIS 7.x圧縮オプション、およびバッファリングやGZipMessageEncoderに関するその他の問題を認識しています。)
WCFストリーミングを有効にしてみたかったのです。当社のWCFサービスには、次のような契約があります。
[OperationContract]
DataSet GetDataSet(Guid someGUID, string someName, DataSet parameters);
MSDNのこの記事によると:
ストリーミングされたトランスポート全体で発生する操作は、最大で1つの入力または出力パラメーターとのコントラクトを持つことができます
明らかに、私たちの契約はWCFストリーミングの制限に違反しています。このコントラクトには3つの入力パラメーターがあります。
しかし、好奇心から、とにかくストリーミングを有効にしてみることにしました。web.configファイルとMyCSharpClient.configファイルを編集し、バインディングのトランスポートセクションに次の属性を挿入しました。
<httpTransport ... transferMode="Streamed">
驚いたことに、とにかくすべてが機能しているようです!スローされる例外はありません。GZipMessageEncoderに侵入して、バッファメソッドの代わりにストリームメソッドが呼び出されていることを確認できます。
それで、私の質問:入力パラメーターのWCF制限に違反する操作コンテキストでストリーミングトランスポートをセットアップできたのはなぜですか?MSDNストリーミング記事の強力な表現を考えると、これは単なる実装の詳細であり、この動作に依存してはならないと思います。