Audit.Net 记录 SOAP 客户端网络服务调用

问题描述

我的应用使用第三方 SOAP 网络服务。 如何使用 Audit.Net 记录我的应用程序(SOAP 客户端)发出的所有请求/响应? 类似于 Audit.HttpClient 扩展。

问候

解决方法

一种选择是使用 Audit.DynamicProxy 拦截代理调用,例如,如果您使用 ChannelFactory 创建代理,您可以执行以下操作:

using Audit.DynamicProxy;

public T CreateProxy<T>(Uri uri,HttpBindingBase binding)
{
    var channelFactory = new ChannelFactory<T>(binding,new EndpointAddress(uri));
    return AuditProxy.Create<T>(channelFactory.CreateChannel());
}

然后当您拨打服务电话时,例如:

var proxy = CreateProxy<ICatalogService>(uri,binding);
var product = proxy.GetDetailedProductInfo(new GetDetailedProductInfoRequest() { ProductId = "1234" };

您应该获得格式类似于以下内容的审核事件:

{
    "EventType": "generatedProxy_1.GetDetailedProductInfo","Environment": {
        ...
    },"StartDate": "2021-07-16T19:48:15.294298Z","EndDate": "2021-07-16T19:48:21.6566853Z","Duration": 6362,"InterceptEvent": {
        "ClassName": "generatedProxy_1","MethodName": "GetDetailedProductInfo","IsAsync": false,"InstanceQualifiedName": "generatedProxy_1,ProxyBuilder,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null","MethodSignature": "CatalogService.GetDetailedProductInfoResponse GetDetailedProductInfo(CatalogService.GetDetailedProductInfoRequest)","Arguments": [
            {
                "Index": 0,"Type": "GetDetailedProductInfoRequest","Value": {
                    "request": {
                        "ProductId": "1234"
                    }
                }
            }
        ],"Success": true,"Result": {
            "Type": "GetDetailedProductInfoResponse","Value": {
                "GetDetailedProductInfoResult": {
                    "Product": {
                        "ProductId": "1234","Description": "Some description".
                        "CreationDate": "2007-10-31T11:30:35-06:00"
                    }
                }
            }
        }
    }
}
,

您现在可以使用允许审核客户端 WCF 服务调用的扩展库 Audit.WCF.Client

请查看文档 here

它基本上是一个拦截请求和响应消息的 IClientMessageInspector

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...