Resolução de erros no Durable Task Scheduler

Este artigo ajuda-o a resolver cenários comuns nas aplicações Durable Task Scheduler. Encontre o seu cenário na lista seguinte e siga os passos ligados para diagnosticar e resolver o problema.

Cenários comuns

Observação

Os engenheiros de suporte da Microsoft estão disponíveis para ajudar a diagnosticar problemas com seu aplicativo. Se não conseguir diagnosticar o seu problema depois de ler este artigo, pode abrir um pedido de suporte indo à secção Help>Support + troubleshooting do recurso Durable Task Scheduler no portal Azure.

Verifique a string de conexão e o acesso ao Durable Task Scheduler

Quando a sua aplicação não estiver a correr como esperado, verifique o seguinte:

  • O formato da cadeia de ligação está correto.
  • A autenticação está corretamente configurada.

Desenvolvimento local

  1. Verifique a cadeia de conexão, que deve ter este formato: Endpoint=http://localhost:<port number>;Authentication=None. Verifique se o número da porta é aquele mapeado no 8080contêiner que executa o emulador do agendador de tarefas durável.

  2. Juntamente com o durável emulador de agendamento de tarefas, certifique-se de que o emulador de Armazenamento do Azure, Azurite, está iniciado. O Azurite é necessário para componentes da aplicação relacionados com Funções.

Em execução no Azure

  1. Verifique seu aplicativo para as variáveis DURABLE_TASK_SCHEDULER_CONNECTION_STRING de ambiente e TASKHUB_NAME.

  2. Verifique o valor de DURABLE_TASK_SCHEDULER_CONNECTION_STRING. Especificamente, verifique se o endpoint do agendador e o tipo de autenticação estão corretos. A cadeia de conexão deve ser formatada da seguinte forma ao ser utilizada:

    • Identidade gerenciada atribuída pelo usuário: Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}, onde client id é o ID do cliente da identidade.
    • Identidade gerenciada atribuída ao sistema: Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. Verifique se a permissão de controle de acesso baseado em função (RBAC) necessária é concedida à identidade que precisa acessar o hub de tarefas ou o agendador especificado.

  4. Se a identidade gerenciada atribuída pelo usuário for usada, verifique se a identidade foi atribuída ao seu aplicativo.

Erro ao implementar a aplicação Durable Functions no Azure

Se sua implantação falhar com um erro, como Encountered an error (ServiceUnavailable) from host runtime do Visual Studio Code, primeiro verifique seu aplicativo para garantir que as variáveis de ambiente necessárias estejam definidas corretamente. Em seguida, reimplante seu aplicativo. Se vires um erro nas funções de carregamento, seleciona o botão Atualizar .

Erro desconhecido ao recuperar detalhes deste hub de tarefas

Se receberes um erro Unknown error retrieving details of this task hub no painel do agendador de tarefas durável, a razão pode ser:

  1. Sua identidade (e-mail) não tem a permissão necessária atribuída para esse hub de tarefas. Siga as instruções para conceder a permissão e, em seguida, acesse o painel novamente.

  2. Seu hub de tarefas foi excluído.

Não é possível excluir recurso

Antes de poderes eliminar um recurso de agendador, deves primeiro eliminar todos os seus centros de tarefas. Se não tiver, receberá a seguinte mensagem de erro:

{
  "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."
  }
}

Para resolver isto, liste os centros de tarefas no agendador e elimine-os:

# 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

Depois de todos os centros de tarefas serem eliminados, tente novamente eliminar o recurso do agendador.

Não é possível determinar o projeto a ser compilado

Se depois de iniciar o Azurite encontrar o erro: “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”:

  • Exclua os diretórios bin e obj em seu aplicativo.
  • Tente executar func start novamente.

Não consigo encontrar binários nativos para ARM (Apple silicon)

Se vir erros de gRPC relacionados com a falta de binários nativos para ARM (como num Mac Apple Silicon — M1, M2, etc.), adicione a seguinte solução alternativa ao seu extensions.csproj ficheiro:

  1. Adicione uma referência de pacote a Contrib.Grpc.Core.M1.
  2. Adicione um alvo personalizado de pós-construção que copie as bibliotecas nativas do ARM64 gRPC para o diretório de saída correto.

Adicione os seguintes elementos ItemGroup e Target ao seu 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>