本文可帮助您在 Durable Task Scheduler 应用中进行常见情况的故障排除。 在以下列表中查找你的方案,并按照链接的步骤诊断并解决问题。
常见场景
- 检查连接字符串和访问Durable Task Scheduler
- 将 Durable Functions 应用程序部署到 Azure 时出现错误
- 未知错误在检索此任务中心详细信息时
- 无法删除资源
- 无法确定要生成的项目
- 找不到用于 Apple silicon 的 ARM 本机二进制文件
注意
Microsoft支持工程师可以帮助诊断您的应用程序问题。 如果在完成本文后无法诊断问题,可以通过转到 Azure 门户中 Durable Task Scheduler 资源的 Help>Support + 故障排除部分提交支持票证。
检查连接字符串并访问 Durable Task Scheduler
当应用未按预期运行时,请验证以下各项:
- 连接字符串的格式正确。
- 身份验证已正确设置。
地方发展
请检查连接字符串,其应采用以下格式:
Endpoint=http://localhost:<port number>;Authentication=None。 确保端口号映射到8080上的 。除了持久任务计划程序模拟器外,请确保 启动 Azure 存储模拟器 Azurite。 与 Functions 相关的应用组件需要 Azurite。
在 Azure 上运行
检查应用是否有环境变量
DURABLE_TASK_SCHEDULER_CONNECTION_STRING和TASKHUB_NAME。检查
DURABLE_TASK_SCHEDULER_CONNECTION_STRING的值。 具体而言,请验证计划程序终结点和身份验证类型是否正确。 使用时,连接字符串的格式应如下:-
用户分配的托管标识:
Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}其中client id是该标识的客户端 ID。 -
系统分配的托管标识:
Endpoint={scheduler endpoint};Authentication=ManagedIdentity
-
用户分配的托管标识:
对于需要访问指定任务中心或计划程序的标识,确保已将所需的基于角色的访问控制 (RBAC) 权限授予给标识。
- 访问仪表板时,请确保已将权限分配给你自己的标识(电子邮件)。
如果使用用户分配的托管标识,请确保 将标识分配给应用。
将Durable Functions应用部署到Azure时出错
如果部署失败并出现来自Visual Studio Code的 Encountered an error (ServiceUnavailable) from host runtime 等错误,请先检查应用以确保正确设置所需的环境变量。 然后重新部署应用。 如果看到加载函数时出错,请选择“ 刷新 ”按钮。
无法检索此任务中心详细信息,发生未知错误
如果在持久任务计划程序仪表板上出现 Unknown error retrieving details of this task hub 错误,原因可能是:
你的标识(电子邮件)不具有为此任务中心分配的所需权限。 按照说明 授予权限,然后再次访问控制面板。
任务中心已删除。
无法删除资源
必须先删除其所有任务中心,然后才能删除计划程序资源。 如果没有收到,你会得到以下错误消息:
{
"error": {
"code": "CannotDeleteResource",
"message": "Cannot delete resource while nested resources exist. Some existing nested resource IDs include: 'Microsoft.DurableTask/schedulers/YOUR_SCHEDULER/taskhubs/YOUR_TASKHUB'. Please delete all nested resources before deleting this resource."
}
}
若要解决此问题,请在计划程序中列出任务中心并删除它们:
# List all task hubs in the scheduler
az durabletask taskhub list --resource-group RESOURCE_GROUP_NAME --scheduler-name SCHEDULER_NAME
# Delete each task hub
az durabletask taskhub delete --resource-group RESOURCE_GROUP_NAME --scheduler-name SCHEDULER_NAME --name TASKHUB_NAME
删除所有任务集线器后,请重试删除该计划程序资源。
无法确定要生成的项目
如果在启动 Azurite 后遇到以下错误: “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”
- 删除应用中的 bin 和 obj 目录。
- 请尝试再次运行
func start。
ARM(Apple silicon)平台找不到本地二进制文件
如果看到与找不到 ARM 的原生二进制文件相关的 gRPC 错误(例如在 Apple silicon Mac 上 — M1、M2 等),请将以下解决方法添加到 extensions.csproj 文件:
- 将包引用添加到
Contrib.Grpc.Core.M1。 - 添加一个自定义构建后目标,将 ARM64 gRPC 本机库复制到正确的输出目录。
请将 ItemGroup 和 Target 元素添加到 extensions.csproj中:
<!-- Workaround for gRPC issues on ARM (Apple silicon) devices -->
<ItemGroup>
<PackageReference Include="Contrib.Grpc.Core.M1" Version="2.41.0" />
</ItemGroup>
<Target Name="CopyGrpcNativeAssetsToOutDir" AfterTargets="Build">
<ItemGroup>
<NativeAssetToCopy Condition="$([MSBuild]::IsOSPlatform('OSX'))" Include="$(OutDir)runtimes/osx-arm64/native/*"/>
</ItemGroup>
<Copy SourceFiles="@(NativeAssetToCopy)" DestinationFolder="$(OutDir).azurefunctions/runtimes/osx-arm64/native"/>
</Target>
相关内容
- 为 Durable Task Scheduler 配置托管标识
- 使用 Durable Task Scheduler 仪表板调试和管理业务流程
- 快速入门:将 Durable Functions 应用程序配置为使用持久任务调度器