是否在BizTalk管道组件中处置流?
我对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
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类。请注意,健壮的企业级管道组件最好使用只读的、仅向前的、不可查找的流来编写。您可以在此处阅读有关流式管道组件的更多信息:。