...
<system.web>
...other nodes..
<sessionState timeout="10" mode="Custom" customProvider="PROVIDER_NAME">
<providers>
<add name="PROVIDER_NAME" type="PROVIDER_TYPE" throwOnError="true" retryTimeoutInMilliseconds="5000" databaseId="0" applicationName="AppNAME" connectionString="CONNECTION_STRING" />
</providers>
</sessionState>
..other nodes...
</system.web>
我在web.config文件中有上述条目。我喜欢使用powershell脚本更新上述节点中的连接字符串。更改应仅影响连接字符串,而不影响任何其他节点/属性。我的应用程序托管在azure中。我知道连接到azure应用程序并更新应用程序设置,如下所示。
$app = Set-AzureRMWebApp -Name $name -ResourceGroupName $group **-AppSettings $mysettingsCollection** -- this works fine
但我不确定更新xpath中的特定节点。如果可能,请提供一些示例脚本。类似的东西 - &gt;
$app = Set-AzureRMWebApp -Name $name -ResourceGroupName $group -**SYSTEM.WEB/SESSIONSATE VALUES**
答案 0 :(得分:0)
要在维护所有其他连接字符串的同时更新单个Azure Web Apps连接字符串,您需要使用Set-AzureRmWebApp cmdlet在保存调用中传入所有连接字符串的值。为此,您必须首先遍历整个现有连接字符串列表,并在Hash集合上添加或设置特定连接字符串值之前将它们添加到Hash集合中。
在Azure Web App上更新一个或多个连接字符串时,请确保没有删除任何现有连接字符串:
# Load Existing Web App settings
$webApp = Get-AzureRmWebAppSlot -ResourceGroupName "MyResourceGroup" -Name "MyWebApp" -Slot production
# Get reference to the existing Connection Strings
$existingConnectionStrings = $webApp.SiteConfig.ConnectionStrings
# Create Hash variable for Connection Strings
$hash = @{}
# Copy over all Existing Connection Strings to the Hash
ForEach($connString in $existingConnectionString) {
$hash[$connString.Name] = @{ Type = $connString.Type.ToString(); Value = $connString.ConnectionString }
}
# Add or Update a desired Connection String within the Hash collection
$hash["AppConnString"] = @{ Type = "SqlAzure"; Value = "conn-string-here" }
# Save Connection String to Azure Web App
Set-AzureRmWebAppSlot -ResourceGroupName "MyResourceGroup" -Name "MyWebApp" -Slot production -ConnectionStrings $hash
使用PowerShell cmdlet在Azure Web App上添加或更新连接字符串时,这是一个重要提示。如果您忘记了,如果现有连接字符串多于您要添加或更新的连接字符串,则可能会意外删除应用程序的所有其他连接字符串。不要破坏生产,请记住使用此提示!
有关详细信息,请参阅此博文:Easily Manage Azure Web App Connection Strings using PowerShell。
希望这有帮助。
答案 1 :(得分:0)
Powershell不会让你这样做。正确完成此操作的方法是通过XDT转换。 You can read more about using XDT transforms here
要理解的是,对于App Service应用程序,有一个配置对象是web.config的子集。所以应用程序设置,连接字符串和其他一些常见部分都是此配置对象的一部分。
通过这种方式,您可以添加“应用设置”,或使用您在应用配置中拥有的内容覆盖web.config中的项目。
特别是会话状态,这不是我们在app配置中的元素。所以这里的回落是web.config,因此需要进行XDT转换。
在他的情况下,XDT变换将类似于:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<sessionState timeout="10" mode="Custom" customProvider="PROVIDER_NAME">
<providers>
<add name="PROVIDER_NAME" type="PROVIDER_TYPE" throwOnError="true" retryTimeoutInMilliseconds="5000" databaseId="0" applicationName="AppNAME" connectionString="CONNECTION_STRING" />
</providers>
</sessionState>
</system.web>
</configuration>