2009-04-28 66 views
6

我有一個WCF服務需要解析一些數據。事實證明,在不同的CultureInfo中,數據(點,大小)得到不同的轉換,並且解析分散在很多類和方法中。由於所有解析都是在不傳遞任何CultureInfo的情況下完成的,解析的成功取決於線程文化。在wcf服務電話上設置CultureInfo?

由於CultureInfo沒有編程設置,因此服務會以某種方式從機器中選取當前的cultureinfo。我不知道它是從哪裏得到的,因爲對區域和語言選項的更改似乎對wcf服務的cultureinfo沒有任何影響。也改變了web.config(是的,該服務託管在iis)似乎也沒有工作。

我真的只剩下一個選擇嗎?以編程方式設置CultureInfo?我可以找到所有的轉換調用並傳入一個CultureInfo,或者我可以在Thread.CurrentThread.CurrentCulture上設置它。我有沒有辦法一勞永逸地設置CultureInfo - 對所有暴露的wcf方法有影響?

回答

5

有關在web.config中使用標記的答案僅適用於啓用了Asp.net兼容模式的情況。您還需要以下內容:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

如果沒有Asp.Net兼容模式,則不會使用http模塊,並且標記被忽略。

3

你應該看看這篇博客...

http://blogs.msdn.com/drnick/archive/2008/02/26/using-call-context-initializers-for-culture.aspx

...這說明如何定義設置的文化行爲。

然而,web.config應該是你的朋友在這裏。您應該能夠從這裏設置您的服務可以使用的「默認」文化。

全球化elemenent ...

http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx

...應該允許您設置Culture和UICulture ...

<globalization 
    enableClientBasedCulture="true|false" 
    requestEncoding="any valid encoding string" 
    responseEncoding="any valid encoding string" 
    fileEncoding="any valid encoding string" 

    responseHeaderEncoding = "any valid encoding string" 
    resourceProviderFactoryType = string 
    enableBestFitResponseEncoding = "true|false" 

    culture="any valid culture string" 
    uiCulture="any valid culture string"/> 
+0

博客文章很好,但在我的情況下,這意味着重寫服務一點,至於全球化元素 - 我試過但它沒有工作 - 我想我會再試一次,也許我搞砸了up :) – 2009-04-28 11:16:09

+0

全球化元素似乎對wcf線程的文化沒有任何影響。 – 2009-04-28 11:34:12

+0

您還有其他可能影響文化的東西嗎? Web.config將工作。 有沒有可能向我們展示有問題的代碼?你是否清楚你正在使用的文化。例如,如果你調用String.Format,那麼你是否使用了一個接受CultureInfo的重載? – 2009-04-28 12:07:25

0

您可以使用配置文件作爲馬丁提到但是作爲一種良好的做法,您應該在InvariantCulture的必要位置將文化信息明確地設置爲迎合在不同語言環境中發送的數據。即日期,字符串,數字