2

カスタムWCFLOBアダプター(BizTalkで使用するため)でメッセージとしてバイナリ(非XML)ドキュメントを取得する必要があります。メッセージは、System.ServiceModel.Channel.Messageのインスタンスとして表す必要があります。

コンテンツがバイナリの場合、このクラスのインスタンスを作成する方法が見つかりません(「バイナリ」とは、XMLドキュメントのバイナリ表現だけでなく、任意のバイト配列またはストリームを意味します)。

これは可能ですか?または、バイナリコンテンツをXMLエンベロープでラップすることが、WCFでこれを行う唯一の方法でしょうか?

4

2 に答える 2

1

WCFは、バイナリ添付ファイルを送信し、さまざまな方法でデータをストリーミングするいくつかの方法を提供します。これを実行するアプリケーションが動作していますが、コードを掘り下げる機会がなかったため、あまり多くの支援を提供することはできません。ここにあなたが始めるかもしれないいくつかのリンクがあります(ニコラスアレンのインディゴブログはWCF情報のための素晴らしい場所です):

于 2009-03-18T03:21:04.263 に答える
1

基本的に、SSCMessage クラスは Xml InfoSet を基本メッセージ表現として使用するため、WCF メッセージはXML です。

そうです、何らかの方法でバイナリ コンテンツを XML エンベロープに「ラップ」する必要があります (バインディングの構成方法によっては、SOAP エンベロープである必要はありません)。

とはいえ、これは、メッセージ全体をメモリにバッファリングせずに大きなメッセージ ペイロードを処理するためのストリーミングを妨げるものではないことに注意してください。WCF では引き続きこれを行うことができますが、それがどのように機能するかがあまり明確でない場合があります。

カスタム チャネルを使用しているため、次の 2 つの選択肢のいずれかを選択する必要があります。

  1. 独自のチャネルで、バイナリ コンテンツを上に渡す前に XML ラッパーを追加するか、
  2. 自動的に追加するカスタム MessageEncoder を作成します。

どちらの場合でも、大きなメッセージを処理している場合は、サービス実装で調整されたストリーミングを行うオプションを提供するものであるため、バッファーの代わりにストリームを処理する MessageEncoder オーバーロードを使用するようにしてください。 .

于 2009-03-18T12:36:33.820 に答える