记录服务器上WCF请求的请求和响应值

时间:2012-04-24 19:54:10

标签: wcf

我在这里可以看到类似的问题,但没有特别相同。

我有一个WCF公共API,客户端可以使用API​​密钥进行查询。如下所示:

string GetDataForRegion(string apiKey, int regionId);

我需要能够将这些请求与发送回客户端的数据一起记录下来。我可以使用 IDispatchMessageInspector 获取响应,但我看不到我可以获取请求参数的位置。

我可以看到使用 IParameterInspector 可以实现这一点,但是如何将请求和响应结合在一起呢?

理想情况下,我想在日志中(在数据库中)写这样的东西:

DateTime,APIKey,MethhodCalled,参数,响应

Sp,使用上面的示例,它将是:

2012-04-24-15-52-11,myapikey,GetDataForRegion,{regionId:1},[响应数据]

在使用WCF内置的任何内容中是否可以使用它?

谢谢,

ķ

1 个答案:

答案 0 :(得分:3)

IParameterInspector就是你想要的。在服务器端,在调用用户代码之前调用BeforeCall方法,并且您可以从此方法返回状态值(通常这将是Guid,但它可以是任何内容。 )一旦您的服务运行并产生了返回值,将使用匹配的AfterCall中的相同状态值调用BeforeCall。在客户端,它的工作方式基本相同,除了调用在服务器往返之前和之后发生。

在您的情况下,分阶段记录信息可能最容易。在入站呼叫期间将请求数据插入数据库,并从呼叫中返回一些唯一标识符(标识字段,时间戳等)。在回程中,使用响应数据更新匹配记录。这也为您提供了一种快速查看呼叫时间,以及是否有任何呼叫无法返回的方法。

以下是对这些工作原理的简短介绍,代码为:

http://blogs.msdn.com/b/endpoint/archive/2011/04/28/wcf-extensibility-iparameterinspector.aspx

您也可以将IDispatchMessageInspector用于同一目的,它的工作方式基本相同,但您必须自己撕开Message个对象;参数检查员可能是一个更好的选择。消息检查员更强大,并且似乎更常用,即使对于有“更简单”选项的事情;见:

http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx