Solución de errores en el Programador de tareas duraderas

Este artículo le ayuda a solucionar problemas de escenarios comunes en las aplicaciones de Durable Task Scheduler. Busque el escenario en la lista siguiente y siga los pasos vinculados para diagnosticar y resolver el problema.

Escenarios comunes

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 Help>Support + troubleshooting del recurso Durable Task Scheduler en el portal de Azure.

Comprobar la cadena de conexión y el acceso al planificador de tareas duraderas

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

  • El formato de la cadena de conexión es correcto.
  • La autenticación está configurada 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 Durable Functions aplicación 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, seleccione 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

Para poder eliminar un recurso del programador, primero debe eliminar todos sus centros de tareas. 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."
  }
}

Para resolverlo, enumere los centros de tareas en el programador y elimínelos:

# 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

Una vez eliminados todos los centros de tareas, vuelva a intentar eliminar el recurso del programador.

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 (apple silicon)

Si ve errores de gRPC relacionados con no encontrar archivos binarios nativos para ARM (por ejemplo, en un Mac de silicio de Apple : M1, M2, etc.), agregue la siguiente solución alternativa al extensions.csproj archivo:

  1. Agregue una referencia de paquete a Contrib.Grpc.Core.M1.
  2. Agregue un destino después de la compilación personalizado que copie las bibliotecas nativas de gRPC de ARM64 en el directorio de salida correcto.

Agregue los siguientes elementos ItemGroup y Target a su 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>