【问题标题】:Azure WebJob Loses Connection StringsAzure WebJob 丢失连接字符串
【发布时间】:2018-04-22 12:29:17
【问题描述】:

我在 Azure 中有一个 Web 作业,代码如下:

    public static void ProcessQueueMessage([QueueTrigger("ticketprocessorqueue")] string message, TextWriter log)
    {
        foreach (var c in ConfigurationManager.ConnectionStrings)
        {
            log.WriteLine(c.ToString());
        }
    }

在我发布网络作业并触发它之后,我立即得到以下输出:

DefaultEndpointsProtocol=https;AccountName=****;AccountKey=****

DefaultEndpointsProtocol=https;AccountName=****;AccountKey=****

Server=tcp:northtech.database.windows.net,1433;Database=****;User
ID=****;Password=*****;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

这就是我所期望的。但是,当我在 30 分钟后触发同一个网络作业时,我得到了这个:

""

绝对没有。我的连接字符串怎么了?

这是我的应用程序配置(用于网络作业)以及网络配置(用于父网络应用程序)中的内容的 sn-p:

  <connectionStrings>
    <add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=****;AccountKey=****" />
    <add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=****;AccountKey=****" />
    <add name="RingCloneDatabase" connectionString="Server=tcp:northtech.database.windows.net,1433;Database=****;User ID=****;Password=****;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" />
  </connectionStrings>

我的连接字符串发生了什么事?

【问题讨论】:

  • 尝试以下几件事:1) 尝试 CloudConfigurationManager 2) 尝试重新启动您的应用服务。抱歉,这并没有真正深入到问题的核心,但我已经看到有趣的事情发生了几次,这就是解决方案。不过,我实际上并不了解问题本身。
  • 嗯,就是这样。如果我重新启动应用程序服务,它会再次正常工作,但仅限于有限的时间。一段时间后,连接字符串又消失了。
  • 好的,那么我的理论就到这里了。我看到奇怪行为的场景是在部署 webjob 然后更改 appsetting/connstr 时——它们不同步(有时)直到重新启动。根据你的描述,情况不同。抱歉,我帮不上忙——这听起来确实很奇怪。
  • 您是否尝试在 Webapp 应用设置中添加连接字符串并设置 Webapp 始终开启
  • 感谢 Tom 的建议,但 始终开启 已开启。并且设置在父 Web 应用程序的 Web 配置文件中(以及 Web 作业的应用程序配置文件)

标签: c# azure web-config connection-string app-config


【解决方案1】:

经过大量挖掘,我(部分)找到了导致连接字符串在我的网络作业中“消失”的原因。我说“部分”是因为我找到了修复它的方法,但是我为“修复”它而执行的操作没有任何意义。如果有人可以对此有所了解,请随时加入。

归结为:我最近在我的 azure 应用服务中创建了一个额外的“部署槽”。我们在最终部署(暂存环境)之前使用这个额外的部署槽来测试应用程序。当我添加该部署槽时,问题似乎开始了。当我完全删除该部署槽时,问题就消失了。就是这样了。这就是我所知道的。

但这给我带来了更多的问题。以下是一些需要考虑的想法和问题:

  1. 我的父应用服务和我的附加部署槽中的连接字符串和应用设置完全相同。
  2. 在流​​量路由中,我有 100% 的流量流向我的主(父)应用服务,0% 的流量流向暂存部署槽(我们直接点击暂存 URL 进行所有暂存测试)。
  3. 这似乎表明我的父应用服务中的 Web 作业与我的部署槽中的 Web 作业之间的连接字符串和/或应用设置存在某种冲突。
  4. 如果是这种情况,当父应用中有一个 Web 作业“实例”并且部署槽中有相同的一个时,Azure 如何确定要使用哪个 Web 作业“实例”?
  5. 即使我的父应用服务和我的部署槽之间存在冲突,为什么它只是空白?它不会从那个“实例”中获取连接字符串吗?
  6. 最后,当同一作业位于父应用程序中时,Azure 如何处理部署槽中的 Web 作业?我的意思是,两个作业都使用相同的队列名称。将消息添加到队列时,它们是否都会被触发?

我似乎找不到任何部署槽与网络作业的关系。我了解如何将您的一些网络流量路由到一个或另一个部署槽。但没有关于网络工作。任何人都可以对此有所了解吗?有没有人经历过这样的症状?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多