2012-05-24 18 views
10

Sono in esecuzione su un server Windows 2008. Ho un servizio Web che chiama un servizio wcf. All'interno del servizio WCF tenta di trasmettere una data 20/08/2010 che fallisce perché la pensa in formato USA non Austrlaian.Impossibile modificare Cultura in WCF

Finora ho:

  • Sul pannello di controllo delle modifiche alla regione di inglese australiano in formato
  • Nella scheda amministrativa ho anche impostato sistema locale a Inglese (Austrlian)
  • all'interno di IIS7 a il livello predefinito del sito web Ho cambiato cultura e cultura dell'interfaccia utente nell'ambito della globalizzazione .Net.
  • Ho anche fatto presente al servizio Web e WCF nodi

ho aggiunto quanto segue per il servizio Web e WCF apps file web.config

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

Questa finalmente cambiato la cultura nel servizio Web, ma il servizio WCF rimane la cultura degli Stati Uniti.

Qualcuno può dirmi cos'altro posso provare?

+0

è possibile modificare il palo (perché non posso) e formattare il tuo estratto web.config con ctrl + K. –

risposta

2

Il problema è nella cultura impostata per un utente utilizzato nel pool di applicazioni.

ho trovato la seguente modo per risolvere questo problema:

  1. Se i pool di applicazioni utilizza ApplicationPoolIdentity modificarlo a NETWORKSERVICE (purtroppo non ho trovato come impostare le impostazioni regionali per ApplicationPoolIdentity)
  2. SET regionale impostazioni necessarie (en-AU) sull'utente corrente e poi copiarle per gli account di sistema come descritto here.
+0

È possibile utilizzare questo approccio nel passaggio 2 per creare una nuova identità del pool di applicazioni che avrà la cultura corretta. Quando si copiano le impostazioni, selezionare la casella di controllo Applica a nuovi account, riavviare e quindi creare un nuovo pool di applicazioni. – nuander

6

La WCF ignorerà la configurazione di globalizzazione, se non si imposta aspnet compatibilità:

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

Per utilizzare questa modalità la classe di servizio deve avere le AspNetCompatibilityRequirements attributo impostato su consentito o richiesto:

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

Questo potrebbe funzionare se si desidera applicare Culture e CultureUI dal file di configurazione.

Oppure è possibile provare a forzare la cultura nel codice del servizio WCF, se si è certi che non cambierà in modo dinamico. Ad esempio, nel costruttore della classe di servizio. Nota che questa non è una best practice, forse dovresti usare un inizializzatore di Context, ma questo è abbastanza semplice.

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

Maggiori informazioni:

setting-cultureinfo-on-wcf-service-calls

using-call-context-initializers-for-culture

0

Puoi farlo nel file Global.asax.cs, nel file 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"); 
    } 
} 
Problemi correlati