我运行的WCF服务需要解析一些数据。事实证明,数据(点,大小)在不同的CultureInfo中被不同地转换,并且解析在很多类和方法中展开。由于所有解析都是在不传递任何CultureInfo的情况下完成的,因此解析的成功取决于线程文化。
由于没有CultureInfo的编程设置,服务以某种方式从机器中选择当前的cultureinfo。我不知道它在哪里得到这个,因为对区域和语言选项的更改似乎对wcf服务的cultureinfo没有任何影响。对web.config的更改(是的,服务在iis中托管)似乎也不起作用。
我真的只留下一个选项吗?以程序方式设置CultureInfo?我可以找到所有的转换调用并传入CultureInfo,或者我可以在Thread.CurrentThread.CurrentCulture上设置它。难道我无法一劳永逸地设置CultureInfo - 对所有暴露的wcf方法产生影响吗?
答案 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,以满足在不同语言环境中发送的数据。即日期,字符串,数字