你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
建议使用独立的 Durable Functions PowerShell SDK(AzureFunctions.PowerShell.Durable.SDK)来创建 PowerShell 的 Durable Functions 应用。 它将内置 SDK 替换为更快的重播逻辑(与 C# 独立 SDK 相同的引擎)、独立版本控制以及改进的异常处理、null 值处理和序列化。 内置 SDK 仍可用于 PowerShell 7.4 及更早版本,但在 PowerShell 辅助角色的未来主要版本中将被删除。
迁移清单
使用以下清单跟踪每个迁移步骤的进度:
| Step | Section |
|---|---|
| 1.验证先决条件 | Prerequisites |
| 2.启用独立 SDK | 启用独立 SDK |
| 3.安装 SDK 包 | 安装 SDK 包 |
| 4.导入 SDK | 导入 SDK |
| 5.运行应用 | 运行应用 |
| 6. 查看界面和行为更改 | 从内置 SDK 迁移 |
安装独立 SDK
按照以下步骤在现有应用中安装和启用独立 SDK。
验证先决条件
独立 PowerShell SDK 需要以下最低版本:
- Azure Functions 运行时 v4.16+
- Azure Functions Core Tools v4.0.5095+(如果在本地运行)
- 适用于 PowerShell 7.4 或更高版本的 Azure Functions PowerShell 应用
启用独立 SDK
需要以下应用程序设置才能运行独立的 PowerShell SDK:
- 名称:
ExternalDurablePowerShellSDK - 值:
"true"
此应用程序设置禁用 PowerShell 7.4 及更高版本的内置 Durable SDK,强制工作者使用外部 SDK。
如果使用 Azure Functions Core Tools 在本地运行,则应将此设置添加到 local.settings.json 文件中。 如果在 Azure 中运行,请使用所选工具执行以下步骤:
将 <FUNCTION_APP_NAME> 和 <RESOURCE_GROUP_NAME> 分别替换为函数应用名称和资源组名称。
az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings ExternalDurablePowerShellSDK="true"
安装 SDK 包
有两个选项可用于安装 SDK 包。 对于大多数应用建议使用 托管依赖项 ,但如果需要固定特定版本或您的部署不支持托管依赖项,请将 模块与应用内容捆绑在一起。 只需要一个选项。
选项 1:使用托管依赖项(建议)
若要将 SDK 安装为托管依赖项,请遵循 托管依赖项指南。
首先,确保host.json包含一个managedDependency部分,其中enabled的设置为true。
{
"version": "2.0",
"managedDependency": {
"enabled": true
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
然后为你的requirements.psd1文件中的SDK指定一个条目。
# This file enables modules to be automatically managed by the Functions service.
# See https://aka.ms/functionsmanageddependency for additional information.
#
@{
# For latest supported version, go to 'https://www.powershellgallery.com/packages/AzureFunctions.PowerShell.Durable.SDK/'.
'AzureFunctions.PowerShell.Durable.SDK' = '2.*'
}
选项 2:在应用内容中包含 SDK 模块
若要将 SDK 与应用捆绑在一起 ".\Modules" ,请将 SDK 包放在应用的根目录中。 有关详细信息,请参阅 在应用内容中包含模块。
从应用程序根目录创建目录并下载 SDK:
Save-Module -Name AzureFunctions.PowerShell.Durable.SDK -AllowPrerelease -Path ".\Modules"
导入 SDK
将以下行添加到 profile.ps1 文件,以在每次冷启动时导入 SDK:
Import-Module AzureFunctions.PowerShell.Durable.SDK -ErrorAction Stop
运行你的应用程序
启动应用程序,使用func host start。 独立 SDK 现已处于活动状态。
从内置 SDK 迁移
如果要从内置 SDK 迁移现有应用,请查看以下界面和行为更改。
新 cmdlet
| Cmdlet (命令行工具) | Description |
|---|---|
Invoke-DurableSubOrchestrator |
在编排器工作流中调用子编排器。 |
Suspend-DurableOrchestration |
暂停正在运行的编排实例。 |
Resume-DurableOrchestration |
恢复以前挂起的业务流程实例。 |
已修改的 CmdLet
| 更改 | 详细信息 |
|---|---|
Get-DurableTaskResult |
现在接受单个 Task 作为其参数而不是任务列表。 |
New-DurableRetryOptions → New-DurableRetryPolicy |
重 命名。 为旧名称提供了一个别名,以实现向后兼容。 |
行为变更
Wait-DurableTask 中的异常处理
使用 Wait-DurableTask(扇出/扇入模式)计划的活动引发的异常不再被无提示地忽略。 该 cmdlet 现在将异常传播到协调器,使您能够在代码中处理它。
内置 SDK — 异常被无提示地忽略:
# Exceptions from failed activities were lost
$tasks = @()
$tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item1" -NoWait
$tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item2" -NoWait
$results = Wait-DurableTask -Task $tasks
# No error even if an activity failed
独立 SDK — 异常传播到协调器:
try {
$tasks = @()
$tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item1" -NoWait
$tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item2" -NoWait
$results = Wait-DurableTask -Task $tasks
} catch {
# Handle the activity failure
Write-Host "An activity failed: $_"
}
Wait-DurableTask 结果中保留的空值
Null 值不再从 Wait-DurableTask (WhenAll) 调用的结果列表中删除。 没有 -Any 标志的成功调用现在将返回一个与计划任务数量相同大小的数组,其中包括返回 null 的活动的 $null 项。
内置 SDK — null 结果已删除:
# 3 tasks scheduled, but if one returned $null, results had only 2 items
$results = Wait-DurableTask -Task $tasks
$results.Count # Could be 2 instead of 3
独立 SDK — 保留空结果:
# 3 tasks scheduled, results always has 3 items
$results = Wait-DurableTask -Task $tasks
$results.Count # Always 3, with $null for activities that returned null
SDK 参考
有关完整的 cmdlet 参考,请参阅 AzureFunctions.PowerShell.Durable.SDK 模块。 导入模块后,还可以运行 Get-Help *-Durable* 以列出所有可用的 cmdlet,或 Get-Help <cmdlet-name> -Full 详细使用情况。
获取支持
报告 SDK GitHub 存储库中的 bug 和功能请求。