2011-11-29 54 views
2

我有一個WCF REST服務,供不同國家使用的移動應用程序使用。它接受並返回JSON,並使用StructureMap。WCF REST服務:通過國家代碼

這個想法是爲所有國家創建一個服務實例,但我需要知道哪個國家正在調用服務,並在服務中執行一些邏輯(例如,確定要使用的連接字符串)。

但是,我想避免國家代碼必須與每個服務請求傳遞。我在這裏有什麼選擇?

例如,我可以爲每個國家設定一個端點嗎?但是在那種情況下,我怎麼知道用什麼端點/國家代碼來調用服務?

也許其他可能性?

+0

你是在談論用戶的位置還是用戶的語言環境?他們與衆不同! –

+0

這是一個確定應用程序安裝時確定的國家/地區代碼,例如「it」或「be」。 –

回答

2

多個端點可能是一個解決方案,但您需要一種可靠的方式來確定實際使用的端點。鑑於WCF REST服務的「斷開」性質(我的意思是使用非WCF類型進行通信並僅使用WCF屬性),這將需要您編寫一個WebHostFactory,該WebHostFactory在創建服務時指定國家對於給定的端點。您可以檢查WebOperationCurrent.Current實例以訪問隱藏在方法簽名中的信息。例如:

Uri requestRoot = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri; 
if (requestRoot.PathAndQuery.Contains("en-us")) { 
    // use english locale 
} 
else if (requestRoot.PathAndQuery.Contains("de-de")) { 
    // use german locale 
} 

你會使用當前WebOperationContext需要一個更好的策略來確定實際的國家/語言,但其基本思想是,如果重新託管下的多條路徑相同的服務和檢查請求中的路徑實例。

編輯 從上面的意見,我想補充一點,你可以訪問UserAgent字符串使用WebOperationContext當前請求。所以你也可以檢查這些信息,尋找關於所需語言的線索。但請記住,這些「隱含」信息僅僅是線索,但從來沒有清楚地表明用戶想要什麼。

+0

謝謝。在WebHostFactory中指定國家:這是否意味着爲每個端點創建單獨的ServiceHost?我如何向每個端點添加不同的自定義數據? –

+0

您提供一個自定義'IInstanceProvider'給服務主機,它通過'Language'屬性集產生一個服務實例。這個想法是,使服務實例知道它使用的語言,並且通過WebServiceHostFactory指定該語言。 –

+0

好吧,但是這不就像直接訪問服務實現中的WebOperationContext一樣嗎? –