在wcf-service中的每个操作中调用start和end函数

时间:2012-05-02 09:33:27

标签: c# wcf

我有一个包含大量操作的WCF服务。 对于每个操作,我想在方法开始和结束时执行一个函数(用于记录)。

例如:

public Person FindPerson(string name)
{
    Log("Start",...);

    ...

    Log("Stop",...);
}

有没有办法可以为wcf-service中的所有方法实现? 也许在beforeStart / afterEnd-event中?

3 个答案:

答案 0 :(得分:1)

查看本教程:http://msdn.microsoft.com/en-us/magazine/cc163302.aspx。您对IOperationInvoker界面感兴趣。 WCF非常易于扩展且非常复杂,但OperationInvoker应该满足您的要求。如果您正在寻找更通用的方法,请考虑DI容器中的拦截(如果您正在使用它)或考虑通过专用框架添加AOP功能,即。 PostSharp

答案 1 :(得分:1)

Empi打败了我,但无论如何我都会发布它:)

记录是AOP的典型候选者。

您可以使用许多依赖注入容器中的一个来处理实例化服务和运行时方面的应用。

或者您可以使用postsharp并将日志记录方面应用于您的服务实现。请参阅example开始使用。您的代码将如下所示:

[Trace]
public person FindPerson(string name)
{
    //....
}

答案 2 :(得分:1)

我可以告诉你我们是怎么做的,也许这是你的选择。 我们正在使用AOP样式属性,但是使用自行开发的代码(所以没有postharp,...)。 PostSharp也可以。

然后我们有一个单元测试,它检查每个方法(反射)以验证是否已添加该属性。

我们这样做了,因为我不想使用WCF进行日志记录,因为属性解决方案更通用,所以我们可以在其他地方使用。