6

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

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

我真的只有一个选择吗?以编程方式设置 CultureInfo?我可以找到所有的转换调用并传入 CultureInfo,或者我可以在 Thread.CurrentThread.CurrentCulture 上设置它。有没有办法一劳永逸地设置 CultureInfo - 对所有暴露的 wcf 方法有影响?

4

3 回答 3

5

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

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

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

于 2009-05-12T19:01:30.323 回答
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"/>
于 2009-04-28T10:42:41.403 回答
0

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

于 2009-04-28T11:03:32.087 回答