代码之家  ›  专栏  ›  技术社区  ›  Chris Dunaway

在BizTalk管道组件中处理流?

  •  2
  • Chris Dunaway  · 技术社区  · 14 年前

    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和其他类时,最好使用using语句,以便自动释放流。

    您不处理此StreamReader有什么特别的原因(可能是在BizTalk中)?

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   tomasr    14 年前

    一般来说,是的,这是一个很好的做法,关闭读者和流你不需要了。也就是说,不一定每次都100%需要。例如,关闭读卡器通常会关闭底层流,但很可能其他人已经意识到该流,并会在正确的时间自行关闭它。

    但是,好的做法是添加在管道组件中使用的任何流,其生存期与消息的生存期匹配 resource tracker

    推荐文章