我使用自己的UserNamePasswordValidator进行WCF服务设置。当验证在Validate(字符串userName,字符串密码)方法中失败时,我想将详细信息写入日志以及抛出FaultException。
我想存储正在调用的特定服务方法的详细信息以及传入的参数以及用户名。
如何从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");
}
}
答案 0 :(得分:4)
这是不可能的。验证在不同的线程中运行,并且无法访问WCF上下文。此外,没有WCF上下文包含有关已调用的服务方法的信息。 Incomming消息仅包含有关所请求的SOAP Action的信息。
如果你想做一些日志工具IErrorHandler。从自定义验证器抛出SecurityTokenException并在IErrorHandler的ProvideFault中处理此预期 - 创建FaultException。在IErrorHandler的HandleFault中,您可以实现日志记录。对于日志记录,您可以检查OperationContext.Current是否为空(是的,如果在消息处理之前抛出异常,则可以是这样)并访问有关当前操作调用的信息。