0

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

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

string GetDataForRegion(string apiKey, int regionId);

我需要能够记录这些请求以及发送回客户端的数据。我可以使用IDispatchMessageInspector获得响应,但看不到在哪里可以获得请求参数。

我可以看到使用IParameterInspector可以做到这一点,但是如何将请求和响应联系在一起?

理想情况下,我想将这样的内容写入日志(在数据库中):

日期时间、APIKey、方法调用、参数、响应

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

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

这在 WCF 内置的任何东西中都可能吗?

谢谢,

ķ

4

1 回答 1

3

IParameterInspector是你想要的。在服务器端,在BeforeCall调用您的用户代码之前调用该方法,并且您可以从该方法返回一个状态值(通常这将是 aGuid但它可以是任何东西。)一旦您的服务运行并产生返回值,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

于 2012-04-24T21:42:20.007 回答