我们正在尝试为我们已经构建的Umbraco网站利用Azures部署位置。
默认情况下,Umbraco使用web.config的 connectionStrings 部分中定义的DSN,我们希望它使用它所在的部署槽的连接字符串。
我们尝试了什么
Azure部署插槽将所有已定义的应用程序设置(和连接字符串)放入环境变量并访问它们,我们可以使用Environment.GetEnvironmentVariable()
,但它似乎不是告诉Umbraco做的一种方式此
因此,在OnApplicationInitialized()中(在/App_Code/Core/UmbracoAppStart.cs中),我们从web.config加载了connectionstring部分,从env vars中获取了connstr,将DSN添加到connectionstring部分并保存。 抓取并存储正确的连接字符串,但这似乎是回收应用程序(由于web.config更改),因此我们只是获得超时。 (或者Umbraco XML缓存错误,或者加载页面需要20分钟)。
我知道您可以将appsettings和connectionstrings部分存储在单独的文件中。但是文件属性(如果引用的文件被更改,则不会导致回收)并不适用于connectionStrings部分 - 只有 configSource 属性并且如果改变则会回收。
(来自:ASP.NET web.config: configSource vs. file attributes)
帮助
有没有人找到解决方法? 我们只需要让Umbraco使用部署槽连接字符串 - 而不是webconfig中的那个。
我甚至愿意盲目地复制和粘贴,而不理解它是如何工作的 - 我讨厌这样做:)。但是当人们在圣诞节前就想要上线的时候会发生什么事呢......
答案 0 :(得分:1)
您无需使用任何代码即可使用Azure连接字符串或应用程序设置。只需给它们与web.config上的密钥/名称相同,就可以使用它们。
所以如果你的网络配置上有这个:
<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
复选框。