Ho uno stream che contiene del testo, ora voglio modificare del testo (sostituire alcuni valori) in quel flusso.Come posso modificare il testo in un flusso in modo efficiente, in un componente della pipeline BizTalk?
Qual è il modo più efficiente per farlo, quindi senza interrompere il flusso? Voglio utilizzarlo in un componente della pipeline personalizzato per 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;
}
Questo è il codice, ma come potete vedere sto rompendo il flusso quando faccio sr.ReadToEnd()
.
C'è un modo migliore per farlo?
Puoi forse elaborare con alcuni esempi di codice? Non ho esperienza con lo streaming .. thx –