Udostępnij przez


Rozwiązywanie problemów z trwałym harmonogramem zadań usługi Azure Functions

Uwaga

Inżynierowie pomocy technicznej firmy Microsoft są dostępni, aby ułatwić diagnozowanie problemów z aplikacją. Jeśli nie możesz zdiagnozować problemu po przeczytaniu tego artykułu, możesz zgłosić zgłoszenie do pomocy technicznej, przechodząc do sekcji Pomoc>techniczna i rozwiązywanie problemów w zasobie trwałego harmonogramu zadań na platformie Azure portal.

Sprawdzanie parametrów połączenia i dostęp do trwałego harmonogramu zadań

Jeśli aplikacja nie jest uruchomiona zgodnie z oczekiwaniami, najpierw sprawdź, czy masz:

  • Poprawny format parametrów połączenia.
  • Uwierzytelnianie jest skonfigurowane poprawnie.

Rozwój lokalny

  1. Sprawdź parametry połączenia, które powinny mieć następujący format: Endpoint=http://localhost:<port number>;Authentication=None. Upewnij się, że numer portu jest tym, który jest zamapowany na 8080 w kontenerze uruchamiającym emulator trwałego harmonogramu zadań.

  2. Wraz z trwałym emulatorem planowania zadań, sprawdź, czy emulator usługi Azure Storage, Azurite, został uruchomiony. Usługa Azurite jest wymagana w przypadku składników aplikacji związanych z usługą Functions.

Uruchamianie na platformie Azure

  1. Sprawdź aplikację pod kątem zmiennych środowiskowych DURABLE_TASK_SCHEDULER_CONNECTION_STRING i TASKHUB_NAME.

  2. Sprawdź wartość atrybutu DURABLE_TASK_SCHEDULER_CONNECTION_STRING. W szczególności sprawdź, czy punkt końcowy harmonogramu i typ uwierzytelniania są poprawne. Parametry połączenia powinny być sformatowane w następujący sposób w przypadku użycia:

    • Tożsamość zarządzana przypisana przez użytkownika: Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}, gdzie client id jest identyfikatorem klienta tożsamości.
    • Tożsamość zarządzana przypisana przez system: Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. Upewnij się, że wymagane uprawnienie kontroli dostępu opartej na rolach (RBAC) jest przyznawane tożsamości wymagającej dostępu do określonego centrum zadań lub harmonogramu.

  4. Jeśli jest używana tożsamość zarządzana przypisana przez użytkownika, upewnij się, że tożsamość jest przypisana do aplikacji.

Błąd podczas wdrażania aplikacji durable functions na platformie Azure

Jeśli wdrożenie zakończy się niepowodzeniem z powodu błędu takiego jak Encountered an error (ServiceUnavailable) from host runtime z programu Visual Studio Code, najpierw sprawdź aplikację, aby upewnić się, że wymagane zmienne środowiskowe są poprawnie ustawione. Następnie ponownie wdróż aplikację. Jeśli wystąpi błąd podczas ładowania funkcji, kliknij przycisk "Odśwież".

Nieznany błąd podczas pobierania szczegółów tego centrum zadań

Jeśli wystąpi Unknown error retrieving details of this task hub błąd na konsoli trwałego harmonogramu zadań, przyczyną może być:

  1. Twój identyfikator (e-mail) nie ma przypisanego wymaganego uprawnienia dla tego centrum zarządzania zadaniami. Postępuj zgodnie z instrukcjami, aby udzielić uprawnienia, a następnie ponownie uzyskaj dostęp do pulpitu nawigacyjnego.

  2. Centrum zadań zostało usunięte.

Nie można usunąć zasobu

Upewnij się, że wszystkie centra zadań zostały usunięte w trwałym środowisku harmonogramu zadań. Jeśli tak nie jest, zostanie wyświetlony następujący komunikat o błędzie:

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

Nie można określić projektu do skompilowania

Jeśli po uruchomieniu Azurite wystąpi błąd: : “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”

  • Usuń katalogi bin i obj w swojej aplikacji.
  • Spróbuj uruchomić func start ponownie.

Nie można odnaleźć natywnych plików binarnych dla ARM

Jeśli zobaczysz błędy gRPC związane z brakiem natywnych plików binarnych dla architektury ARM (na przykład na komputerze Mx Mac), może być konieczne dodanie następującego obejścia na końcu pliku 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>

Występują problemy ze środowiskiem uruchomieniowym gRPC

W przypadku użytkowników Mx Mac (ARM64) możesz napotkać problemy z działaniem środowiska uruchomieniowego gRPC w połączeniu z trwałymi funkcjami. Jako obejście:

  1. Odwołaj się do wersji 2.41.0 pakietu NuGet Contrib.Grpc.Core.M1.

  2. Dodaj niestandardowy element docelowy po kompilacji, który zapewnia, że można znaleźć poprawną wersję bibliotek gRPC w wersji 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>