2010-11-03 5 views
6

Estamos intentando implementar algún registro configurable dinámicamente en nuestra aplicación Azure y estamos utilizando las bibliotecas empresariales para hacerlo, lo que funciona bien, sin embargo, el xml requerido para facilitar esto es más complejo que el simple ajuste de estilo 'appSetting' que el archivo ServiceConfiguration.cscfg parece aceptar en el sentido de que requiere nodos xml anidados,Configuraciones XML personalizadas/anidadas en ServiceConfiguration.cscfg

por ej.

<configSections> 
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
</configSections> 

que se resuelve por (valga el formato en esta ventana, por favor):

<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> 
    <listeners> 
     <add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      type="OurSolution.Common.AzureDiagnosticTraceListener, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
      name="AzureDiagnosticTraceListener" /> 
    </listeners> 
    <formatters> 
     <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
      name="Text Formatter" /> 
    </formatters> 
    <categorySources> 
     <add switchValue="All" name="General"> 
      <listeners> 
       <add name="AzureDiagnosticTraceListener" /> 
      </listeners> 
     </add> 
    </categorySources> 
</loggingConfiguration> 

no puedo ver una manera de engañar a los archivos ServiceDefinition o ServiceConfiguration a aceptar esto, aunque si pudiera Veo una forma de decirle a las bibliotecas empresariales que utilicen el archivo ServiceConfiguration, que puedo hacer en app.config.

Por qué estamos tratando de resolver esto es para permitirnos ajustar dinámicamente la configuración para el registro, es decir, cambiar de Sin registro a Verbose sin tener que volver a desplegar, lo que resulta lento y poco práctico en nuestra aplicación en vivo que ha pasado recientemente en vivo así que todavía puede tener el otro bug presente ;-)

Cualquier pensamiento sería el más agradecido recibió Saludos Kindo malayo

Respuesta

1

Otras opciones:

  • codificación Base64 para configuraciones arbitrarias y ponerlos en el valor de cscfg
  • (mi favorito) Basta con mantener configuraciones adicionales en el almacenamiento nota o sobre la base de datos (hace la vida más simple para la gestión de los despliegues)
+0

Me gusta la idea de poner configuraciones en almacenamiento de blobs, pero se pierde la capacidad incorporada de detectar cambios de configuración.Eso no quiere decir que no puedas llegar a algo para hacer eso. – knightpfhor

+0

Básicamente, solo puede cargar configuraciones desde BLOB solo en la puesta en marcha y tener un hilo lateral que duerme casi todo el tiempo. Una vez en unos minutos verificaría los cambios en BLOB y, si se detecta, simplemente solicite a la API de administración que reinicie el trabajador. –

+0

Fuimos de una manera diferente al final, pero muchas gracias por la información –

1

Por el momento los archivos ServiceConfiguration están restringidos a la estructura básica <Setting name="foo" value="bar" />.

Pero el valor es simplemente un valor de cadena. Lo que he hecho cuando necesitaba algo más expresivo es poner el XML como una cadena en el valor de la configuración y luego deserializarla en XML cuando la leí. Esto hace que el archivo de configuración se vea bastante desagradable cuando lo edita directamente porque codifica todo el XML en su configuración, pero funciona.

Si sólo miramos el la sección de los oyentes a seguir el ejemplo pequeño:

<listeners> 
    <add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    type="OurSolution.Common.AzureDiagnosticTraceListener, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
    name="AzureDiagnosticTraceListener" /> 
</listeners> 

Esto podría ser puesto en el archivo ServiceConfiguration mirando como:

<Setting name="Logging" value="&lt;listeners&gt;&lt;add listenerDataType=&quot;Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot; type=&quot;OurSolution.Common.AzureDiagnosticTraceListener, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&quot; name=&quot;AzureDiagnosticTraceListener&quot; /&gt;&lt;/listeners&gt;" /> 

La forma más sencilla de hacerlo es tomar su XML fuente, reemplazar todas las pestañas y retornos de carro, y actualizar la configuración a través de la sección de configuración de propiedades del proyecto en la nube.

Alterar esto una vez que se ha desplegado no es del todo sencillo, pero posible.

+0

Gracias a montones por esto, voy a intentarlo, ¿sabes si hay una limitación sobre cuánto tiempo puede durar esta "cuerda"? –

+0

No, no sé. Solo he usado ajustes que son mucho más pequeños que lo que estás viendo. – knightpfhor

Cuestiones relacionadas