2012-05-24 6 views
10

Ich bin auf einem Windows 2008-Server ausgeführt. Ich habe einen Webdienst, der einen WCF-Dienst aufruft. Innerhalb des WCF-Dienstes versucht es ein Datum 20/08/2010 zu werfen, das fehlschlägt, weil es es in US-Format nicht australienisch denkt.Kann Kultur in WCF nicht ändern

Bisher habe ich:

  • Am Bedienfeld, um die Region zu Englisch Australian unter Format ändern
  • Unter der Registerkarte Verwaltung ich auch bei lokalen System in Englisch (Austrlian)
  • innerhalb IIS7 gesetzt haben Die Standard-Website-Ebene Ich habe Kultur und UI-Kultur unter der .Net-Globalisierung verändert.
  • Ich habe auch diese an den Web-Service und WCF Knoten

getan, was ich hinzugefügt habe folgendes an den Webdienst und WCF apps Datei web.config

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

Diese schließlich die Kultur verändert im Web-Service, aber der WCF-Dienst bleibt US-Kultur.

Kann mir jemand sagen, was ich sonst noch versuchen kann?

+0

Sie den Beitrag bearbeiten kann (weil ich nicht kann) und formatieren Sie Ihren Auszug web.config mit Strg + K. –

Antwort

2

Das Problem liegt in der Kultur, die für einen Benutzer im Anwendungspool festgelegt ist.

fand ich die folgende Art und Weise, dieses Problem zu beheben:

  1. Wenn die Anwendungspools verwendet Application es NETZWERK ändern (leider habe ich nicht gefunden, wie regionale Einstellungen für Application eingestellt)
  2. regionalen Stellen Einstellungen, die Sie für den aktuellen Benutzer benötigen (en-AU) und dann für die Systemkonten kopieren, wie beschrieben here.
+0

Sie können diesen Ansatz in Schritt 2 verwenden, um eine neue Anwendungspoolidentität zu erstellen, die über die richtige Kultur verfügt. Wenn Sie die Einstellungen kopieren, aktivieren Sie das Kontrollkästchen für neue Konten übernehmen, starten Sie neu und erstellen Sie anschließend einen neuen App-Pool. – nuander

6

Die WCF wird Ihre Globalisierung Konfiguration ignorieren, wenn Sie ASPnet Kompatibilität nicht gesetzt:

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

Um diesen Modus, um Ihre Service-Klasse zu verwenden, muss das Attribut AspNetCompatibilityRequirements setzen müssen oder müssen:

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

Dies könnte funktionieren, wenn Sie die Culture and CultureUI aus der Konfigurationsdatei anwenden möchten.

Oder Sie könnten versuchen, die Culture in Ihrem WCF-Dienstcode zu erzwingen, wenn Sie sicher sind, dass sie sich nicht dynamisch ändert. Zum Beispiel in Ihrem Dienstklassenkonstruktor. Beachten Sie, dass dies keine bewährte Methode ist. Vielleicht sollten Sie einen Context-Initialisierer verwenden, aber dieser ist ziemlich einfach.

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

Weitere Informationen:

setting-cultureinfo-on-wcf-service-calls

using-call-context-initializers-for-culture

0

Sie es in der Global.asax.cs Datei tun, in der Application_Start Datei:

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