我有一个调用 WCF 服务的应用程序。出于监视和跟踪目的,我想记录应用程序未能为其调用服务的所有请求消息。 Loke 我需要调用名为 RemoveSubscription 的操作,一旦失败(可能是网络问题或 WCF 服务已关闭),我想将 SOAP 消息记录到 xml 或 txt 文件中。
一般是否可以在代理类中获取请求 SOAP 联系人。
我发现一些信息可以通过扩展 SoapExtension 类来完成。如果这是注册/注入(inject)将 SoapExtension 扩展到 channel 堆栈的新类的正确方法。
编辑:服务不是托管在 IIS 中,而是托管在 Windows 服务中...所以我是对的,在这种情况下,SoapExtension 不是正确的解决方案。
最佳答案
使用基于 WCF 的客户端,您可以创建终结点行为来拦截请求和响应消息。这TechNet article显示如何访问正在发送的消息和响应消息。您可以通过在 Visual Studio 中添加服务引用、使用 SvcUtil 手动生成您的客户端代码或使用 ChannelFactory 类直接在代码中滚动您自己的代理来生成您的 WCF 客户端。
您的日志记录代码总是会写出状态为请求的请求消息和某个数据存储(文件、数据库等)的时间戳。当收到响应消息时,它会以某种方式从响应消息中匹配请求消息内容并更新数据存储以将状态更改为已响应。从数据存储中选择状态为请求较早的某个时间段的所有消息将列出所有失败的消息。
关于c# - 在代理客户端中获取 SOAP 请求体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6775691/