2011-06-07 26 views
7

Estoy ejecutando un proyecto web en Windows Azure Emulator y no se está cargando el archivo web.config. Me estoy ejecutando como una aplicación IIS completa, y puedo ir a la aplicación que se ejecuta en IIS después de que se haya lanzado la estructura dev, y buscar la ubicación del archivo, y haber verificado que la web.config correcta está de hecho en la carpeta.El rol de la red Azure no carga web.config?

Cuando ejecuto mi aplicación, no se carga ninguna de las claves de configuración de la aplicación, configuración o configuración de la biblioteca Enterprise. Todos los datos disponibles para mí se extraen de machine.config.

He verificado esto mirando los datos del administrador de configuración, la colección de cadenas de conexión, y tengo muchos errores sobre no poder acceder a mi base de datos porque el valor predeterminado no está allí y la única cadena de conexión es el sql local expresar información del servidor desde machine.config.

+0

¿Hay algo fuera de lo común con su web.config? ¿Qué sucede si solo tienes algunas appSettings o una sola cadena de conexión? Puedes leer esos? Parece que algo no está formateado correctamente. ¿Alguna posibilidad de que puedas publicar una muestra web.config? –

+0

@David: la configuración no ha cambiado: la aplicación se ejecuta tanto en Azure como en las instalaciones, y las instalaciones directas funcionan bien. Hice una comparación binaria de la configuración y es la misma que ha estado trabajando en nuestra prueba azul env, que aún funciona por cierto. El xml ha sido validado y también está bien, sin mezclas de corchetes. Mi entorno de desarrollo no lo está cargando. Voy a publicar cuándo y si tengo una solución, aunque en caso de que aparezca de nuevo. Probablemente va a ser algo tonto, pero probablemente no en la configuración ... gracias por su ayuda. – Josh

Respuesta

5

En realidad, creo que esto es un problema PEBCAK. Seguí ciegamente un ejemplo existente en un servicio diferente que tenemos, que es un rol de trabajador, y sucede generar un nuevo proceso de ejecución en el servidor como un truco para envolver un dll de terceros de 32 bits que necesitamos para algún procesamiento.

El nuevo código que agregué directamente intenta procesar algunos mensajes de una cola en uno de nuestros roles web. El proceso que se ejecuta se inicia directamente en el método Run() siguiendo el ciclo forever while, pero el proceso espera acceso a todo el web.config (ENT LIB y EF) para funcionar, y supongo que el código en el webrole no existe de la misma manera que la aplicación en la instancia de rol web.

Puedo abrir la configuración web del sitio siguiendo este example, pero supongo que tendré que hacer una función de trabajador por separado para este proceso. Es una pena, ya que fue un proceso pequeño, pero definitivamente kludgy.

¿Alguien puede confirmar que el código que se ejecuta en el webrole no debería tener acceso al web.config? Y al 'ejecutar', quiero decir que el proceso se inicia en Run(), pero físicamente existe como un servicio en la aplicación alojada. Supongo que esto equivaldría a esperar que los elementos de configuración de un ensamblaje satélite estén automágicamente presentes en la configuración del proceso de host.

Bah! Y si este es el caso, ¿funciona la corrección de este proceso como un rol del trabajador? No puedo encontrar nada para denegar explícitamente o confirmar mis expectativas ...

voy a echar un vistazo aquí también - de edad - pero se ve casi idéntico - y sugiere mi web.config debería estar trabajando:

http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/07e7dde7-0c0b-4497-8019-303a58759deb

ACTUALIZACIÓN --- Creé una función de trabajador y moví el código allí, y funcionó como se esperaba. Entonces todo lo que quería era definitivo, esto nunca funcionará desde un rol web, así que envié un correo electrónico a Steve Marx.

@stevemarx de comunicación personal - "Code in webrole.cs se ejecuta en un proceso diferente al de la aplicación web bajo IIS, y aunque ciertamente debería poder abrir web.config y leerlo (es solo un archivo) en el directorio actual), .NET no hará nada especial con web.config allí. (Sería como poner un archivo llamado web.config en el mismo directorio que una aplicación de consola que estaba ejecutando). "

Entonces, no, el código en el proceso webrole.cs no cargará mi web.config.

7

Normalmente, no puede acceder al web.config cuando la función está activada, ya que se está ejecutando en otro proceso.Las Configuración de rol en sus Propiedades de la función (haga clic con el papel y seleccione Propiedades, a continuación, seleccione la ficha Configuración) es donde usted debe tener la configuración de funciones, puede acceder a estos de su código de papel como éste:

RoleEnvironment.GetConfigurationSettingValue("MySetting") 

Si aún desea utilizar su web.config, podría poder hacerlo haciendo clic derecho en el archivo web.config y seleccionando Copiar si es nuevo, esto copiará web.config al System.Environment.CurrentDirectory, que es donde se ensamblan todas las demás funciones. laico. Luego puede cargarlo usando un lector de XML y analizarlo usted mismo, no creo que WebConfigurationManager lo ayude ya que espera una ruta virtual, así que sospecho que debería analizarlo usted mismo.

+0

No estoy seguro de por qué esto fue dado -1. Esta es la forma correcta de obtener una configuración de configuración durante WebRole.OnStart, ya que el archivo web.config aún no se ha cargado. – danludwig

Cuestiones relacionadas