0

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

例如:

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

    ...

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

有没有办法可以为 wcf 服务中的所有方法实现这一点?也许在 beforeStart/afterEnd 事件中?

4

3 回答 3

1

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

于 2012-05-02T09:44:58.787 回答
1

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

日志记录是AOP的典型候选者。

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

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

[Trace]
public person FindPerson(string name)
{
    //....
}
于 2012-05-02T09:49:24.117 回答
1

我可以告诉你我们是如何做到的,也许这对你来说是一个选择。我们为此使用了 AOP 样式属性,但使用了自行开发的代码(所以没有 postsharp,...)。PostSharp 也可以。

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

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

于 2012-05-02T09:50:16.643 回答