10

Windows2008サーバーで実行しています。wcfサービスを呼び出すWebサービスが1つあります。WCFサービス内で、2010年8月20日の日付をキャストしようとしますが、Austrlaianではなく米国形式であると見なされるため失敗します。

これまでのところ:

  • コントロールパネルで、地域をフォーマットの下で英国系オーストラリア人に変更します
  • [管理]タブで、システムを英語(オーストラリア)にローカルに設定しました
  • IIS7内のデフォルトのWebサイトレベルで、.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 に答える