Próbujesz użyć MessageInspector do zmodyfikowania komunikatu przed usługą wcf za pośrednictwem serwera proxy. Jednak podczas debugowania treść wiadomości nie jest kopiowana, a treść ciała jest wyświetlana. Jaki jest problem z kodem?Treść komunikatu WCF pokazująca <s:Body> ... strumień ...</s:Body> po modyfikacji
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;
}
}
Wygląda .ToString() jest wywoływana na ciele ... – Iain
Co ConvertToXDocument wyglądać? może to wywołanie xdr.ToString() – Iain
Czy jest jakiś problem z ToString(). Masz rację ToString jest wywoływany w ConvertToXDocument. XDocument ConvertToXDocument (XmlDictionaryReader xdr) { XNode xn = XNode.ReadFrom (xdr); ciąg s = xn.ToString(); return XDocument.Parse (s); } – dhinesh