2010-08-30 188 views
1

我applciation的工作原理如下全局變量

[user]----username/password/domain----->[WCF service] 

然後我訪問域名服務器,看看有實際DB用戶與之相關聯, 得到那個後,我驗證用戶在他的實際DB(數據庫是每個域)

問題是,我需要一個地方來存儲下面的請求對數據庫的域名。

例如,如果用戶調用一個WCF服務操作:

Test() 

第一驗證過程被調用時,(WCF UserNamePasswordValidator),其驗證用戶密碼(這被髮送作爲用於REST的報頭的一部分或作爲SOAP的一部分),並且下一個要調用的函數是Test,但是到那時我不能告訴用戶的域名(實際上再次請求該域名..)

我不想將每個域的簽名更改爲

Test(string domain) 

我不能簡單地訪問頭文件,因爲我公開了REST和SOAP相同的方法,並且每個頭文件的身份驗證都不相同。(其中一個頭文件與Amazon S3相同,後者使用SOAP標準)

所以基本上我正在尋找一個全球性的,每個呼叫存儲。(我想避免每次通話開始方法)

感謝。編輯: 也許我應該使用ThreadStaticAttribute?那會工作嗎?

回答

1

WCF知道當前OperationContext。你可以爲它編寫自己的擴展。與這個問題無關,我在這個NHibernate會話管理here中使用了相同的機制,它也可能適用於它的概念。它訪問InstanceContext,但概念是相似的。

+0

看起來不錯,會試試:) – MindFold 2010-08-30 16:12:51

2

這不起作用。您不能在UserNamePasswordValidator中存儲任何內容。它甚至無法訪問OperationContext,因爲它運行在不同的線程上。

這樣做的方法是創建自定義消息檢查器,並將自定義消息頭中的信息提取到自定義操作上下文擴展中,如Frank所述。

+0

哇!這是一個巨大的過度殺死這樣一個簡單的操作... 必須有一個更優雅的方式.. – MindFold 2010-08-30 18:39:29

+0

矯枉過正?不,這是如何以集中方式處理自定義標題的標準方式。 – 2010-08-30 19:01:57