2

私は BizTalk の初心者で、カスタム パイプライン コンポーネントを作成しています。次のような例のコードを見たことがあります。

public void Disassemble(IPipelineContext pContext, IBaseMessage pInMsg)
{

    Stream originalDataStream = pInMsg.BodyPart.GetOriginalDataStream();
    StreamReader strReader = new StreamReader(originalDataStream);

    string strOriginalData = strReader.ReadToEnd();

    byte[] bufferOriginalMessage = new byte[strOriginalData.Length];
    bufferOriginalMessage = ASCIIEncoding.Default.GetBytes(strOriginalData);

    Stream ms = new MemoryStream();
    ms.Write(bufferOriginalMessage, 0, strOriginalD

    //other stuff here

    ms.Seek(0, SeekOrigin.Begin);
    pInMsg.BodyPart.Data = ms;
}

ただし、メソッドのどこにも StreamReader が閉じられたり破棄されたりしていません。メソッドは単に終了します。

通常、StreamReader およびその他のクラスを使用する場合、ストリームが自動的に破棄されるように using ステートメントを使用することをお勧めします。

この StreamReader を破棄しない特定の理由 (おそらく BizTalk 内) はありますか?

この点に関する情報は見つかりませんでした。誰でも助けることができますか?

4

1 に答える 1

3

一般に、不要になったリーダーとストリームを閉じることをお勧めします。とはいえ、毎回 100% が必要になるとは限りません。たとえば、リーダーを閉じると、基になるストリームが正常に閉じられますが、おそらく、他の何かが既にストリームを認識しており、適切なタイミングで単独で閉じる可能性があります。

ただし、パイプラインの実行が終了し、メッセージが処理されたときに、BizTalk がそれらを自動的に破棄できるように、メッセージの有効期間と一致する有効期間を持つパイプライン コンポーネントで使用するストリームをリソース トラッカーに追加することをお勧めします。

于 2010-07-21T12:37:19.620 に答える