当OperationContext.Current为null时访问WCF MessageHeader

Mar*_*tuc 7 c# wcf

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

OperationContext.Current.RequestContext.RequestMessage.Headers.To
Run Code Online (Sandbox Code Playgroud)

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

Enr*_*lio 10

是的,可以通过Message Inspectors.

的OperationContext的过程中无法使用UserNamePasswordValidator.Validate方法,因为它会在管道中,当呼叫已被分派到相应的服务方法后创建的.

通常,您可以使用Message Inspectors在WCF管道中尽早拦截传入和传出消息.但是,这在您的情况下不起作用,因为仅在成功验证请求后才调用Message Inspectors.

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

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

相关资源: