排查 Durable Task Scheduler 中的错误

本文可帮助您在 Durable Task Scheduler 应用中进行常见情况的故障排除。 在以下列表中查找你的方案,并按照链接的步骤诊断并解决问题。

常见场景

注意

Microsoft支持工程师可以帮助诊断您的应用程序问题。 如果在完成本文后无法诊断问题,可以通过转到 Azure 门户中 Durable Task Scheduler 资源的 Help>Support + 故障排除部分提交支持票证。

检查连接字符串并访问 Durable Task Scheduler

当应用未按预期运行时,请验证以下各项:

  • 连接字符串的格式正确。
  • 身份验证已正确设置。

地方发展

  1. 请检查连接字符串,其应采用以下格式:Endpoint=http://localhost:<port number>;Authentication=None。 确保端口号映射到8080上的

  2. 除了持久任务计划程序模拟器外,请确保 启动 Azure 存储模拟器 Azurite。 与 Functions 相关的应用组件需要 Azurite。

在 Azure 上运行

  1. 检查应用是否有环境变量 DURABLE_TASK_SCHEDULER_CONNECTION_STRINGTASKHUB_NAME

  2. 检查 DURABLE_TASK_SCHEDULER_CONNECTION_STRING 的值。 具体而言,请验证计划程序终结点和身份验证类型是否正确。 使用时,连接字符串的格式应如下:

    • 用户分配的托管标识Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id} 其中 client id 是该标识的客户端 ID。
    • 系统分配的托管标识Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. 对于需要访问指定任务中心或计划程序的标识,确保已将所需的基于角色的访问控制 (RBAC) 权限授予给标识

  4. 如果使用用户分配的托管标识,请确保 将标识分配给应用

将Durable Functions应用部署到Azure时出错

如果部署失败并出现来自Visual Studio Code的 Encountered an error (ServiceUnavailable) from host runtime 等错误,请先检查应用以确保正确设置所需的环境变量。 然后重新部署应用。 如果看到加载函数时出错,请选择“ 刷新 ”按钮。

无法检索此任务中心详细信息,发生未知错误

如果在持久任务计划程序仪表板上出现 Unknown error retrieving details of this task hub 错误,原因可能是:

  1. 你的标识(电子邮件)不具有为此任务中心分配的所需权限。 按照说明 授予权限,然后再次访问控制面板。

  2. 任务中心已删除。

无法删除资源

必须先删除其所有任务中心,然后才能删除计划程序资源。 如果没有收到,你会得到以下错误消息:

{
  "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”

  • 删除应用中的 binobj 目录。
  • 请尝试再次运行 func start

ARM(Apple silicon)平台找不到本地二进制文件

如果看到与找不到 ARM 的原生二进制文件相关的 gRPC 错误(例如在 Apple silicon Mac 上 — M1、M2 等),请将以下解决方法添加到 extensions.csproj 文件:

  1. 将包引用添加到 Contrib.Grpc.Core.M1
  2. 添加一个自定义构建后目标,将 ARM64 gRPC 本机库复制到正确的输出目录。

请将 ItemGroupTarget 元素添加到 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>