Solucionar erros no Agendador de Tarefas Duráveis

Este artigo ajuda você a solucionar problemas de cenários comuns em aplicativos do Agendador de Tarefas Duráveis. Encontre seu cenário na lista a seguir e siga as etapas vinculadas 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 você não conseguir diagnosticar seu problema depois de passar por este artigo, poderá registrar um tíquete de suporte acessando a seção Help>Support + solução de problemas do recurso Agendador de Tarefas Duráveis no portal Azure.

Verificar a cadeia de conexão e o acesso ao Agendador de Tarefas Duráveis

Quando o aplicativo não estiver em execução conforme o esperado, verifique o seguinte:

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

Desenvolvimento local

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

  2. Juntamente com o emulador do agendador de tarefas duráveis, verifique se o emulador de Armazenamento do Azure, Azurite, foi iniciado. O Azurite é necessário para componentes do aplicativo relacionados ao Functions.

Em execução no Azure

  1. Verifique se o aplicativo tem as variáveis DURABLE_TASK_SCHEDULER_CONNECTION_STRING de ambiente e TASKHUB_NAME.

  2. Verifique o valor de DURABLE_TASK_SCHEDULER_CONNECTION_STRING. Verifique especificamente se o ponto de extremidade do agendador e o tipo de autenticação estão corretos. A cadeia de conexão deve ser formatada da seguinte maneira ao ser utilizada:

    • Identidade gerenciada atribuída pelo usuário: Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}, onde client id está a ID do cliente da identidade.
    • Identidade gerenciada atribuída pelo sistema: Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. Verifique se a permissão de RBAC (controle de acesso baseado em função) 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 está atribuída ao seu aplicativo.

Erro ao implantar Durable Functions aplicativo no Azure

Se a implantação falhar com um erro, como Encountered an error (ServiceUnavailable) from host runtime no Visual Studio Code, primeiro verifique seu aplicativo para garantir que as variáveis de ambiente necessárias sejam definidas corretamente. Em seguida, reimplante seu aplicativo. Se você vir um erro carregando funções, selecione o botão Atualizar .

Erro desconhecido ao recuperar detalhes deste hub de tarefas

Se você receber um erro Unknown error retrieving details of this task hub no painel do agendador de tarefas durável, o motivo poderá ser:

  1. Sua identidade (email) 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 acesse o painel novamente.

  2. Seu hub de tarefas foi excluído.

Não é possível excluir o recurso

Antes de excluir um recurso de agendador, primeiro você deve excluir todos os seus hubs de tarefas. Caso contrário, você 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 isso, liste os hubs de tarefas no agendador e exclua-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 que todos os hubs de tarefas forem excluídos, tente novamente excluir o recurso do agendador.

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

Se, depois de iniciar o Azurite, você 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 é possível encontrar binários nativos para ARM (silício da Apple)

Se você vir erros gRPC relacionados à não localização de binários nativos para ARM (como em um Mac de silício da Apple — M1, M2 etc.), adicione a seguinte solução alternativa ao seu extensions.csproj arquivo:

  1. Adicione uma referência de pacote para Contrib.Grpc.Core.M1.
  2. Adicione um alvo personalizado de pós-construção que copie as bibliotecas nativas ARM64 do 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>