【问题标题】:Logging WCF Request to Database将 WCF 请求记录到数据库
【发布时间】:2011-07-29 06:00:54
【问题描述】:

我想将我的 WCF 服务项目中的每个请求 xml 消息记录到数据库中。请建议我这是最好和首选的方法。

1) 使用 idispatchmessageinspector 接口

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.idispatchmessageinspector(v=VS.90).aspx

2) 编写自定义 SQL 数据库跟踪侦听器?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    【讨论】:

    • 我也需要在 PROD 中执行此操作。在 PROD 中启用跟踪是否有任何开销?我的要求就像将所有 xml 请求记录到 WCF 应用程序中的数据库表一样简单。使用 idispatchmessageinspector 有什么问题吗?看起来很简单!
    • IDispatchMessageInspector 的目的不是记录或跟踪,但您当然可以使用它。如果您在单独的线程上进行日志记录(请参阅任务并行库),那么开销应该几乎为零。
    • 感谢您的回复,MSDN 说,“有大量的场景需要在调用它所指定的操作之前拦截消息。例如,您可以记录传入的应用程序消息或执行一些基于消息头的功能。”我打算以异步方式进行日志记录,我觉得这应该可以解决我的问题。我觉得跟踪可能有一些开销,因为它是为了某些诊断目的!让我知道你的想法...
    • 特别是(在单独的线程中),我将使用 ThreadPool.QueueUserWorkItem() 记录请求。
    【解决方案2】:

    最佳方法通常取决于各种因素,但在您的情况下,使用消息检查器似乎是一种首选方法,因为这是构建它的目的,即捕获 WCF 消息并对它们做任何您想做的事情。

    SQL 跟踪是跟踪 SQL 消息(SQL 服务器和 SQL 客户端应用程序之间的通信)而不是 WCF 消息。

    【讨论】:

      【解决方案3】:

      我认为使用idispatchmessageinspector 接口并使用ThreadPool.QueueUserWorkItem() 读取请求并在AfterReceiveRequest 事件中登录数据库会比使用Tracing 更好。我觉得跟踪可能有一些开销,因为它是出于某些诊断目的,并且不想在 prod 中永久启用跟踪。

      使用idispatchmessageinspectorThreadPool.QueueUserWorkItem() 将请求消息记录到数据库有什么问题吗?

      谢谢!

      巴拉

      【讨论】:

        猜你喜欢
        • 2020-08-13
        • 1970-01-01
        • 2015-04-11
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 2017-08-15
        相关资源
        最近更新 更多