我对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?
我还没有找到关于这一点的任何信息。有人可以帮忙吗?
答案 0 :(得分:3)
总的来说,是的,关闭您不再需要的读者和流是一种很好的做法。也就是说,每次都不一定需要100%。例如,关闭阅读器会正常关闭底层流,但很有可能,其他东西可能已经知道了流,并且会在适当的时候关闭它。
但是,良好的做法是将您在管道组件中使用的任何流添加到与resource tracker匹配的消息的生命周期,以便BizTalk可以在管道执行完成时自动处理它们。消息已被处理。