【问题标题】:WCF using Enterprise Library Validation Application Block - how to get hold of invalid messages?WCF 使用企业库验证应用程序块 - 如何获取无效消息?
【发布时间】:2009-08-20 13:03:53
【问题描述】:

我有一些使用企业库 (4.0) 验证应用程序块的 WCF 服务(托管在 IIS 6 中)。如果客户端提交的消息验证失败(即在ValidationFault 异常中被抛出),我非常希望能够在某处记录消息 XML(使用代码,没有 IIS 日志)。所有的验证都发生在服务实现代码开始之前。

我确信可以设置一些类以在服务实现之前运行(大概这就是验证应用程序块的工作方式),但我不记得如何或确切地找出要搜索的内容。

是否可以创建一个类和相关配置,让我可以访问整个 SOAP 请求消息,或者至少是消息正文?

【问题讨论】:

    标签: wcf enterprise-library


    【解决方案1】:

    看看使用策略注入应用程序块...

    我目前正在开发一个应用程序,在该应用程序中我拦截(使用 PIAB)传入服务器的所有请求,并根据请求类型使用 VAB 应用不同的验证行为。

    这是一篇关于将 PIAB 与 WCF 集成的文章:

    http://msdn.microsoft.com/en-us/magazine/cc136759.aspx

    您可以创建不同的拦截机制,例如应用于暴露操作的属性。

    【讨论】:

      【解决方案2】:

      您可以记录整个 WCF 消息:

      http://msdn.microsoft.com/en-us/library/ms730064.aspx

      或者您可以将它与 Enterprise Library Logging Application Block 结合使用。

      【讨论】:

      • 不幸的是,我们有自己的内部日志 API,我想使用它。我真的不想用更多 EntLib 的东西来膨胀解决方案,我只需要在验证发生之前(或之后)通过某种方式连接到 WCF 并获取消息。
      【解决方案3】:

      我找到了一个 blog post,它似乎可以满足我的要求 - 你创建了一个实现 IDispatchMessageInspector 的类。在AfterReceiveRequest 方法中,您可以访问整个传入消息,因此可以注销。这发生在身份验证之后,因此您还可以访问用户名 - 便于记录。您可以创建支持类,让您通过属性和/或配置将此行为分配给服务。

      IDispatchMessageInspector 还为您提供BeforeSendReply 方法,因此您可以记录(或更改)您的响应消息。

      现在,当客户试图将 SOAP 请求消息(甚至不使用某种 DOM 对象)手工制作到我们的服务时,我们有易于访问的证据证明他们正在发送垃圾!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多