10

我在 Windows 2008 服务器上运行。我有一个调用 wcf 服务的 Web 服务。在 WCF 服务中,它尝试投射日期 20/08/2010 失败,因为它认为它是美国格式而不是澳大利亚格式。

到目前为止,我有:

  • 在控制面板上将区域更改为英语澳大利亚格式
  • 在“管理”选项卡下,我还将系统本地设置为英语(澳大利亚)
  • 在默认网站级别的 IIS7 中,我在 .Net 全球化下更改了文化和 UI 文化。
  • 我也在 Web 服务和 WCF 节点上完成了这项工作

我已将以下内容添加到 Web 服务和 WCF 应用程序 web.config 文件中

<globalization requestEncoding="utf-8" 
               responseEncoding="utf-8"  
               culture="en-AU" 
               uiCulture="en-AU" />

这最终改变了 Web 服务中的文化,但 WCF 服务仍然是美国文化。

谁能告诉我我还能尝试什么?

4

3 回答 3

7

如果您未设置 aspNet 兼容性,WCF 将忽略您的全球化配置:

<system.serviceModel>    
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...

要使用该模式,您的服务类必须将属性 AspNetCompatibilityRequirements 设置为 Allowed 或 Required:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ServiceClass
{
...
}

如果您想从配置文件应用 Culture 和 CultureUI,这可能会起作用。

或者,如果您确定它不会动态更改,您可以尝试在 WCF 服务代码中强制使用文化。例如,在您的服务类构造函数中。请注意,这不是最佳实践,也许您应该使用 Context 初始化程序,但这非常简单。

public ServiceClass()
{
    ...
    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-AU");
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-AU");
}

更多信息:

设置cultureinfo-on-wcf-service-calls

using-call-context-initializers-for-culture

于 2012-11-21T16:48:22.457 回答
2

问题在于为应用程序池中使用的用户设置的文化。

我找到了以下解决此问题的方法:

  1. 如果应用程序池使用 ApplicationPoolIdentity 将其更改为 NETWORKSERVICE(不幸的是我没有找到如何为 ApplicationPoolIdentity 设置区域设置)
  2. 在当前用户上设置您需要的区域设置 (en-AU),然后将它们复制到系统帐户中,如此所述。
于 2012-09-20T13:34:05.173 回答
0

您可以在Global.asax.cs文件中执行此操作,在Application_Start文件中:

using System.Threading;
using System.Globalization;

public class Global : HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        CultureInfo.DefaultThreadCurrentCulture = CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-AU");
    }
}
于 2016-01-06T18:17:00.410 回答