2010-08-24 83 views
0

我有我自己的UserNamePasswordValidator的WCF服务设置。当验证在验证(字符串用户名,字符串密码)方法失败时,我想将详细信息写入日志以及抛出FaultException。在自定义UserNamePasswordValidator中获取对WCF服务调用的详细信息

我想存储被调用的特定服务方法的详细信息以及传入的参数以及用户名。

如何从Validate方法内部访问这些细节?

实施例以下代码:

public class ColesUserNameValidator : UserNamePasswordValidator 
{ 

    public override void Validate(string userName, string password) 
    { 
     if (CheckCredentials(userName, password)) 
     { 
      return; 
     } 
     else 
     {    
      // do something here to get details of the call to the service and send them to a log file 
      throw new FaultException("Unknown Username or Incorrect Password"); 
     } 
    } 

回答

4

这是不可能的。验证在不同的线程中运行,并且无法访问WCF上下文。也没有WCF上下文包含有关服务方法被调用的信息。 Incomming消息仅包含有关所请求的SOAP Action的信息。

如果你想做一些日志记录实现IErrorHandler。从自定义验证器中抛出SecurityTokenException,并在IErrorHandler的ProvideFault中处理此异常 - 创建FaultException。在IErrorHandler的HandleFault中,您可以实现日志记录。对于日志记录,您可以检查OperationContext.Current是否不为null(是的,如果在消息处理之前抛出异常)并访问有关当前操作调用的信息。