ConfigurationManager.AppSettings, ConfigurationManager.ConnectionStrings in Azure

与on-premise开发不同,当代码在Azure中托管运行时,会有一些意想不到的k-v对被添加到ConfigurationManager.AppSettings和ConfigurationManager.ConnectionStrings中。这时候如果代码中有遍历这两个集合的操作,就会发生难以预料的结果。

<appSettings>
    <add key="webpages:Version" value="3.0.0.0"/>
    <add key="webpages:Enabled" value="false"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    <add key="throwEx" value="1"/>
</appSettings>
<connectionStrings>
    <add
      name="Conn"
      connectionString="Data Source=13.*.*.*,1433;Initial Catalog=testDB;User ID=testDBUser;Password=******;"
      providerName="System.Data.SqlClient" />
</connectionStrings>

On-premise时,ConfigurationManager.AppSettings会包含5组k-v对,ConfigurationManager.ConnectionStrings则包含1组。当代码部署到Azure上时,返回的数目是不能确定的,例如WEBSITE_SITE_NAME、REMOTEDEBUGGINGVERSION等等。尤其需要说明的是,不同的代码访问不同的资源,多出来的k-v也是不一样的。。。具体原因不得而已,目的应该是用来传值。

Best Practice:

如果一定要轮询,可以把自己的key先加到一个列表里,只有在列表中的key才进入轮询。如果需要动态在portal或者web.config文件中增减,建议key命名符合统一规则,代码里用正则进行筛选。

猜你喜欢

转载自www.cnblogs.com/nicklooo/p/9265262.html