Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 tipizzatoSignalEntityAsync<TEntityInterface>(Action<T>)non sono disponibili nel worker isolato. ChiamareEntities.CallEntityAsyncoEntities.SignalEntityAsyncdirettamente con nomi di operazione basati su stringa anziché usare interfacce proxy tipate. -
WaitForCompletionOrCreateCheckStatusResponseAsync: il
timeoutparametro è stato rimosso. Usare invece unCancellationTokencon un timeout di cancellazione. -
Operazioni tra hub attività rimosse: gli overload in-process che accettati
taskHubNameeconnectionNameparametri 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-processGetStatusAsync(IEnumerable<string>)non sono disponibili. UsareGetAllInstancesAsynccon un filtroOrchestrationQueryo chiamaGetInstanceAsync/PurgeInstanceAsyncsingolarmente. -
Cronologia orchestrazione spostata:
DurableOrchestrationStatus.History(l'incorporatoJArray) non fa più parte dell'oggetto stato. Usare l'API separataDurableTaskClient.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.EntityNameviene sostituito daEntityQuery.InstanceIdStartsWitheEntityQuery.IncludeDeletedviene sostituito daEntityQuery.IncludeTransient. -
Modifica della firma CleanEntityStorageAsync: accetta un
CleanEntityStorageRequestoggetto conRemoveEmptyEntitiesle proprietà eReleaseOrphanedLocksanziché i parametri bool. -
Nuove API nel ruolo di lavoro isolato:
DurableTaskClient.GetOrchestrationHistoryAsynce ilTaskOrchestrationContext.GetFunctionContext()metodo di estensione non hanno equivalenti in-process.
Contenuti correlati
- Guida Migration: Durable Functions dal ruolo di lavoro in-process a isolato
- Serializzazione e persistenza in Durable Functions
-
In-process SDK api reference (
Microsoft.Azure.WebJobs.Extensions.DurableTask) -
Informazioni di riferimento sulle API dell'SDK del ruolo di lavoro isolato (
Microsoft.DurableTask)