我试图在C#中记录服务的soap请求和响应消息 . 我有一个现成的肥皂扩展,它可以完成所有这些,但是我无法将其添加到服务方法中 .
由于我的VS项目中添加了服务引用而不是Web服务引用,因此当我检查此服务的引用文件时,我看不到调用远程服务的方法 . 我看到的所有示例都是添加到Web服务,它具有不同的参考格式 .
在这种情况下如何记录soap消息?
Soap扩展仅适用于使用基于ASMX的服务或客户端=添加Web引用 . 使用添加服务引用后,您将使用WCF客户端API,而不能使用Soap扩展 . 您必须创建message inspector instead .
如果仅需要用于调试目的的消息记录,则可以使用内置的WCF message logging .
还有另一种方法可以查看XML SOAP - custom MessageEncoder . 与IDispatchMessageInspector / IClientMessageInspector的主要区别在于它在较低级别上工作,因此它捕获原始字节内容,包括任何格式错误的xml .
为了使用这种方法实现跟踪,您需要将标准textMessageEncoding与custom message encoder包装为新的binding element,并将该自定义绑定应用于config中的 endpoints .
另外,您可以看到我在项目中如何做到这一点 - wrapping textMessageEncoding,记录encoder,自定义绑定element和config .
2 回答
Soap扩展仅适用于使用基于ASMX的服务或客户端=添加Web引用 . 使用添加服务引用后,您将使用WCF客户端API,而不能使用Soap扩展 . 您必须创建message inspector instead .
如果仅需要用于调试目的的消息记录,则可以使用内置的WCF message logging .
还有另一种方法可以查看XML SOAP - custom MessageEncoder . 与IDispatchMessageInspector / IClientMessageInspector的主要区别在于它在较低级别上工作,因此它捕获原始字节内容,包括任何格式错误的xml .
为了使用这种方法实现跟踪,您需要将标准textMessageEncoding与custom message encoder包装为新的binding element,并将该自定义绑定应用于config中的 endpoints .
另外,您可以看到我在项目中如何做到这一点 - wrapping textMessageEncoding,记录encoder,自定义绑定element和config .