Пользовательские / вложенные параметры XML в ServiceConfiguration.cscfg - PullRequest
6 голосов
/ 03 ноября 2010

Мы пытаемся реализовать динамически настраиваемую регистрацию в нашем приложении Azure, и мы используем для этого корпоративные библиотеки, что прекрасно работает, однако xml, необходимый для этого, является более сложным, чем простая настройка стиля appSetting. который файл ServiceConfiguration.cscfg, кажется, принимает, потому что он требует вложенных узлов XML,

, например

<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>

, который разрешается с помощью (простите форматирование в этом окне, пожалуйста):

<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>

Я не вижу способа обмануть файлы ServiceDefinition или ServiceConfiguration, чтобы принять это, хотя, если бы я мог, я могу найти способ заставить корпоративные библиотеки использовать файл ServiceConfiguration, что я могу сделать в app.config.

Почему мы пытаемся решить эту проблему, так это дать нам возможность динамически корректировать настройки ведения журнала, т. Е. Перейти от Без ведения журнала к подробному, без необходимости повторного развертывания, что отнимает много времени и нецелесообразно в нашем живом приложении, только недавно появившаяся в живых, поэтому может иметь странную ошибку; -)

Любые мысли будут приняты с благодарностью С уважением Киндо Малайский

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

Другие параметры:

  • Кодировка Base64 для произвольных конфигов и установка их в значение cscfg
  • (мой любимый) Просто сохраните дополнительные конфиги в хранилище больших двоичных объектов или в базе данных (делаетжизнь проще для управления развертыванием)
1 голос
/ 03 ноября 2010

На данный момент файлы ServiceConfiguration ограничены базовой структурой <Setting name="foo" value="bar" />.

Но это просто строковое значение.Что мне нужно, когда нужно что-то более выразительное, так это поместить XML в виде строки в значение параметра, а затем десериализовать его в XML, когда я его прочитаю.Это делает конфигурационный файл довольно уродливым, когда вы редактируете его напрямую, потому что он кодирует весь XML в ваших настройках, но он работает.

Если мы просто посмотрим на ваш раздел слушателей, чтобы сохранитьпример маленький:

<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>

Это можно поместить в файл ServiceConfiguration в виде:

<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;" />

Самый простой способ сделать это - взять исходный XML, заменить все вкладки и кареткивозвращает и обновляет параметр в разделе настроек свойств облачного проекта.

Изменение этого параметра после развертывания не совсем просто, но выполнимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...