2009-04-28 63 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的必要位置将文化信息明确地设置为迎合在不同语言环境中发送的数据。即日期,字符串,数字