Microsoft Web Deploy备份失败且无法恢复如何解决?
问题描述
我最近开始使用Microsoft Web Deploy,基础配置下备份功能可以正常运行,现在我参考社区回答的评论内容,尝试在项目的.pubxml文件中添加文件夹排除规则。
我的部署配置如下:
cd "\Program Files\IIS\Microsoft Web Deploy V3\scripts\" . .\BackupScripts.ps1 Reset-BackupSettings TurnOn-Backups -On $true Configure-Backups -Enabled $true Configure-Backups -ContinueSyncOnBackupFailure $false Configure-Backups -NumberOfBackups 5 Configure-Backups -BackupPath "D:\UAT\AppBackups\{siteName}_snapshots" Configure-BackupSettingsProvider -CanAddExcludedProviders $true Get-BackupSettings
以上配置运行正常,直到我向发布配置文件中粘贴如下代码片段:
<Target Name="AddCustomSkipRules"> <ItemGroup> <MsDeploySkipRules Include="SkipAppDataFolder"> <SkipAction></SkipAction> <ObjectName>dirPath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\\App_Data$</AbsolutePath> <Apply>Destination</Apply> <XPath></XPath> </MsDeploySkipRules> </ItemGroup> </Target>
添加该代码后发布尝试失败,且功能陷入卡顿状态,后续我删除该片段重新发布仍然报错,追踪到的错误信息如下:
<trace eventLevel="Error" message="BACKUP_FAILED - Skipping backup because it failed due to an unknown reason. For more information, contact your server administrator."
AspNetModuleDiagErrorEvent Uri /msdeploy.axd User: username Client IP: 10.148.69.225 Content-Type: application/msdeploy Version: 9.0.0.0 MSDeploy.VersionMin: 7.1.600.0 MSDeploy.VersionMax: 9.0.3802.0 MSDeploy.Method: Sync MSDeploy.RequestId: fa27c81c-12aa-47f3-ac37-7ea94caa14a4 MSDeploy.RequestCulture: en-US MSDeploy.RequestUICulture: en-US ServerVersion: 9.0.1973.0 Skip: objectName="^configProtectedData$" Provider: auto, Path: A tracing deployment agent exception occurred that was propagated to the client. Request ID 'fa27c81c-12aa-47f3-ac37-7ea94caa14a4'. Request Timestamp: '11/10/2021 5:08:45 PM'. Error Details: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list. at Microsoft.Web.Deployment.BackupManager.HandleExceptionForBackupFailure(DeploymentBaseContext baseContext, BackupSettings settings, Exception ex, Boolean suppressLogging) at Microsoft.Web.Deployment.BackupRuleHandler.PreSync(DeploymentSyncContext syncContext) at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject) at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable, Nullable``1 syncPassId, String syncSessionId) at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentAsyncData asyncData, Nullable`1 passId, String user, String siteName) at Microsoft.Web.Deployment.DeploymentAgent.HandleRequestWorker(DeploymentAgentAsyncData asyncData) at Microsoft.Web.Deployment.DeploymentAgent.HandleRequest(DeploymentAgentAsyncData asyncData)
我已经尝试重启IIS和Web Deploy服务,均没有效果,且我不希望重启整台服务器,请问如何才能让备份服务恢复正常?
解决方案
该报错是Microsoft Web Deploy备份模块的已知缺陷:当服务端开启CanAddExcludedProviders配置后,客户端传入的空SkipAction/XPath字段会触发备份模块的字符串格式化参数不匹配错误,即便你后续删除了pubxml中的规则,服务端缓存的异常配置仍然会生效,无需重启服务器,按以下步骤操作即可恢复:
- 以管理员身份打开服务器端的PowerShell,进入Web Deploy脚本目录:
cd "\Program Files\IIS\Microsoft Web Deploy V3\scripts\" . .\BackupScripts.ps1
- 彻底重置备份配置,根据你的配置范围二选一执行:
# 如果是全局备份配置,执行这行 Reset-BackupSettings -Global # 如果是针对单个站点的配置,替换为你的站点名称后执行这行 Reset-BackupSettings -SiteName "你的站点名称"
- 重新配置正常的备份参数,不需要自定义排除规则的话建议关闭
CanAddExcludedProviders避免再次触发该bug:
TurnOn-Backups -On $true Configure-Backups -Enabled $true Configure-Backups -ContinueSyncOnBackupFailure $false Configure-Backups -NumberOfBackups 5 Configure-Backups -BackupPath "D:\UAT\AppBackups\{siteName}_snapshots" # 无需自定义排除规则就删除下面这行,或者将值改为$false Configure-BackupSettingsProvider -CanAddExcludedProviders $false
- 验证配置生效:
Get-BackupSettings
- (可选)删除站点根目录下
App_Data\MSDeploy文件夹内的所有缓存文件。
操作完成后重新发布即可恢复备份功能。如果确实需要配置文件夹排除规则,建议在服务端直接配置全局跳过规则,不要通过客户端pubxml文件传入规则。
内容的提问来源于stack exchange,提问作者Wildcat Matt
相关产品推荐
相关产品推荐

