Как я могу эффективно изменить текст в потоке, в компоненте конвейера BizTalk?

У меня есть поток, содержащий текст, теперь я хочу отредактировать текст (заменить некоторые значения) в этом потоке.

Каков наиболее эффективный способ сделать это, поэтому не прерывая поток? Я хочу использовать это в настраиваемом компоненте конвейера для BizTalk .

public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
{
    string msg = "";
    using (VirtualStream virtualStream = new VirtualStream(pInMsg.BodyPart.GetOriginalDataStream()))
    {
        using(StreamReader sr = new StreamReader(VirtualStream))
        {
            msg = sr.ReadToEnd();
        }

        // modify string here
        msg = msg.replace("\r\n","");

        while (msg.Contains(" <"))
           msg = msg.Replace(" <", "<");

        VirtualStream outStream = new VirtualStream();
        StreamWriter sw = new StreamWriter(outStream, Encoding.Default);
        sw.Write(msg);
        sw.Flush();
        outStream.Seek(0, SeekOrigin.Begin);

        pInMsg.BodyPart.Data = outStream;
        pContext.ResourceTracker.AddResource(outStream);
    }

    return pInMsg;
}

Это код, но, как вы можете видеть, я прерываю поток, когда выполняю sr.ReadToEnd () .

Есть лучший способ сделать это?

6
задан oɔɯǝɹ 12 June 2015 в 17:09
поделиться