使用企业库验证应用程序块的WCF - 如何获取无效消息?

时间:2009-08-20 13:03:53

标签: wcf enterprise-library

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

我确信在服务实现之前可以设置一些类来运行(可能这是验证应用程序块的工作方式),但我不记得是怎么做的,或者确切地知道要搜索什么。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

您可以记录整个WCF消息:

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

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

答案 2 :(得分:0)

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

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

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