Durable Functions : mappage d’API worker isolé dans le processus

Cette référence fournit un mappage complet entre le SDK in-process (2.x) et le SDK Worker isolé pour Durable Functions. Utilisez cette page en même temps que le guide de migration lors de la mise à jour de votre code.

API clientes

En cours (2.x) Travailleur isolé
IDurableOrchestrationClient DurableTaskClient
IDurableOrchestrationClient.StartNewAsync DurableTaskClient.ScheduleNewOrchestrationInstanceAsync
IDurableOrchestrationClient.GetStatusAsync DurableTaskClient.GetInstanceAsync
IDurableOrchestrationClient.ListInstancesAsync DurableTaskClient.GetAllInstancesAsync
IDurableOrchestrationClient.TerminateAsync DurableTaskClient.TerminateInstanceAsync
IDurableOrchestrationClient.SuspendAsync DurableTaskClient.SuspendInstanceAsync
IDurableOrchestrationClient.ResumeAsync DurableTaskClient.ResumeInstanceAsync
IDurableOrchestrationClient.RaiseEventAsync DurableTaskClient.RaiseEventAsync
IDurableOrchestrationClient.RewindAsync DurableTaskClient.RewindInstanceAsync
IDurableOrchestrationClient.RestartAsync DurableTaskClient.RestartAsync
IDurableOrchestrationClient.PurgeInstanceHistoryAsync DurableTaskClient.PurgeInstanceAsync ou PurgeAllInstancesAsync
IDurableOrchestrationClient.CreateCheckStatusResponse DurableTaskClient.CreateCheckStatusResponseAsync (méthode d’extension, prend HttpRequestData)
IDurableOrchestrationClient.WaitForCompletionOrCreateCheckStatusResponseAsync DurableTaskClient.WaitForCompletionOrCreateCheckStatusResponseAsync (méthode d’extension, timeout remplacée par CancellationToken)
IDurableOrchestrationClient.CreateHttpManagementPayload DurableTaskClient.CreateHttpManagementPayload (méthode d’extension)
DurableOrchestrationStatus OrchestrationMetadata
DurableOrchestrationStatus.History Supprimé de l’objet status. Utilisez DurableTaskClient.GetOrchestrationHistoryAsync à la place.
PurgeHistoryResult PurgeResult
OrchestrationStatusQueryCondition OrchestrationQuery
OrchestrationStatusQueryResult AsyncPageable<OrchestrationMetadata>

API clientes supprimées

Les API in-process suivantes n’ont pas d’équivalents dans le Kit de développement logiciel (SDK) worker isolé :

API supprimée Contournement
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync Pas d'équivalent
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) Utiliser GetInstanceAsync dans une boucle ou GetAllInstancesAsync avec un filtre de requête
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) Utiliser PurgeInstanceAsync dans une boucle ou PurgeAllInstancesAsync avec un filtre
Surcharges inter-tâches hub (RaiseEventAsync, ReadEntityStateAsyncSignalEntityAsyncavecconnectionNametaskHubName/ ) Seules les opérations du même hub de tâches sont prises en charge

API clientes d’entité

En cours (2.x) Travailleur isolé
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync (prend un objet CleanEntityStorageRequest au lieu de paramètres booléens)

API de contexte d’orchestration

En cours (2.x) Travailleur isolé
IDurableOrchestrationContext TaskOrchestrationContext
IDurableOrchestrationContext.InstanceId TaskOrchestrationContext.InstanceId
IDurableOrchestrationContext.Name TaskOrchestrationContext.Name
IDurableOrchestrationContext.CurrentUtcDateTime TaskOrchestrationContext.CurrentUtcDateTime
IDurableOrchestrationContext.IsReplaying TaskOrchestrationContext.IsReplaying
IDurableOrchestrationContext.NewGuid TaskOrchestrationContext.NewGuid
IDurableOrchestrationContext.GetInput<T>() TaskOrchestrationContext.GetInput<T>() ou injectez une entrée en tant que paramètre : MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
IDurableOrchestrationContext.SetOutput Enlevé. Utilisez la valeur de retour de la fonction orchestrator.
IDurableOrchestrationContext.CallActivityAsync TaskOrchestrationContext.CallActivityAsync
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync avec un TaskOptions paramètre pour les détails de nouvelle tentative
IDurableOrchestrationContext.CallSubOrchestratorAsync TaskOrchestrationContext.CallSubOrchestratorAsync
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync avec un TaskOptions paramètre pour les détails de nouvelle tentative
IDurableOrchestrationContext.ContinueAsNew TaskOrchestrationContext.ContinueAsNew (consultez les modifications comportementales pour connaître les différences par défaut)
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateTimer<T>(DateTime, T, CancellationToken) TaskOrchestrationContext.CreateTimer(DateTime, CancellationToken). Paramètre d’état supprimé.
IDurableOrchestrationContext.WaitForExternalEvent(string) (non générique) Enlevé. Utilisez WaitForExternalEvent<T>(string, CancellationToken).
IDurableOrchestrationContext.WaitForExternalEvent<T>(string, TimeSpan, T) (avec defaultValue) Enlevé. Utilisez WaitForExternalEvent<T>(string, TimeSpan, CancellationToken), qui lance une exception TaskCanceledException en cas de délai d'expiration.
IDurableOrchestrationContext.ParentInstanceId TaskOrchestrationContext.Parent.InstanceId
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() ou TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CreateEntityProxy<T> Enlevé. Utilisez Entities.CallEntityAsync ou Entities.SignalEntityAsync directement.
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection()
RetryOptions TaskOptions avec TaskRetryOptions
DurableActivityContext Pas d'équivalent
DurableActivityContext.GetInput<T>() Injectez une entrée en tant que paramètre : MyActivity([ActivityTrigger] T input)
DurableHttpRequest (Espace de noms WebJobs) DurableHttpRequest (espace de noms Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)
DurableHttpResponse (Espace de noms WebJobs) DurableHttpResponse (espace de noms Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)

API d’entité

En cours (2.x) Travailleur isolé
IDurableEntityContext TaskEntityContext
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Enlevé. Ajouter FunctionContext en tant que paramètre d’entrée.
IDurableEntityContext.HasState TaskEntityOperation.State.HasState
IDurableEntityContext.GetState TaskEntityOperation.State.GetState
IDurableEntityContext.SetState TaskEntityOperation.State.SetState
IDurableEntityContext.DeleteState TaskEntityOperation.State.SetState(null)
IDurableEntityContext.GetInput TaskEntityOperation.GetInput
IDurableEntityContext.Return Enlevé. Utilisez la valeur de retour de méthode à la place.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity. Les signaux planifiés utilisent SignalEntityOptions.SignalTime plutôt qu’une DateTime surcharge de paramètre.
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration. L’ID d’instance est défini au StartOrchestrationOptions.InstanceId lieu d’un paramètre de chaîne.
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Paramètres de constructeur supprimés ; utilisez plutôt le DI standard.
IDurableEntityContext.BatchSize Removed
IDurableEntityContext.BatchPosition Removed

Changements comportementaux

Passez en revue ces changements de comportement cassants avant de tester votre application migrée.

La sérialisation par défaut a changé

Le sérialiseur par défaut est passé de Newtonsoft.Json à System.Text.Json. Pour connaître les options de configuration, consultez Sérialisation et persistance dans Durable Functions.

Warning

Modification par défaut de ContinueAsNew : le preserveUnprocessedEvents paramètre par défaut est passé de false (2.x) à true (isolé). Si votre orchestration utilise ContinueAsNew et s’appuie sur le fait que les événements non traités soient ignorés, transmettez preserveUnprocessedEvents: false explicitement.

Remarque

Changement par défaut de RestartAsync : le restartWithNewInstanceId paramètre par défaut est passé de true (2.x) à false (isolé). Si votre code appelle RestartAsync et dépend d’un nouvel ID d’instance généré, passez restartWithNewInstanceId: trueexplicitement .

Autres changements comportementaux

  • Suppression du proxy d’entité : CreateEntityProxy<T> et les surcharges de délégué typées SignalEntityAsync<TEntityInterface>(Action<T>) ne sont pas disponibles dans le worker isolé. Appelez Entities.CallEntityAsync ou Entities.SignalEntityAsync directement avec des noms d’opérations basées sur des chaînes au lieu d’utiliser des interfaces proxy typées.
  • WaitForCompletionOrCreateCheckStatusResponseAsync : le timeout paramètre a été supprimé. Utilisez plutôt un CancellationToken avec un temps d'attente pour l'annulation.
  • Opérations inter-tâches-hub supprimées : les surcharges in-process qui ont accepté taskHubName et connectionName les paramètres ne sont pas disponibles dans un worker isolé. Seules les opérations sur des hubs de tâches identiques sont prises en charge.
  • Opérations par lot supprimées par ID : les surcharges et PurgeInstanceHistoryAsync(IEnumerable<string>) processus GetStatusAsync(IEnumerable<string>) ne sont pas disponibles. Utiliser GetAllInstancesAsync avec un OrchestrationQuery filtre ou un appel GetInstanceAsync/PurgeInstanceAsync individuellement.
  • Historique d’orchestration déplacé : DurableOrchestrationStatus.History (l'élément incorporé JArray) ne fait plus partie de l’objet d’état. Utilisez l’API distincte DurableTaskClient.GetOrchestrationHistoryAsync .
  • Analyseurs de constructeur Entity DispatchAsync supprimés : les classes d’entité sont activées via l’injection de dépendances standard. Inscrivez les dépendances de votre entité dans Program.cs.
  • Modifications du filtre de requête d’entité : EntityQuery.EntityName est remplacé par EntityQuery.InstanceIdStartsWith, et EntityQuery.IncludeDeleted est remplacé par EntityQuery.IncludeTransient.
  • Modification de signature CleanEntityStorageAsync : prend un CleanEntityStorageRequest objet avec RemoveEmptyEntities et ReleaseOrphanedLocks des propriétés au lieu de paramètres bool.
  • Nouvelles API dans un worker isolé : DurableTaskClient.GetOrchestrationHistoryAsync et la TaskOrchestrationContext.GetFunctionContext() méthode d’extension n’a pas d’équivalent in-process.