是否在BizTalk管道组件中处置流?

是否在BizTalk管道组件中处置流?,biztalk,stream,dispose,biztalk-2009,Biztalk,Stream,Dispose,Biztalk 2009,我对BizTalk和创建自定义管道组件相当陌生。我在示例中看到了类似于以下内容的代码: public void Disassemble(IPipelineContext pContext, IBaseMessage pInMsg) { Stream originalDataStream = pInMsg.BodyPart.GetOriginalDataStream(); StreamReader strReader = new StreamReader(originalData

我对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中)


关于这一点,我没有找到任何资料。有人能帮忙吗?

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


但是,最好的做法是在管道组件中添加您使用的任何流,其生存期与消息的生存期相匹配,以便BizTalk可以在管道执行完成且消息已被处理时自动处理这些流。

谢谢,这正是我所想的,但我找不到任何这样的文件。我会认为,如果关闭流是有害的,那么文档会强调这一点!为了教育起见,我注意到您提到的示例使用了StreamReader和MemoryStream类。请注意,健壮的企业级管道组件最好使用只读的、仅向前的、不可查找的流来编写。您可以在此处阅读有关流式管道组件的更多信息:。