如何获得WCFWeb服务请求的XMLSOAP请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我在代码中调用了这个Web服务,我希望看到这个XML,但是我找不到一个暴露它的属性。

提问于
用户回答回答于
用户回答回答于

我认为你的意思是你想在客户端看到XML,而不是在服务器上跟踪它。在这种情况下,您的答案出现在我上面链接的问题中,以及如何在客户端上检查或修改邮件。但是,由于该文章的.NET 4版本缺少它的C#,并且.NET 3.5示例中存在一些混淆(如果不是错误),在这里它将根据您的目的进行扩展。

可以使用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);

MyMessageInspector.BeforeSendRequest();中设置断点 request.ToString()被重载以显示XML。

如果你打算操纵消息,你必须处理消息的副本。有关详细信息,请参阅使用消息类

扫码关注云+社区