2012-08-30 10 views
6

estoy poniendo en práctica el escenario papel web/trabajador combinada como se describe here donde sólo tiene que añadir lo siguiente a su rol de trabajo:combinado Azure papel tela y papel proyecto trabajador no ver app.config cuando se despliega

public override void Run() 
{ 
    // This is a sample worker implementation. Replace with your logic. 
    Trace.WriteLine("WorkerRole1 entry point called", "Information"); 
    while (true) 
    { 
     Thread.Sleep(10000); 
     Trace.WriteLine("Working", "Information"); 
    } 
} 

El problema, como se señala en los comentarios de la publicación, es que este proceso de trabajo no puede leer web.config, por lo que debe agregar un app.config. También se observa que app.config no se implementa automáticamente.

Así que mi pregunta es ¿cómo configuro mi proyecto para que se implemente app.config?

He añadido app.config a mi proyecto, defina la Acción de generación de "contenido", y "Copia siempre"

Esto funciona bien en el emulador, pero no cuando se despliega en Azure.

Nota: Observé en el emulador que se creó projectname.dll.config, pero no cuando se implementó en Azure. que estoy usando VS2010, de Windows Azure Tools 2011

Sé que algunos sugieren utilizando el archivo .cscfg lugar, pero muchos de mis componentes conseguir su configuración de web.config/app.config: ELMAH, transitoria el tratamiento de errores Cliente, Diagnóstico, Correo electrónico, etc. ...

Respuesta

3

Lea detenidamente this blog post. Explica en gran detalle lo que está sucediendo en el rol web de Windows Azure con Full IIS.

Lo que necesita hacer es agregar un archivo WaIISHost.exe.config (con copy to output = copy always). Y ponga todas las configuraciones que necesita en ese archivo. Esto se debe a que su código (RoleEntryPoint) vive en el proceso WaIISHost.exe y no en su proceso pdojectName.dll.

+0

Esto no se aplica a Azure SDK más reciente. –

+0

¿qué es exactamente lo que no se aplica al SDK más reciente? el archivo WaIISHost.exe.config, o el IIS completo? ¿También estás hablando de OsFamily 3 o 2, o ambos? ¡De cualquier forma, se aplica cuando se ha formulado la pregunta! No veo el sentido de tales comentarios ... – astaykov

+0

La cosa WaIISHost.exe.config ... Tenía que hacer lo que dijo la otra respuesta. Echaré un vistazo al proyecto OsFamily of my azul, esta podría ser la diferencia. El objetivo de tal comentario es simplemente informar a alguien leyendo la respuesta que si la solución no funciona, tal vez él/ella no hizo nada malo, y buscar otra solución ... No lo expresé bien ... lo siento. –

3

Para mí, con Azure SDK 1.8 y la implementación de mi función de trabajador web desde Visual Studio usando publish, tuve que incluir un archivo de configuración, llamado. ProjectName.Dll.config con mi configuración. La configuración de app.config no se recoge en la función web cuando se ejecuta en Windows Azure. Y el archivo app.config no se convierte en un ProjectName.Dll.config y se agrega automáticamente a la carpeta bin del paquete de implementación, por lo que debe crearlo a mano y configurarlo para que se copie siempre.

+0

No pierdas de vista: http://slowcheetah.uservoice.com/forums/185106-general/suggestions/3719285-transform-config-for-windows-azure-web-roles – lnaie

2

Estoy usando Azure SDK 2.0 y OS Family 3, y he estado muy confundido acerca de esto. Así que creé un sitio web MVC 4.0 con los 4 archivos de configuración sugeridos en varias respuestas. Es decir:

  • Web.config
  • App.config
  • WaIISHost.exe.config
  • [AssemblyName] .dll.config

Todos menos Web.config se establece en "Copiar si es más nuevo".

En las configuraciones del archivo que he escrito:

<appSettings> 
    <add key="AppSettingFile" value="[NameOfConfigFile]"/> 
    </appSettings> 

En el WebRole.cs Tengo el siguiente código:

public class WebRole : RoleEntryPoint 
    { 
     public override void Run() 
     { 
      string appSetting = ConfigurationManager.AppSettings["AppSettingFile"] ?? "No config file found"; 
      Trace.TraceInformation("Config file: " + appSetting); 

      while (true) 
      { 
       ... 
      } 
     } 
    } 

Resultado cuando se despliega con los archivos .config 4: "fichero de configuración: App.config". Entonces App.config debe ser la respuesta, ¿verdad?

¡Mal! Resultado cuando se implementa con solo Web.config y App.config: "Archivo de configuración: no se encontró ningún archivo de configuración". Hmm extraño.

Resultado cuando se instala con Web.config, App.config y [AssemblyName] .dll.config: "fichero de configuración: [AssemblyName] .dll.config". Entonces, [AssemblyName] .dll.config debe ser la respuesta, ¿verdad?

¡Mal! Resultado cuando se implementa con solo Web.config y [AssemblyName] .dll.config: "Archivo de configuración: no se encontró ningún archivo de configuración". ¡WTF!

Resultado cuando se despliega, con sólo Web.config y WaIISHost.exe.config: "El archivo de configuración: No se encontró el archivo de configuración".

Resultado cuando se instala con Web.config, App.config y WaIISHost.exe.config: "El archivo de configuración: No se encontró el archivo de configuración". ¡WTF!

Así que mi conclusión es que necesita tener 3 o 4 archivos de configuración para poder configurar el rol de Trabajador de un proyecto Web.

Esto es claramente un error. Personalmente, creo que la intención de MS era cambiar de WaIISHost.exe.config a App.config (para alinear con Worker Roles y .NET en general). Pero App.config solo se usa cuando existen los 4 archivos .config.

Así que por ahora estoy teniendo Web.config y ambos App.config y [AssemblyName] .dll.config, y contienen exactamente el mismo.

Afortunadamente, con Azure SDK 2.x solo podemos utilizar App.config y Web.config.

+0

Como alguien confirmó esto? Parece muy extraño. ¿Has intentado hacer el mismo experimento en 2.2 OsFamily 4? –

+0

No encontré una solución mejor tampoco. ¿Alguna noticia sobre esto? – Piedone

+0

Intenté esto y funciona usando Azure SDK 2.2 y OS Family 4. – Ahmad

Cuestiones relacionadas