我有一个有很多操作的 WCF 服务。对于每个操作,我想在方法开始和结束时执行一个函数(用于记录)。
例如:
public Person FindPerson(string name)
{
Log("Start",...);
...
Log("Stop",...);
}
有没有办法可以为 wcf 服务中的所有方法实现这一点?也许在 beforeStart/afterEnd 事件中?
查看本教程:http: //msdn.microsoft.com/en-us/magazine/cc163302.aspx。你对IOperationInvoker
界面感兴趣。WCF 非常可扩展且也非常复杂,但 OperationInvoker 应该可以满足您的要求。如果您正在寻找更通用的方法,请考虑在您的 DI 容器中进行拦截(如果您正在使用一个)或考虑通过专门的框架添加 AOP 功能,即。后夏普。
我可以告诉你我们是如何做到的,也许这对你来说是一个选择。我们为此使用了 AOP 样式属性,但使用了自行开发的代码(所以没有 postsharp,...)。PostSharp 也可以。
然后我们有一个单元测试,它检查每个方法(反射)以验证属性是否已添加。
我们这样做是因为我不想使用 WCF 进行日志记录,因为属性解决方案更通用,因此我们可以在其他地方使用。