【问题标题】:Connection Strings/Settings in Azure Portal - is it a xdt:Transform="SetAttributes", a xdt:Transform="Insert" or hybrid?Azure 门户中的连接字符串/设置 - 它是 xdt:Transform="SetAttributes"、xdt:Transform="Insert" 还是混合?
【发布时间】:2017-06-30 08:44:21
【问题描述】:

我最近遇到了一个站点问题,堆栈跟踪暗示连接字符串为空。这是在我将 connstr 从 web.config 移动到 azure 门户之后(即从 xml 文件中剪切节点,将其粘贴到门户中),因此 connstr 根本没有引用 web 配置

在视频博客中,Scott Hanselman 谈到了覆盖 web.config 的门户设置,但从来没有任何细节说明在部署的 web 配置中是否必须存在密钥才能应用 azure 门户值

这引发了我的疑问 - 如果 web.config 中根本没有设置(即没有 xml 节点说 <add key="blah" value="debugblah" />),门户中的设置是否有效?

【问题讨论】:

    标签: azure azure-web-app-service


    【解决方案1】:

    如果 web.config 中根本没有设置(即没有显示 <add key="blah" value="debugblah" /> 的 xml 节点),门户中的设置是否有效?

    简短的回答是肯定的。为了简单地测试它,您可以使用以下代码。

    public ActionResult Index()
    {
        string appSetting1 = ConfigurationManager.AppSettings["setting1"];
        string connectionString1 = ConfigurationManager.ConnectionStrings["connectionString1"]?.ConnectionString;
        return Content(string.Format("appSetting1:{0},connectionString1:{1}", appSetting1, connectionString1));
    }
    

    在 Azure 门户中添加参数后,我们可以从 ConfigurationManager 中获取应用设置和连接字符串。

    这是索引页面的结果。

    appSetting1:setting1Value,connectionString1:connectionString1Value
    

    当我们使用实体框架的连接字符串时有一个例外。 EF 的连接字符串将包含无法在 Azure 门户中设置的 providerName 属性。所以如果我们需要设置providerName的连接字符串,我们需要在配置文件中配置连接字符串。

    <add name="DataContext" connectionString="dummy" providerName="System.Data.EntityClient" />
    

    【讨论】:

    • 如果涉及两个站点和一个流量管理器,这个答案是否仍然成立?据我所知,这两个站点之间没有太大的关系,流量管理器只是一个交换设备,可能只参与配置,就共享域名/绑定主机头而言。 . 但是后来我变得不确定,因为我看到了这些非常奇怪的错误,其中 nHibernate 抱怨连接字符串为空,而它仅在门户中定义,而不是在 Web 配置中。如果我将它添加到 Web 配置中,它一切正常。下一个奇怪的事情是 Redis 缓存:它有一个..
    • ..connection 字符串参数指定使用哪个缓存 db#。在门户连接字符串中,我设置了 db 0,在 web 配置中,我最初没有设置连接字符串,并且它因空引用错误而崩溃(conn str 为空).. 所以我将它添加到 web 配置中,一切都开始工作,但数据被放入门户中指定的 db# 中,而不是 Web 配置中。因此是我的初始查询。我现在已经实现了一个像你推荐的页面,用来转储配置,我可以测试更多,谢谢!
    • 网络应用中的应用设置不受流量管理器的影响。如果你听从了我的建议,请告诉我测试结果。
    • 对于Redis缓存,请检查您是否在Azure门户中为连接字符串类型选择了“Redis缓存”。
    • 现在有件事了。曾几何时,“Redis 缓存”不是连接字符串的选项 - 在设置生产环境时返回。在设置 prod 暂存环境时,我最初选择了 Redis Cache 选项,但后来我将其更改为像 prod 一样的“自定义”。我已经离开这个项目几个星期了,但一旦我能回到它,我会给你一个更新..
    【解决方案2】:

    是 xdt:Transform=“SetAttributes”、xdt:Transform=“Insert”还是混合?

    这是一个混合体

    或者,可能

    门户先删除,然后插入

    这意味着:

    • 如果该设置仅在 portal.azure.com 中配置,那么您的应用将看到在 portal.azure.com 中设置的值
    • 如果该设置仅在 wwwroot 文件夹的 web.config 文件中配置,那么您的应用将看到 web.config 文件中设置的值
    • 如果在 portal.azure.com 和 web.config 文件中都配置了该设置,则应用将看到在 portal.azure.com 中设置的值

    因此,如果您将调试/开发配置上传到实时站点,如果门户设置包含实时设置详细信息,请不要担心 :)

    感谢 Amor 提供的验证方法

    【讨论】:

      【解决方案3】:

      是的,它会起作用的。

      该设置不必存在于web.config 文件中。如果它存在于 Web 应用的 Connection StringsApplication Settings(在门户中或通过 AzureRM 设置)中,那么它将对应用程序可见。

      【讨论】:

        猜你喜欢
        • 2014-08-02
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多