2012-05-24 46 views
10

我在Windows 2008服務器上運行。我有一個調用wcf服務的Web服務。 在WCF服務中,它試圖施放日期爲20/08/2010的日期,因爲它認爲它的格式不是美國格式而是Austrlaian。無法更改WCF中的文化

到目前爲止,我有:

  • 在控制面板中的區域更改爲英語澳大利亞在格式
  • 在管理選項卡我已經也是在設置系統本地英語(Austrlian)
  • 內IIS7默認的網站級別我已經改變了.Net全球化下的文化和UI文化。
  • 我也爲Web服務這樣做,WCF節點

我已經添加了以下Web服務和WCF應用程式web.config文件

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

這最終改變了文化在Web服務中,但WCF服務仍然是美國文化。

任何人都可以告訴我我還可以試試嗎?

+0

您可以編輯帖子(因爲我不能)並格式化你的web.config摘錄與ctrl + K。 –

回答

2

問題在於爲應用程序池中使用的用戶設置的文化。

我發現下面的方法來解決這個問題:

  1. 如果應用程序池使用ApplicationPoolIdentity將其更改爲NETWORKSERVICE(不幸的是我沒有找到如何設置ApplicationPoolIdentity區域設置)
  2. 區域設置您需要的設置(en-AU),並按照here所述將其複製到系統帳戶。
+0

您可以在第2步中使用此方法來創建具有正確文化的新應用程序池標識。複製設置時,請選中應用於新帳戶複選框,然後重新啓動,然後創建新的應用程序池。 – nuander

6

的WCF會忽略你的全球化配置,如果你不設置ASPNET兼容性:

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

要使用該模式下您的服務類必須有屬性AspNetCompatibilityRequirements設置爲允許或要求:

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

這可以工作,如果你想從配置文件應用文化和CultureUI。

或者您可以嘗試在您的WCF服務代碼中強制使用Culture,如果您確定它不會動態更改。例如,在你的服務類構造函數中。請注意,這不是最佳實踐,也許你應該使用上下文初始化器,但這個很簡單。

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

更多信息:

setting-cultureinfo-on-wcf-service-calls

using-call-context-initializers-for-culture

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"); 
    } 
}