我正在代码中调用此web服务,我希望看到XML,但我找不到公开它的属性。
发布于 2011-03-31 08:15:09
我想您的意思是希望在客户端看到XML,而不是在服务器上跟踪它。在这种情况下,你的答案在我上面链接的问题中,也在How to Inspect or Modify Messages on the Client上。但是,由于该文章的.NET 4版本缺少C#,而.NET 3.5示例中有一些混淆(如果不是bug的话),因此这里为您的目的对其进行了扩展。
您可以在消息发出之前使用IClientMessageInspector截获该消息
using System.ServiceModel.Dispatcher;
public class MyMessageInspector : IClientMessageInspector
{ }
该接口中的方法BeforeSendRequest
和AfterReceiveReply
使您能够访问请求和应答。要使用检查器,您需要将其添加到IEndpointBehavior中
using System.ServiceModel.Description;
public class InspectorBehavior : IEndpointBehavior
{
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(new MyMessageInspector());
}
}
您可以将该接口的其他方法保留为空实现,除非您也想使用它们的功能。有关更多详细信息,请阅读操作指南。
实例化客户端后,将行为添加到终结点。使用示例WCF项目中的默认名称:
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
client.Endpoint.Behaviors.Add(new InspectorBehavior());
client.GetData(123);
在XML中设置断点;重载request.ToString()
以显示MyMessageInspector.BeforeSendRequest()
。
如果您要操作这些消息,则必须处理该消息的副本。详情请参见Using the Message Class。
感谢Zach Bonham's answer在另一个问题中找到了这些链接。
发布于 2014-02-27 14:51:48
OperationContext.Current.RequestContext.RequestMessage
在处理请求期间,此上下文是可访问的服务器端。这对单向操作不起作用。
发布于 2015-02-18 15:01:37
简单地说,我们可以像这样跟踪请求消息。
OperationContext context = OperationContext.Current;
if (context != null && context.RequestContext != null)
{
Message msg = context.RequestContext.RequestMessage;
string reqXML = msg.ToString();
}
https://stackoverflow.com/questions/5493639
复制相似问题