你能拦截WCF消息对象的创建吗? (服务器端)

时间:2011-02-17 11:05:42

标签: .net wcf

如果我有一个具有公开方法的WCF服务,例如:

DoSomething(MyMessage msg)

我可以拦截方法调用的参数创建或更改它的实例化方式吗?

编辑(针对上下文): 我知道这是一个代码味道,所以这个问题更多是出于好奇而不是任何事情,但想象一下,一旦收到消息,我们就希望使用Unity对服务器上的消息执行构造函数注入。这就是我想拦截消息创建的原因 - 使用Unity来实例化它。

3 个答案:

答案 0 :(得分:3)

这个web page here有很长的WCF可扩展性样本列表。

如果正确理解您的问题,您希望能够在服务类上处理消息的调用 - 请在此处查看此示例:Operation Formatter and SelectorIDispatchOperationSelector interface

答案 1 :(得分:0)

您可以在将消息发送到服务之前实现参数检查器以检查参数。

实现参数检查器的关键是实现IParameterInspector接口。该接口包含两个方法:BeforeCall和AfterCall。这些方法的签名如下:

void AfterCall(string operationName, object[] outputs, object returnValue, object
correlationState);

object BeforeCall(string operationName, object[] inputs);

在这两种情况下,发送到方法的参数都作为对象数组呈现给这些方法。但是,他们在管道中的位置取决于检查员是插入客户端还是服务端。有关详细信息,请参阅以下链接:

How to: Inspect or Modify Parameters

答案 2 :(得分:0)

除了marc_s提到的扩展点之外,您还可以考虑IOperationInvoker扩展点。根据您要对参数进行的确切操作,可能更好或更容易满足要求。