在BizTalk管道组件中配置流?

时间:2010-07-20 18:13:19

标签: biztalk stream dispose biztalk-2009

我对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语句,以便自动处理流。

是否有一个特殊原因(可能在BizTalk中)为什么你不会处理这个StreamReader?

我还没有找到关于这一点的任何信息。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

总的来说,是的,关闭您不再需要的读者和流是一种很好的做法。也就是说,每次都不一定需要100%。例如,关闭阅读器会正常关闭底层流,但很有可能,其他东西可能已经知道了流,并且会在适当的时候关闭它。

但是,良好的做法是将您在管道组件中使用的任何流添加到与resource tracker匹配的消息的生命周期,以便BizTalk可以在管道执行完成时自动处理它们。消息已被处理。