2012-01-11 91 views
0

讓我有一些WCF服務。我需要的是存儲與認證用戶相關的附加數據,以便立即獲取此信息(不從數據存儲中查詢)。 我想知道實現它的最佳實踐。我假設可以使用以下替代方法:WCF和存儲認證信息

1)使服務AspnetCompatible,並使用窗體認證,HttpContext和緩存。至於這個選擇,我想知道使用它的缺點。

2)製作每會話服務(InstanceContextMode.PerSession)。至於我,這個選項的主要缺點是它可能會導致可伸縮性問題。據我所知basicHttpBinding不支持每會話模式(也就是說,它不適用於Silverlight應用程序)。

那麼,你怎麼看待它,你會推薦使用什麼?

回答

1

您可以隨時獲取用戶名是這樣的:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name

你甚至可以得到密碼,但它更復雜一些。 Rory Primrose explains it in his article

你還需要什麼其他信息以及什麼讓你不能在通話之間將它存儲在內存中?

編輯:

Scalibity是一個有效的關注,最好我會堅持PerCall實例化。在呼叫之間共享信息的簡單方法與在非WCF上下文中實例之間共享信息沒有任何不同 - 即靜態。

+0

例如,用戶登錄的組織詳細信息以及與經過認證的用戶相關的其他特定數據將被頻繁使用。至於'把它存儲在內存之間的通話' - 這是一般的答案,我需要更具體的;)(因爲我提到了我所知道的方式來做到這一點,但我想知道是否有其他更好的解決方案 – andrew 2012-01-11 09:53:23

+0

你的意思是使用靜態字典(因爲我需要共享數據而不是所有的調用之間,但在與認證用戶相關的數據之間)?如果是這樣,我需要處理清理這些數據,但它可能會變得有點複雜(當用戶明確註銷時的情況除外)... – andrew 2012-01-11 10:44:55