Durable Functions: mapping dell'API di lavoro isolato in-process

Questo riferimento fornisce un mapping completo tra l'SDK in-process (2.x) e l'SDK di lavoro isolato per Durable Functions. Usare questa pagina insieme alla guida alla migrazione durante l'aggiornamento del codice.

API per il client

In elaborazione (2.x) Lavoro isolato
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 oppure PurgeAllInstancesAsync
IDurableOrchestrationClient.CreateCheckStatusResponse DurableTaskClient.CreateCheckStatusResponseAsync (metodo di estensione, accetta HttpRequestData)
IDurableOrchestrationClient.WaitForCompletionOrCreateCheckStatusResponseAsync DurableTaskClient.WaitForCompletionOrCreateCheckStatusResponseAsync (metodo di estensione, timeout sostituito da CancellationToken)
IDurableOrchestrationClient.CreateHttpManagementPayload DurableTaskClient.CreateHttpManagementPayload (metodo di estensione)
DurableOrchestrationStatus OrchestrationMetadata
DurableOrchestrationStatus.History Rimosso dall'oggetto di stato. Utilizzare invece DurableTaskClient.GetOrchestrationHistoryAsync.
PurgeHistoryResult PurgeResult
OrchestrationStatusQueryCondition OrchestrationQuery
OrchestrationStatusQueryResult AsyncPageable<OrchestrationMetadata>

API client rimosse

Le API in-process seguenti non hanno equivalenti nell'SDK del ruolo di lavoro isolato:

API rimossa Workaround
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync Nessun equivalente
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) Usare GetInstanceAsync in un ciclo o GetAllInstancesAsync con un filtro di query
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) Usare PurgeInstanceAsync in un ciclo o PurgeAllInstancesAsync con un filtro
Overload tra hub attività (RaiseEventAsync, SignalEntityAsync, ReadEntityStateAsync con/taskHubNameconnectionName ) Sono supportate solo le operazioni same-task-hub

API client di entità

In elaborazione (2.x) Lavoro isolato
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync (accetta CleanEntityStorageRequest l'oggetto anziché i parametri bool)

API del contesto di orchestrazione

In elaborazione (2.x) Lavoro isolato
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>() o inserire l'input come parametro: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
IDurableOrchestrationContext.SetOutput Rimosso. Usare il valore restituito dalla funzione orchestratore.
IDurableOrchestrationContext.CallActivityAsync TaskOrchestrationContext.CallActivityAsync
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync con un TaskOptions parametro per i dettagli dei tentativi
IDurableOrchestrationContext.CallSubOrchestratorAsync TaskOrchestrationContext.CallSubOrchestratorAsync
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync con un TaskOptions parametro per i dettagli dei tentativi
IDurableOrchestrationContext.ContinueAsNew TaskOrchestrationContext.ContinueAsNew (vedere modifiche comportamentali per le differenze predefinite)
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateTimer<T>(DateTime, T, CancellationToken) TaskOrchestrationContext.CreateTimer(DateTime, CancellationToken). Parametro di stato rimosso.
IDurableOrchestrationContext.WaitForExternalEvent(string) (non generico) Rimosso. Utilizzare il WaitForExternalEvent<T>(string, CancellationToken).
IDurableOrchestrationContext.WaitForExternalEvent<T>(string, TimeSpan, T) (con defaultValue) Rimosso. Usare WaitForExternalEvent<T>(string, TimeSpan, CancellationToken), che genera TaskCanceledException in caso di timeout.
IDurableOrchestrationContext.ParentInstanceId TaskOrchestrationContext.Parent.InstanceId
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() oppure TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CreateEntityProxy<T> Rimosso. Usare Entities.CallEntityAsync o Entities.SignalEntityAsync direttamente.
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection()
RetryOptions TaskOptions con TaskRetryOptions
DurableActivityContext Nessun equivalente
DurableActivityContext.GetInput<T>() Inserire l'input come parametro: MyActivity([ActivityTrigger] T input)
DurableHttpRequest (spazio dei nomi WebJobs) DurableHttpRequest (spazio dei nomi Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)
DurableHttpResponse (spazio dei nomi WebJobs) DurableHttpResponse (spazio dei nomi Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)

API di entità

In elaborazione (2.x) Lavoro isolato
IDurableEntityContext TaskEntityContext
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Rimosso. Aggiungere FunctionContext come parametro di input.
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 Rimosso. Usare invece il valore restituito del metodo.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity. I segnali pianificati usano SignalEntityOptions.SignalTime anziché un sovraccarico di parametri DateTime.
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration. L'ID istanza viene impostato tramite StartOrchestrationOptions.InstanceId anziché un parametro stringa.
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Parametri del costruttore rimossi; usare invece l'inserimento delle dipendenze standard.
IDurableEntityContext.BatchSize Rimosso
IDurableEntityContext.BatchPosition Rimosso

Modifiche comportamentali

Esaminare queste modifiche di comportamento di rilievo prima di testare l'app migrata.

Serializzazione predefinita modificata

Il serializzatore predefinito è cambiato da Newtonsoft.Json a System.Text.Json. Per le opzioni di configurazione, vedere Serializzazione e persistenza in Durable Functions.

Avviso

ContinueAsNuova modifica predefinita: il preserveUnprocessedEvents parametro predefinito è stato modificato da false (2.x) a true (isolato). Se l'orchestrazione usa ContinueAsNew e si basa su eventi non elaborati scartati, passa esplicitamente preserveUnprocessedEvents: false.

Note

Cambio del valore predefinito di RestartAsync: il parametro predefinito è stato modificato da restartWithNewInstanceId (2.x) a true (isolato). Se il codice chiama RestartAsync e dipende da un nuovo ID istanza generato, passare restartWithNewInstanceId: true in modo esplicito.

Altre modifiche comportamentali

  • Rimozione del proxy di entità: CreateEntityProxy<T> e gli overload del delegato tipizzato SignalEntityAsync<TEntityInterface>(Action<T>) non sono disponibili nel worker isolato. Chiamare Entities.CallEntityAsync o Entities.SignalEntityAsync direttamente con nomi di operazione basati su stringa anziché usare interfacce proxy tipate.
  • WaitForCompletionOrCreateCheckStatusResponseAsync: il timeout parametro è stato rimosso. Usare invece un CancellationToken con un timeout di cancellazione.
  • Operazioni tra hub attività rimosse: gli overload in-process che accettati taskHubName e connectionName parametri non sono disponibili nel ruolo di lavoro isolato. Sono supportate solo le operazioni dello stesso task hub.
  • Operazioni batch per ID rimosse: gli overload e PurgeInstanceHistoryAsync(IEnumerable<string>) in-process GetStatusAsync(IEnumerable<string>) non sono disponibili. Usare GetAllInstancesAsync con un filtro OrchestrationQuery o chiama GetInstanceAsync/PurgeInstanceAsync singolarmente.
  • Cronologia orchestrazione spostata: DurableOrchestrationStatus.History (l'incorporato JArray) non fa più parte dell'oggetto stato. Usare l'API separata DurableTaskClient.GetOrchestrationHistoryAsync .
  • Entità DispatchAsync costruttore params rimosso: le classi di entità vengono attivate tramite inserimento delle dipendenze standard. Registra le dipendenze dell'entità in Program.cs.
  • Modifiche al filtro delle query di entità: EntityQuery.EntityName viene sostituito da EntityQuery.InstanceIdStartsWithe EntityQuery.IncludeDeleted viene sostituito da EntityQuery.IncludeTransient.
  • Modifica della firma CleanEntityStorageAsync: accetta un CleanEntityStorageRequest oggetto con RemoveEmptyEntities le proprietà e ReleaseOrphanedLocks anziché i parametri bool.
  • Nuove API nel ruolo di lavoro isolato: DurableTaskClient.GetOrchestrationHistoryAsync e il TaskOrchestrationContext.GetFunctionContext() metodo di estensione non hanno equivalenti in-process.