Intentando usar MessageInspector para modificar el mensaje antes del servicio wcf a través del proxy. Sin embargo durante la depuración del cuerpo del mensaje no se copia y el cuerpo muestraCuerpo del mensaje WCF que muestra <s:Body> ... secuencia ...</s:Body> después de la modificación
<s:Body>... stream ...</s:Body>
¿Cuál es el problema con el código?
public class CustomWCFMessageInspector : IClientMessageInspector
{
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
request = ModifyMessage(request);
return null;
}
private Message ModifyMessage(Message oldMessage)
{
Message newMessage = null;
MessageBuffer msgbuf = oldMessage.CreateBufferedCopy(int.MaxValue);
Message tmpMessage = msgbuf.CreateMessage();
XmlDictionaryReader xdr = tmpMessage.GetReaderAtBodyContents();
XDocument xd = ConvertToXDocument(xdr);
EmitTags(xd);
var ms = new MemoryStream();
var xw = XmlWriter.Create(ms);
xd.Save(xw);
xw.Flush();
xw.Close();
ms.Position = 0;
XmlReader xr = XmlReader.Create(ms);
newMessage = Message.CreateMessage(tmpMessage.Version, null, xr);
newMessage.Headers.CopyHeadersFrom(tmpMessage);
newMessage.Properties.CopyProperties(tmpMessage.Properties);
return newMessage;
}
}
Parece que .ToString() que se llama en el cuerpo ... ¿Qué – Iain
ConvertToXDocument parece? quizás está llamando a xdr.ToString() – Iain
¿Hay algún problema con ToString()? Tiene razón ToString se llama en ConvertToXDocument. XDocument ConvertToXDocument (XmlDictionaryReader xdr) { XNode xn = XNode.ReadFrom (xdr); cadena s = xn.ToString(); return XDocument.Parse (s); } – dhinesh