问题描述
我的应用使用第三方 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
。