- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试修改 WCF 服务中的请求。
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
string xmlRequest = request.ToString();
XDocument xDoc = XDocument.Parse(xmlRequest);
//Some request modifications
//Here i have XML what in want to send
request = Message.CreateMessage(request.Version, request.Headers.Action, WhatHere?);
request.Headers.Clear();
return null;
}
但我不知道我可以在 CreateMessage
中设置什么,或者可能是将我的 XML 设置为请求的不同方式。
最佳答案
你可以传递一个 XmlReader表示修改消息的对象。以下是文章 How to inspect and modify WCF message via custom MessageInspector 中的示例.
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
Console.WriteLine("====SimpleMessageInspector+BeforeSendRequest is called=====");
//modify the request send from client(only customize message body)
request = TransformMessage2(request);
return null;
}
//only read and modify the Message Body part
private Message TransformMessage2(Message oldMessage)
{
Message newMessage = null;
//load the old message into XML
MessageBuffer msgbuf = oldMessage.CreateBufferedCopy(int.MaxValue);
Message tmpMessage = msgbuf.CreateMessage();
XmlDictionaryReader xdr = tmpMessage.GetReaderAtBodyContents();
XmlDocument xdoc = new XmlDocument();
xdoc.Load(xdr);
xdr.Close();
//transform the xmldocument
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("a", "urn:test:datacontracts");
XmlNode node = xdoc.SelectSingleNode("//a:StringValue", nsmgr);
if(node!= null) node.InnerText = "[Modified in SimpleMessageInspector]" + node.InnerText;
MemoryStream ms = new MemoryStream();
XmlWriter xw = XmlWriter.Create(ms);
xdoc.Save(xw);
xw.Flush();
xw.Close();
ms.Position = 0;
XmlReader xr = XmlReader.Create(ms);
//create new message from modified XML document
newMessage = Message.CreateMessage(oldMessage.Version, null,xr );
newMessage.Headers.CopyHeadersFrom(oldMessage);
newMessage.Properties.CopyProperties(oldMessage.Properties);
return newMessage;
}
关于c# - WCF IClientMessageInspector.BeforeSendRequest 修改请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631372/
关于 IClientMessageInspector 接口(interface)的 BeforeSendRequest 方法的返回值,我找不到太多信息。我发现的所有示例总是返回 null。从 MSDN
在通过标题“集中式 cookie 管理”下概述的方法进行 WCF 服务调用时,我正在管理一个共享的身份验证 cookie:http://megakemp.com/2009/02/06/managing
我正在使用 WCF (.NET 3.5) 与使用 SOAP 的服务器通信。在 Debug模式下运行时,我使用 System.ServiceMode.Dispatcher.IClientMessageI
我实现了一个 IClientMessageInspector在我的应用程序中“拦截”传出的 Web 服务调用。是否可以从 BeforeSendRequest 和 AfterReceiveReply 中
我正在 WCF 中构建 REST 客户端,但是找不到从消息检查器获取当前请求 URI 的方法。需要创建签名以进行自定义身份验证。 最佳答案 您可以从 Message.Properties.Via 属性
我正在尝试修改 WCF 服务中的请求。 public object BeforeSendRequest(ref Message request, IClientChannel channel) {
我有一个实现了 IClientMessageInspector 的 MessageInspector 类。 namespace WCFAuthentication { public class
我有一个 wcf 客户端。根据要求,我需要记录请求中的一些元数据(以及请求中未包含的用户数据)。然后,如果请求成功,我可能必须记录响应元数据,并根据标志,完整的肥皂请求。 我正在尝试以正确的方式执行此
在我的 WCF 服务中,我想编辑 IClientMessageInspector 的 BeforeSendRequest 和 AfterReceiveReply 中的 SOAP。 我创建了一个这样的自
我正在使用我无权访问且无法修改的 WSDL 访问 WCF 服务。对于其中一个请求,远程服务正在终止,因为我们正在发送: 经过广泛搜索,我无法找到解决问题的简单方法。所以,在典型的消息中:
我是一名优秀的程序员,十分优秀!