Freigeben über


Problembehandlung beim langlebigen Aufgabenplaner von Azure Functions

Hinweis

Microsoft-Supporttechniker stehen zur Verfügung, um Probleme mit Ihrer Anwendung zu diagnostizieren. Wenn Sie Ihr Problem nach dem Durchlaufen dieses Artikels nicht diagnostizieren können, können Sie ein Supportticket einreichen, indem Sie im Azure-Portal den Abschnitt "Hilfesupport>+ Problembehandlung " der Ressource für den dauerhaften Aufgabenplaner aufrufen.

Überprüfen der Verbindungszeichenfolge und des Zugriffs auf den langlebigen Aufgabenplaner

Wenn Ihre App nicht wie erwartet ausgeführt wird, überprüfen Sie zuerst, ob Sie folgendes haben:

  • Das richtige Verbindungszeichenfolgenformat.
  • Die Authentifizierung wurde ordnungsgemäß eingerichtet.

Lokale Entwicklung

  1. Überprüfen Sie die Verbindungszeichenfolge, die dieses Format aufweisen soll: Endpoint=http://localhost:<port number>;Authentication=None. Vergewissern Sie sich, dass die Portnummer der Nummer 8080 für den im Emulator des langlebigen Aufgabenplaners ausgeführten Container zugeordnet ist.

  2. Stellen Sie sicher, dass neben dem Emulator des langlebigen Aufgabenplaners auch der Azure Storage-Emulator Azurite gestartet wird. Azurite wird für Komponenten der App im Zusammenhang mit Funktionen benötigt.

Ausführen auf Azure

  1. Überprüfen Sie Ihre App auf die Umgebungsvariablen DURABLE_TASK_SCHEDULER_CONNECTION_STRING und TASKHUB_NAME.

  2. Überprüfen Sie den Wert von DURABLE_TASK_SCHEDULER_CONNECTION_STRING. Überprüfen Sie insbesondere, ob der Zeitplanendpunkt und der Authentifizierungstyp korrekt sind. Die Verbindungszeichenfolge sollte bei Verwendung wie folgt formatiert werden:

    • Vom Benutzer zugewiesene verwaltete Identität: Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}dabei client id handelt es sich um die Client-ID der Identität.
    • Vom System zugewiesene verwaltete Identität: Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. Stellen Sie sicher, dass die erforderliche rollenbasierte Zugriffssteuerungsberechtigung (RBAC) der Identität gewährt wird, die für den Zugriff auf den angegebenen Aufgabenhub oder -planer erforderlich ist.

  4. Wenn vom Benutzer zugewiesene verwaltete Identität verwendet wird, stellen Sie sicher, dass die Identität Ihrer App zugewiesen ist.

Fehler beim Bereitstellen der Durable Functions-App in Azure

Wenn die Bereitstellung mit einem Fehler wie Encountered an error (ServiceUnavailable) from host runtime von Visual Studio Code fehlschlägt, überprüfen Sie zuerst Ihre App, um zu gewährleisten, dass die erforderlichen Umgebungsvariablen korrekt festgelegt sind. Stellen Sie ihre App dann erneut zur Anwendung. Wenn beim Laden von Funktionen ein Fehler angezeigt wird, klicken Sie auf die Schaltfläche "Aktualisieren".

Unbekannter Fehler beim Abrufen von Details dieses Aufgabenhubs

Wenn im Dashboard für den dauerhaften Vorgangsplaner ein Unknown error retrieving details of this task hub Fehler angezeigt wird, kann der Grund sein:

  1. Ihre Identität (E-Mail-Adresse) verfügt nicht über die erforderliche Berechtigung für diesen Aufgabenhub. Folgen Sie den Anweisungen, um die Berechtigung zu erteilen, und greifen Sie dann erneut auf das Dashboard zu.

  2. Ihr Aufgabenhub wurde gelöscht.

Ressource kann nicht gelöscht werden

Stellen Sie sicher, dass Sie alle Aufgabenhubs in der Umgebung des langlebigen Aufgabenplaners löschen. Falls nicht, wird die folgende Fehlermeldung angezeigt:

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

Das zu erstellende Projekt kann nicht bestimmt werden.

Wenn nach dem Starten der Azurite der Fehler auftritt: : “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”

  • Löschen Sie die Bin - und Obj-Verzeichnisse in Ihrer App.
  • Versuchen Sie, func start erneut auszuführen.

Systemeigene Binärdateien für ARM können nicht gefunden werden

Wenn gRPC-Fehler im Zusammenhang mit der Suche nach nativen Binärdateien für ARM (z. B. auf einem Mx Mac) auftreten, müssen Sie möglicherweise die folgende Problemumgehung am Ende der Datei extensions.csproj hinzufügen.

<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>

Fehler bei der gRPC-Runtime

Für Benutzer von Mx Mac (ARM64) können möglicherweise gRPC-Laufzeitprobleme bei beständigen Funktionen auftreten. Als alternative Lösung:

  1. Verweisen Sie auf die 2.41.0 Version des Contrib.Grpc.Core.M1 NuGet-Pakets.

  2. Fügen Sie ein benutzerdefiniertes After-Build-Ziel hinzu, mit dem sichergestellt wird, dass die richtige ARM64-Version der gRPC-Bibliotheken gefunden wird.

    <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>