Dela via


Felsöka Azure Functions Durable Task Scheduler (förhandsversion)

Anmärkning

Microsofts supporttekniker är tillgängliga för att diagnostisera problem med ditt program. Om du inte kan diagnostisera problemet när du har gått igenom den här artikeln kan du skicka in ett supportärende genom att gå till avsnittet Hjälp>support + felsökning av resursen durable task scheduler på Azure-portalen.

Kontrollera anslutningssträngen och åtkomsten till den tåliga arbetsplaneraren

När appen inte körs som förväntat kontrollerar du först om du har:

  • Rätt format för anslutningssträngen.
  • Autentiseringen har konfigurerats korrekt.

Lokal utveckling

  1. Kontrollera anslutningssträngen, som ska ha det här formatet: Endpoint=http://localhost:<port number>;Authentication=None. Kontrollera att portnumret är det som mappas till 8080 i containern som kör emulatorn för den varaktiga uppgiftsschemaläggaren.

  2. Tillsammans med den hållbara schemaläggarens emulator kontrollerar du att Azure Storage-emulatorn Azurite har startats. Azurite behövs för komponenter i appen som är relaterade till Functions.

Körs i Azure

  1. Kontrollera i din app om det finns miljövariablerna DURABLE_TASK_SCHEDULER_CONNECTION_STRING och TASKHUB_NAME.

  2. Kontrollera värdet för DURABLE_TASK_SCHEDULER_CONNECTION_STRING. Mer specifikt kontrollerar du att scheduler-slutpunkten och autentiseringstypen är korrekta. Anslutningssträngen ska formateras på följande sätt när du använder:

    • Användartilldelad hanterad identitet: Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}, där client id är identitetens klient-ID.
    • Systemtilldelad hanterad identitet: Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. Se till att den nödvändiga rollbaserade åtkomstkontrollbehörigheten (RBAC) beviljas den identitet som behöver åtkomst till den angivna aktivitetshubben eller schemaläggaren.

  4. Om användartilldelad hanterad identitet används kontrollerar du att identiteten har tilldelats till din app.

Fel vid distribution av durable functions-appen till Azure

Om distributionen misslyckas med ett fel, till exempel Encountered an error (ServiceUnavailable) from host runtime från Visual Studio Code, kontrollerar du först appen för att se till att de nödvändiga miljövariablerna har angetts korrekt. Distribuera om din app sedan. Om du ser ett fel vid inläsning av funktioner klickar du på knappen Uppdatera.

Okänt fel vid hämtning av information om den här aktivitetshubben

Om du får ett Unknown error retrieving details of this task hub-fel på kontrollpanelen för den varaktiga schemaläggaren kan orsaken vara:

  1. Din identitet (e-post) har inte den behörighet som krävs för aktivitetshubben. Följ anvisningarna för att bevilja behörigheten och få sedan åtkomst till instrumentpanelen igen.

  2. Aktivitetshubben har tagits bort.

Det går inte att ta bort resursen

Se till att du tar bort alla aktivitetshubbar i den hållbara schemaläggarmiljön. Om du inte har gjort det får du följande felmeddelande:

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

Det går inte att fastställa vilket projekt som ska skapas

Om du efter att ha startat Azurite får felet: “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”

  • Ta bort bin - och obj-katalogerna i din app.
  • Försök att köra func start igen.

Det går inte att hitta interna binärfiler för ARM

Om du ser gRPC-fel som rör att inte hitta interna binärfiler för ARM (till exempel på en Mx Mac) kan du behöva lägga till följande lösning i slutet av extensions.csproj filen.

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

Problem med gRPC-körning

För Mx Mac-användare (ARM64) kan du stöta på gRPC-körningsproblem med varaktiga funktioner. Som en lösning:

  1. Referera till 2.41.0 versionen av Contrib.Grpc.Core.M1 NuGet-paketet.

  2. Lägg till ett anpassat mål efter bygget som säkerställer att rätt ARM64-version av gRPC-biblioteken kan hittas.

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