我有一个azure云服务项目,它包含一个辅助角色和一个Web角色。我需要同时进行暂存和实时部署,但我需要它们具有不同的连接字符串,因为工作者角色会生成大量数据,这些数据由Web应用程序报告,我不希望生产中包含测试数据。
配置此功能的最佳方式是什么,以便我可以快速交换或升级从分段到实时,并且只需更新连接字符串,而无需使用不同的配置从visual studio重新发布。
答案 0 :(得分:1)
您可以编写一个PowerShell脚本来调用Azure Management REST API并更改连接字符串。
$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
答案 1 :(得分:0)
据我所知,没有自动化工具。交换时,您的配置也会交换。根据我的理解,你不想交换配置而只是交换应用程序。
您可能需要构建自己的交换工具,该工具将以您希望的方式连接到管理API和交换。
答案 2 :(得分:0)
正如其他人所知,这是当前一代Azure云服务(Web角色/工作者角色)中存在的VIP交换/插槽交换概念的已知限制。
另一种解决方法是,您可以使用OnRoleStart事件处理程序并编写一些正在使用的custom code to inspect slot并更新正在运行的配置。
我已经看到解决此类问题的方法也是将尽可能多的配置从本地配置移到远程数据库中,然后将其用作配置源。考虑到web.config配置部分在某些情况下的工作方式,这并不总是可行的。
答案 3 :(得分:0)
让我理解你的拳头。 您有两个DB(测试和实时)和两个环境(分段和生产CS)。
如果我是对的,请阅读以下内容。
你应该两个在web.config(StagingConStr和ProductionCOnStr)中有两组连接字符串。 基于主机(livesite.cloudapp.net或stagingsite.cloudapp.net),您可以检测到它处于实时或暂存状态。根据检测,您可以使用不同的连接字符串。
希望这会有所帮助......