注释
Microsoft支持工程师可以帮助诊断您的应用程序问题。 如果在完成本文后无法诊断问题,可以通过在 Azure 门户上转到持久任务计划程序资源的 “帮助>支持 + 故障排除 ”部分来提交支持票证。
检查连接字符串和对持久任务计划程序的访问权限
当应用未按预期运行时,首先检查是否有:
- 正确的连接字符串格式。
- 身份验证设置正确。
本地开发
检查应采用以下格式的连接字符串:
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."
}
}
无法确定要生成的项目
如果在启动 Azurite 后遇到以下错误: “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”
- 删除应用中的 bin 和 obj 目录。
- 请尝试再次运行
func start
。
找不到适用于 ARM 的本地二进制文件
如果你看到与找不到 ARM 的本机二进制文件相关的 gRPC 错误(例如在 Mx Mac 上),可能需要将以下解决方法添加到 extensions.csproj
文件的末尾。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<WarningsAsErrors></WarningsAsErrors>
<DefaultItemExcludes>**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.13.7" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask.AzureManaged" Version="0.3.0-alpha" />
<PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.1.3" />
</ItemGroup>
<!-- Add the below groups/targets to workaround gRPC issues on ARM 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>
</Project>
遇到 gRPC 运行时问题
对于使用 Mx Mac(ARM64)的用户来说,您可能会遇到与持久函数相关的 gRPC 运行时问题。 解决方法:
请参考
2.41.0
版本的Contrib.Grpc.Core.M1
NuGet 包。添加一个自定义生成后目标,确保可以找到正确的 gRPC 库 ARM64 版本。
<Project> <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> </Project>