2011-07-25 29 views
0

我已經用一些自定義的認證和授權實現了一個WCF服務。爲什麼OperationContext.Current在IAuthorizationPolicy.Evaluate()中爲null,但只有前兩次?

的評價我的類的方法,實現了IAuthorizationPolicy被稱爲3倍。

這種情況的原因是,在評估方法中,我試圖從OperationContext.Current屬性來訪問客戶端IP地址爲:

OperationContext context = OperationContext.Current; 
MessageProperties prop = context.IncomingMessageProperties; 
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 

IPAddress address = null; 
if (endpoint != default(RemoteEndpointMessageProperty)) 
{ 
    IPAddress.TryParse(endpoint.Address, out address); 
} 
return address; 

的OperationContext.Current屬性總是空的前兩個運行該方法的次數,但第三次調用Evaluate方法時,該屬性已設置。

在什麼階段是OperationContext.Current屬性被設置?並從哪裏?

我能做些什麼嗎?它不會引起任何大規模的問題 - 授權在第三遍通過該方法時經過...但是它只是覺得這對我來說是不正確的。

如果任何人都可以填補我的東西我做錯了,或者忽視了這樣做將是巨大的。或者,就我爲什麼看到這種行爲的解釋也會非常有趣。謝謝。

回答

0

你的情況真的很有趣,我可能花一些時間來研究它。

我想你可以嘗試開發定製ServiceAuthorizationManager,並在CheckAccessCore方法,你應該始終有機會獲得OperationContext.Current。

0

我的理解是,直到所有的授權完成後,WCF甚至不成立的操作環境。他們首先進行身份驗證/授權,然後,只有在成功後,纔會開始通過創建上下文並調用它來調用您的操作。

所以,可悲的是,你剛剛失去位置。

不過,我也有興趣在獲取IP在這一點上。

相關問題