2009-04-28 27 views
6

Tengo un servicio WCF en ejecución que necesita analizar algunos datos. Resulta que los datos (puntos, tamaños) se convierten de manera diferente en diferentes CultureInfo y el análisis se extiende en muchas clases y métodos. Como todo el análisis se realiza sin pasar CultureInfo, el éxito del análisis depende de la cultura de los hilos.¿Configurando CultureInfo en llamadas al servicio wcf?

Dado que no existe una configuración programática de CultureInfo, el servicio selecciona el cultureinfo actual de la máquina de alguna manera. No tengo idea de dónde se obtiene esto, ya que los cambios en las Opciones regionales y de idioma no parecen tener ningún efecto en la información cultural del servicio wcf. También parece que los cambios en web.config (sí, el servicio está alojado en iis) tampoco funcionan.

¿Realmente me queda solo una opción? Establecer el CultureInfo programmaticly? Pude encontrar todas las llamadas de conversión y pasar CultureInfo o pude configurarlo en Thread.CurrentThread.CurrentCulture. ¿No hay forma de que pueda establecer CultureInfo de una vez por todas, teniendo efecto en todos los métodos wcf expuestos?

Respuesta

5

La respuesta sobre el uso de la etiqueta en web.config solo funciona si el modo de compatibilidad Asp.net está habilitado. También es necesario lo siguiente en el interior:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

Sin modo de compatibilidad Asp.Net, los módulos HTTP no se utilizan y la etiqueta es ignorado.

+0

No sé por qué me perdí esto, gracias :) –

3

Usted debe comprobar fuera de esta entrada del blog ...

http://blogs.msdn.com/drnick/archive/2008/02/26/using-call-context-initializers-for-culture.aspx

... el que se muestra cómo definir un comportamiento para el establecimiento de la cultura.

SIN EMBARGO, web.config debería ser tu amigo aquí. Debería poder configurar la cultura "predeterminada" con la que trabaja su servicio desde aquí.

La globalización elemenent ...

http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx

... debería permitir establecer la cultura y UICulture ...

<globalization 
    enableClientBasedCulture="true|false" 
    requestEncoding="any valid encoding string" 
    responseEncoding="any valid encoding string" 
    fileEncoding="any valid encoding string" 

    responseHeaderEncoding = "any valid encoding string" 
    resourceProviderFactoryType = string 
    enableBestFitResponseEncoding = "true|false" 

    culture="any valid culture string" 
    uiCulture="any valid culture string"/> 
+0

La publicación del blog es agradable, pero en mi caso significaría volver a escribir un poco el servicio, en cuanto al elemento de globalización, lo intenté pero no funcionó, supongo que lo intentaré de nuevo, tal vez me equivoqué up :) –

+0

El elemento de globalización no parece tener ningún efecto en la cultura del hilo wcf. –

+0

¿Tiene algo más que pueda estar influyendo en la cultura? Web.config debería funcionar. ¿Existe alguna posibilidad de que nos muestre el código que está teniendo problemas? ¿Estás siendo explícito con la cultura que estás usando? Por ejemplo, si está llamando a String.Format, ¿está utilizando la sobrecarga que toma CultureInfo? –

0

Puede utilizar el archivo de configuración como se mencionó Martin más arriba, pero como buena práctica, definitivamente debe establecer la información cultural cuando sea necesario para InvariantCulture para atender los datos que se envían en diferentes lugares. es decir, fechas, cadenas, números

+0

Buen punto. Esto es en realidad una verificación de Análisis de Código cuando se usa el análisis de código VSTS. – BinaryMisfit

+0

Sí, si ejecuta el código a través de FXCop y comprueba las reglas de Globalización, señalará todos los lugares donde se debe definir la cultura. – Madeleine

+0

Sí, pero este es el código heredado y no se supone que deba configurar el análisis del código o reescribirlo si es posible. –

Cuestiones relacionadas