次の方法で共有


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

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

カスタム dissasember コードで受信データ ストリームを閉じないでください

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

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

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

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

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

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

これを行わないと、ストリームが現在のコンポーネントの最後まで読み取られると、データ ストリーム ポインターがストリームの先頭に設定されていないため、次のコンポーネントは空のストリームと思われるものを受け取ります。 これにより、後続のパイプライン コンポーネントで予期しない解析と検証エラーが発生する可能性があります。