次の方法で共有


パイプライン コンポーネントでの受信データ ストリームの処理

BizTalk Serverでパイプライン コンポーネントのカスタム逆アセンブラー コードを記述する場合は、次の考慮事項を行う必要があります。

カスタム逆アセンブラー コードで受信データ ストリームを閉じない

BizTalk Serverでパイプライン コンポーネントのカスタム逆アセンブラー コードを記述する場合は、逆アセンブラー コードで受信データ ストリームを閉じないようにしてください。 入力メッセージからの受信ストリームは共有リソースであり、 受信ストリームは、BizTalk Server メッセージ エンジンのメッセージ本文追跡コンポーネントでも使用されます。

受信ストリームを暗黙的または明示的に閉じると、追跡データが失われる可能性があり、BizTalk Serverでメッセージ イベントとサービス インスタンス追跡を使用してストリーム データを調べることができません。

Stream クラスの Seek メソッドを使い、データ ストリーム ポインターをストリームの先頭に設定する

受信データ ストリームから、ストリームの末尾に達するまで確実にデータを読み込むようにしてください。 たとえば、カスタム コードで 300 KB のデータの読み取り要求を発行し、34 KB のデータしか受信していない場合は、ストリームの末尾に達していません。 カスタム コードでは常に、残り 0 バイトになるまで受信ストリームから読み込む必要があります。

カスタム コンポーネント ロジックでデータ ストリームを返す前に、データ ストリーム ポインターをストリームの先頭に戻してください。 たとえば、次のコードは、ストリームを返す前に seek メソッドを使用してストリームの先頭を指すロジックを示しています。

myDataStream.Seek(0, SeekOrigin.Begin);  
return myDataStream;  

この操作を行わずに現在のコンポーネントでストリームを最後まで読み込んだ場合は、データ ストリーム ポインターがストリームの先頭にないため、次のコンポーネントで受信するストリームは空のストリームになります。 これは、後のパイプライン コンポーネントで予期しない解析エラーや検証エラーが発生する原因となります。