我有一个 azure 云服务项目,其中包括一个工作角色和一个 Web 角色。我需要同时进行临时部署和实时部署,但我需要它们具有不同的连接字符串,因为辅助角色会生成大量由 Web 应用程序报告的数据,并且我不希望在生产中使用测试数据。
配置它的最佳方法是什么,以便我可以快速交换或从登台升级到实时,并且只需更新连接字符串,而无需使用不同的配置从 Visual Studio 重新发布。
我有一个 azure 云服务项目,其中包括一个工作角色和一个 Web 角色。我需要同时进行临时部署和实时部署,但我需要它们具有不同的连接字符串,因为辅助角色会生成大量由 Web 应用程序报告的数据,并且我不希望在生产中使用测试数据。
配置它的最佳方法是什么,以便我可以快速交换或从登台升级到实时,并且只需更新连接字符串,而无需使用不同的配置从 Visual Studio 重新发布。
您可以编写调用 Azure 管理 REST API 并更改连接字符串的 PowerShell 脚本。
$restEndpoint = "https://management.core.windows.net/$subscriptionId/services/webspaces/$webspace/sites/$website/slotConfigNames"
$appSettings = $appSettingNames -replace ",", "','"
$connectionStrings = $connectionStringNames -replace ",", ""","""
$payload = "{""AppSettingNames"": [""$appSettingNames""], ""ConnectionStringNames"": [""$connectionStrings""]}"
Invoke-WebRequest -Uri $restEndpoint -Body $payload -CertificateThumbprint $certThumbprint -ContentType "application/json" -Headers @{ "x-ms-version" = "2014-04-01" } -Method POST
让我理解你的拳头。您有两个 DB(测试和实时)和两个环境(暂存和生产 CS)。
如果我是正确的,请阅读以下内容。
您应该在 web.config 中有两组连接字符串(StagingConStr 和 ProductionCONStr)。根据主机(livesite.cloudapp.net 或 stagingsite.cloudapp.net),您可以检测到这是在直播中还是在登台中。根据检测,您可以使用不同的连接字符串。
希望这可以帮助...
据我所知,没有用于此的自动化工具。当您交换时,您的配置也会交换。据我了解,您不想交换配置,而只是交换应用程序。
您可能需要构建自己的交换工具,该工具将连接到管理 API 并以您想要的方式进行交换。
正如其他人所指出的,这是当前一代 Azure 云服务(Web 角色/工作角色)中存在的 VIP 交换/插槽交换概念的已知限制。
另一种解决方法是使用 OnRoleStart 事件处理程序并编写一些自定义代码来检查正在使用的插槽并更新正在运行的配置。
我看到解决此类问题的方法也是将尽可能多的配置从本地配置中移出,然后移入远程数据库,然后将其用作配置源。考虑到 web.config 配置部分在某些情况下的工作方式,这并不总是可行的。