我有一些使用企业库(4.0)验证应用程序块的WCF服务(在IIS 6中托管)。如果客户端提交的消息未通过验证(即在ValidationFault
异常中被抛回),我非常希望能够在某处记录消息XML(使用代码,没有IIS日志)。所有验证都在服务实现代码启动之前进行。
我确信在服务实现之前可以设置一些类来运行(可能这是验证应用程序块的工作方式),但我不记得是怎么做的,或者确切地知道要搜索什么。
是否可以创建一个类和相关配置,使我能够访问整个SOAP请求消息,或者至少是消息体?
答案 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对象)手工制作到我们的服务时,我们可以轻松访问他们发送垃圾的证据!