2010-08-23 38 views
6

我有一個使用自定義UserNamePasswordValidator進行保護的WCF。我需要訪問通常可用的:OperationContext.Current爲空時訪問WCF MessageHeader

OperationContext.Current.RequestContext.RequestMessage.Headers.To 

所以我可以解析URL。 但是,OperationContext.Current爲空。有沒有沒有OperationContext的消息頭的方法?

回答

7

是的,可以通過Message Inspectors。

OperationContextUserNamePasswordValidator.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; 
} 

相關資源:

+0

在本地IIS上進行了ASP.NET兼容模式下的快速測試並託管了一項服務,並且HttpContext.Current仍然爲空。看起來我不得不在每個服務調用中都進行身份驗證:( – 2010-08-24 13:13:15

+0

看起來我無法在每個服務調用中執行身份驗證......對於在UserNamePasswordValidator.Validate方法之外獲取用戶密碼沒有本機支持。 – 2010-08-24 14:29:21

+1

將.NET 3.5的服務升級到4.0,並解決了問題。謝謝! – 2010-08-24 16:33:23