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 语句,以便自动释放流。

是否有特定原因(可能在 BizTalk 中)为什么您不处置此 StreamReader?

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

4

1 回答 1

3

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

但是,好的做法是将您在管道组件中使用的任何流添加到资源跟踪器中,该流的生命周期与消息的生命周期匹配,以便 BizTalk 可以在管道执行完成并且消息已被处理时自动释放它们。

于 2010-07-21T12:37:19.620 回答