当OperationContext.Current为null时访问WCF MessageHeader

时间:2010-08-23 18:49:45

标签: wcf

我有一个使用自定义UserNamePasswordValidator保护的WCF。我需要访问通常可用的内容:

OperationContext.Current.RequestContext.RequestMessage.Headers.To

所以我可以解析URL。 但是,OperationContext.Current为null。有没有办法在没有OperationContext的情况下获取邮件头?

1 个答案:

答案 0 :(得分:8)

是的,可以通过Message Inspectors。

OperationContext方法期间UserNamePasswordValidator.Validate不可用,因为稍后将在调用已调度到适当的服务方法时在管道中创建它。

通常,您可以使用 Message Inspectors 拦截WCF管道中的传入和传出消息。但是,由于Message Inspectors are invoked only after the request has successfully been authenticated将不适用于您的情况

如果您需要在身份验证之前检查传入的HTTP请求,您唯一的选择是在运行ASP.NET兼容模式的IIS中托管您的WCF服务。 这样,您就可以通过HttpContext类访问请求的URL:

public override void Validate(string userName, string password)
{
    string url = HttpContext.Current.Request.Url.AbsoluteUri;
}

相关资源: