.net ServiceConfiguration.cscfg中的自定义/嵌套XML设置

.net ServiceConfiguration.cscfg中的自定义/嵌套XML设置,.net,logging,azure,enterprise-library,.net,Logging,Azure,Enterprise Library,我们正在尝试在Azure应用程序中实现一些动态可配置的登录,我们正在使用企业库来实现这一点,这很好,但是,实现这一点所需的xml比ServiceConfiguration.cscfg文件似乎接受的简单“appSetting”样式设置更复杂,因为它需要嵌套的xml节点 e、 g 解决方法是(请原谅此窗口中的格式): 我看不出有什么办法可以愚弄ServiceDefinition或ServiceConfiguration文件来接受这一点,尽管如果可以,我可以找到一种方法告诉企业库使用我可以在a

我们正在尝试在Azure应用程序中实现一些动态可配置的登录,我们正在使用企业库来实现这一点,这很好,但是,实现这一点所需的xml比ServiceConfiguration.cscfg文件似乎接受的简单“appSetting”样式设置更复杂,因为它需要嵌套的xml节点

e、 g


解决方法是(请原谅此窗口中的格式):


我看不出有什么办法可以愚弄ServiceDefinition或ServiceConfiguration文件来接受这一点,尽管如果可以,我可以找到一种方法告诉企业库使用我可以在app.config中执行的ServiceConfiguration文件

我们之所以试图解决这个问题,是为了让我们能够动态调整日志记录的设置,即从无日志记录更改为详细记录,而无需重新部署,这在我们的实时应用程序中非常耗时且不切实际,因为该应用程序最近才上线,所以可能仍然存在奇怪的错误;-)

如果您有任何想法,我们将不胜感激 当做
Kindo Malay

目前,服务配置文件仅限于基本的
结构

但该值只是一个字符串值。当需要更具表现力的内容时,我所做的是将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,替换所有选项卡和回车符,并通过“云项目属性设置”部分更新设置

一旦部署完成,对其进行更改并不完全是直截了当的,但却是可行的。

其他选项:

  • 对任意配置进行Base64编码,并将其放入cscfg的值中
  • (我最喜欢的)只需在blob存储或数据库中保留额外的配置(使管理部署的工作更简单)

非常感谢,我会尝试一下,你知道这个“字符串”的长度是否有限制吗?不,我不知道。我只使用了比您看到的小得多的设置。我喜欢将设置放在blob存储中的想法,但您失去了检测配置更改的内置功能。这并不是说你不能自己想出一些方法来做,基本上你只能在启动时从BLOB加载设置,并且有一个几乎一直处于休眠状态的侧线程。几分钟后,它会检查BLOB中的更改,如果检测到,只需请求管理API重新启动worker即可。最后我们采用了不同的方法,但非常感谢您提供的信息
<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>
<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;" />