在wcf服务调用上设置CultureInfo?

时间:2009-04-28 10:35:08

标签: .net wcf cultureinfo

我运行的WCF服务需要解析一些数据。事实证明,数据(点,大小)在不同的CultureInfo中被不同地转换,并且解析在很多类和方法中展开。由于所有解析都是在不传递任何CultureInfo的情况下完成的,因此解析的成功取决于线程文化。

由于没有CultureInfo的编程设置,服务以某种方式从机器中选择当前的cultureinfo。我不知道它在哪里得到这个,因为对区域和语言选项的更改似乎对wcf服务的cultureinfo没有任何影响。对web.config的更改(是的,服务在iis中托管)似乎也不起作用。

我真的只留下一个选项吗?以程序方式设置CultureInfo?我可以找到所有的转换调用并传入CultureInfo,或者我可以在Thread.CurrentThread.CurrentCulture上设置它。难道我无法一劳永逸地设置CultureInfo - 对所有暴露的wcf方法产生影响吗?

3 个答案:

答案 0 :(得分:5)

关于在web.config中使用标记的答案仅在启用了Asp.net兼容模式时才有效。你还需要以下内容:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

如果没有Asp.Net兼容模式,则不使用http模块,并忽略标记。

答案 1 :(得分:3)

你应该查看这篇博文......

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

...显示如何定义用于设置文化的行为。

但是,web.config应该是你的朋友。您应该可以从此处设置服务使用的“默认”文化。

全球化的元素......

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

...应该允许你设置文化和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"/>

答案 2 :(得分:0)

您可以像上面提到的Martin那样使用配置文件,但作为一种好的做法,您应该在必要时将文化信息设置为InvariantCulture,以满足在不同语言环境中发送的数据。即日期,字符串,数字