首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取WCF Web服务请求的XML SOAP请求?

如何获取WCF Web服务请求的XML SOAP请求?
EN

Stack Overflow用户
提问于 2011-03-31 07:20:43
回答 6查看 125.6K关注 0票数 83

我正在代码中调用此web服务,我希望看到XML,但我找不到公开它的属性。

EN

回答 6

Stack Overflow用户

发布于 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
{ }

该接口中的方法BeforeSendRequestAfterReceiveReply使您能够访问请求和应答。要使用检查器,您需要将其添加到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在另一个问题中找到了这些链接。

票数 154
EN

Stack Overflow用户

发布于 2014-02-27 14:51:48

OperationContext.Current.RequestContext.RequestMessage 

在处理请求期间,此上下文是可访问的服务器端。这对单向操作不起作用。

票数 7
EN

Stack Overflow用户

发布于 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();

}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5493639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档