我有一個使用自定義UserNamePasswordValidator進行保護的WCF。我需要訪問通常可用的:OperationContext.Current爲空時訪問WCF MessageHeader
OperationContext.Current.RequestContext.RequestMessage.Headers.To
所以我可以解析URL。 但是,OperationContext.Current爲空。有沒有沒有OperationContext的消息頭的方法?
我有一個使用自定義UserNamePasswordValidator進行保護的WCF。我需要訪問通常可用的:OperationContext.Current爲空時訪問WCF MessageHeader
OperationContext.Current.RequestContext.RequestMessage.Headers.To
所以我可以解析URL。 但是,OperationContext.Current爲空。有沒有沒有OperationContext的消息頭的方法?
是的,可以通過Message Inspectors。
OperationContext在UserNamePasswordValidator.Validate方法中不可用,因爲它將在稍後在管道中創建,此時將調用分派給相應的服務方法。
通常情況下,您將通過使用Message Inspectors在WCF管道的早期攔截傳入和傳出的消息。但是這個不會在你的情況下工作,因爲Message Inspectors are invoked only after the request has successfully been authenticated。
如果需要檢查傳入HTTP請求認證之前,你唯一的選擇就是主機在IIS WCF服務在ASP.NET兼容模式運行。 這樣,您就可以通過HttpContext類來訪問請求的URL:
public override void Validate(string userName, string password)
{
string url = HttpContext.Current.Request.Url.AbsoluteUri;
}
相關資源:
在本地IIS上進行了ASP.NET兼容模式下的快速測試並託管了一項服務,並且HttpContext.Current仍然爲空。看起來我不得不在每個服務調用中都進行身份驗證:( – 2010-08-24 13:13:15
看起來我無法在每個服務調用中執行身份驗證......對於在UserNamePasswordValidator.Validate方法之外獲取用戶密碼沒有本機支持。 – 2010-08-24 14:29:21
將.NET 3.5的服務升級到4.0,並解決了問題。謝謝! – 2010-08-24 16:33:23