Umbraco、Azure 部署槽和连接字符串

Umbraco, Azure deployment slots and Connection Strings

我们正在尝试将 Azure 部署槽用于我们已构建的 Umbraco 站点。

默认情况下,Umbraco 使用 web.config 的 connectionStrings 部分中定义的 DSN,我们希望它使用它所在的部署槽的连接字符串。

我们的尝试

Azure 部署槽将所有定义的应用程序设置(和连接字符串)放入环境变量中,我们可以使用 Environment.GetEnvironmentVariable() 来访问它们,但似乎没有办法告诉 Umbraco 去做这个。

所以在 OnApplicationInitialized()(在 /App_Code/Core/UmbracoAppStart.cs 中)我们从 web.config 加载了连接字符串部分,从环境变量中获取了 connstr,将 DSN 添加到连接字符串部分并保存。 抓取并存储了正确的连接字符串,但这似乎会回收应用程序(由于 web.config 更改),因此我们只会超时。 (或者 Umbraco XML 缓存错误,或者加载页面需要 20 分钟)。

我知道您可以将 appsettings 和 connectionstrings 部分存储在单独的文件中。但是 file 属性(如果引用的文件发生更改,则不会导致回收)在 connectionStrings 部分不起作用 - 只有 configSource 属性,并且如果更改会回收。

(来自:ASP.NET web.config: configSource vs. file attributes

帮助

有没有人找到解决这个问题的方法? 我们只需要让 Umbraco 使用部署槽连接字符串 - 而不是 webconfig.

此刻我什至愿意盲目地复制和粘贴而不了解它是如何工作的——我讨厌那样做:)。但这就是当人们同意客户想要在圣诞节前上线时发生的事情...

您无需执行任何代码即可使用 Azure 连接字符串或应用程序设置。只需为它们提供与 web.config 相同的 keys/names,它们就会被使用。

因此,如果您的网络配置中有此内容:

<add name="umbracoDbDSN" connectionString="Server={server};Initial Catalog={db};Persist Security Info=False;User ID={user};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=300;" providerName="System.Data.SqlClient" />

您的插槽配置应该是这样的:

要替换应用程序设置,只需使用相同的键即可。所以为此:

<add key="umbracoUseSSL" value="false" />

你会用这个:

如果您希望设置特定于插槽,则必须激活 Slot setting 复选框。