【问题标题】:Call start and end function in each operation in a wcf-service在 wcf-service 中的每个操作中调用 start 和 end 函数
【发布时间】:2012-05-02 09:33:26
【问题描述】:

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

例如:

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

    ...

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

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

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Empi 打败了我,但我还是会发布它:)

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2018-03-29
          • 1970-01-01
          • 2019-09-07
          • 1970-01-01
          • 2016-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-16
          相关资源
          最近更新 更多