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.
¿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? –
@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