Compartir a través de


Solución de problemas del programador de tareas durables de Azure Functions (versión preliminar)

Nota:

Los ingenieros de soporte técnico de Microsoft están disponibles para ayudar a diagnosticar problemas con la aplicación. Si no puede diagnosticar el problema después de pasar por este artículo, puede presentar una incidencia de soporte técnico; para ello, vaya a la sección Soporte> técnicoy solución de problemas del recurso del programador de tareas duradero en Azure Portal.

Comprobar la cadena de conexión y el acceso al programador de tareas persistente

Cuando la aplicación no se ejecute según lo previsto, compruebe primero si tiene lo siguiente:

  • Formato de cadena de conexión correcto.
  • La autenticación se configura correctamente.

Desarrollo local

  1. Compruebe la cadena de conexión, que debe tener este formato: Endpoint=http://localhost:<port number>;Authentication=None. Asegúrese de que el número de puerto es el asignado a 8080 en el contenedor que ejecuta el emulador del planificador de tareas duradero.

  2. Junto con el emulador del programador de tareas duraderas, asegúrese de que se inicie el emulador de Azure Storage, Azurite. Azurite es necesario para los componentes de la aplicación relacionados con Functions.

Ejecución en Azure

  1. Compruebe la aplicación para ver las variables DURABLE_TASK_SCHEDULER_CONNECTION_STRING de entorno y TASKHUB_NAME.

  2. Compruebe el valor de DURABLE_TASK_SCHEDULER_CONNECTION_STRING. En concreto, compruebe que el punto de conexión del programador y el tipo de autenticación son correctos. La cadena de conexión debe tener el formato siguiente al usar:

    • Identidad administrada asignada por el usuario: Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}, donde client id es el identificador de cliente de la identidad.
    • Identidad administrada asignada por el sistema: Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. Asegúrese de que se concede el permiso de control de acceso basado en rol (RBAC) necesario a la identidad que necesita para acceder al centro de tareas o programador especificados.

  4. Si se usa la identidad administrada asignada por el usuario, asegúrese de que la identidad se asigna a la aplicación.

Error al implementar la aplicación de Funciones Duraderas en Azure

Si se produce un error en la implementación, como Encountered an error (ServiceUnavailable) from host runtime desde Visual Studio Code, compruebe primero la aplicación para asegurarse de que las variables de entorno necesarias están configuradas correctamente. A continuación, vuelva a implementar la aplicación. Si ve un error al cargar funciones, haga clic en el botón "Actualizar".

Error desconocido al recuperar detalles de este centro de tareas

Si recibe un error Unknown error retrieving details of this task hub en el panel del programador de tareas duraderas, el motivo podría ser:

  1. La identidad (correo electrónico) no tiene el permiso necesario asignado para esa central de tareas. Siga las instrucciones para conceder el permiso y, a continuación, vuelva a acceder al panel.

  2. Se eliminó el hub de tareas.

No se puede eliminar el recurso

Asegúrese de eliminar todos los centros de tareas en el entorno del programador de tareas duradero. Si no lo ha hecho, recibirá el siguiente mensaje de error:

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

No se puede determinar el proyecto que se va a compilar

Si, después de iniciar Azurite, se produce el error: “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”:

  • Elimine los directorios bin y obj de la aplicación.
  • Prueba a ejecutar func start de nuevo.

No se pueden encontrar archivos binarios nativos para ARM

Si ve errores de gRPC relacionados con no encontrar archivos binarios nativos para ARM (por ejemplo, en un equipo Mac Mx), es posible que tenga que agregar la siguiente solución alternativa al final del extensions.csproj archivo.

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

Experimenta problemas en tiempo de ejecución de gRPC

En el caso de los usuarios de Mx Mac (ARM64), podría encontrarse con problemas de runtime de gRPC con funciones duraderas. Como solución alternativa:

  1. Haga referencia a la versión 2.41.0 del paquete NuGet Contrib.Grpc.Core.M1.

  2. Agregue un destino posterior a la compilación personalizado que garantice que se puede encontrar la versión correcta de ARM64 de las bibliotecas gRPC.

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