テキストを含むストリームがあり、そのストリームの一部のテキストを編集 (一部の値を置換) したいと考えています。
ストリームを壊さずにこれを行う最も効率的な方法は何ですか? のカスタム パイプライン コンポーネントでこれを使用したいと考えています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()
。
これを行うより良い方法はありますか?