Tentativo di utilizzare MessageInspector per modificare il messaggio prima del servizio wcf tramite il proxy. Tuttavia durante il debug il corpo del messaggio non viene copiato e corpo mostraCorpo del messaggio WCF che mostra <s:Body> ... flusso ...</s:Body> dopo la modifica
<s:Body>... stream ...</s:Body>
Qual è il problema con il codice?
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;
}
}
Sembra .ToString() viene chiamato sul corpo ... – Iain
Cosa ConvertToXDocument assomigliare? forse sta chiamando xdr.ToString() – Iain
C'è qualche problema con ToString(). Hai ragione ToString è chiamato in ConvertToXDocument. XDocument ConvertToXDocument (XmlDictionaryReader xdr) { XNode xn = XNode.ReadFrom (xdr); string s = xn.ToString(); restituisce XDocument.Parse (s); } – dhinesh