Durable Functions: mapování API pro pracovníky v procesu na izolované

Tento odkaz poskytuje komplexní mapování mezi sadou SDK v procesu (2.x) a izolovanou sadou SDK pracovního procesu pro Durable Functions. Tuto stránku použijte společně s průvodcem migrací při aktualizaci kódu.

Klientská rozhraní API

V procesu (2.x) Izolovaný pracovník
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 nebo PurgeAllInstancesAsync
IDurableOrchestrationClient.CreateCheckStatusResponse DurableTaskClient.CreateCheckStatusResponseAsync (rozšiřující metoda, přebírá HttpRequestData)
IDurableOrchestrationClient.WaitForCompletionOrCreateCheckStatusResponseAsync DurableTaskClient.WaitForCompletionOrCreateCheckStatusResponseAsync (rozšiřující metoda, timeout nahrazena CancellationToken)
IDurableOrchestrationClient.CreateHttpManagementPayload DurableTaskClient.CreateHttpManagementPayload (rozšiřující metoda)
DurableOrchestrationStatus OrchestrationMetadata
DurableOrchestrationStatus.History Odebráno z objektu stavu. Místo toho použijte DurableTaskClient.GetOrchestrationHistoryAsync.
PurgeHistoryResult PurgeResult
OrchestrationStatusQueryCondition OrchestrationQuery
OrchestrationStatusQueryResult AsyncPageable<OrchestrationMetadata>

Odebraná klientská rozhraní API

Následující rozhraní API v procesu nemají v izolované sadě SDK pracovního procesu ekvivalenty:

Odebrané rozhraní API Workaround
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync Žádný ekvivalent
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) Použití GetInstanceAsync ve smyčce nebo GetAllInstancesAsync s filtrem dotazu
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) Použití PurgeInstanceAsync ve smyčce nebo PurgeAllInstancesAsync s filtrem
Přetížení mezi úlohami rozbočovače (RaiseEventAsync, SignalEntityAsync, ReadEntityStateAsync staskHubName/connectionName ) Podporují se pouze operace stejného centra úloh.

Rozhraní API klienta entity

V procesu (2.x) Izolovaný pracovník
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync (přebírá CleanEntityStorageRequest objekt místo logických parametrů)

Rozhraní API pro orchestraci kontextu

V procesu (2.x) Izolovaný pracovník
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>() nebo vložte vstup jako parametr: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
IDurableOrchestrationContext.SetOutput Odstraněn. Použijte návratové hodnoty z funkce orchestrátoru.
IDurableOrchestrationContext.CallActivityAsync TaskOrchestrationContext.CallActivityAsync
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync s parametrem TaskOptions pro podrobnosti opakování
IDurableOrchestrationContext.CallSubOrchestratorAsync TaskOrchestrationContext.CallSubOrchestratorAsync
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync s parametrem TaskOptions pro podrobnosti opakování
IDurableOrchestrationContext.ContinueAsNew TaskOrchestrationContext.ContinueAsNew (viz změny chování pro výchozí rozdíly)
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateTimer<T>(DateTime, T, CancellationToken) TaskOrchestrationContext.CreateTimer(DateTime, CancellationToken). Byl odebrán parametr stavu.
IDurableOrchestrationContext.WaitForExternalEvent(string) (jiné než obecné) Odstraněn. Použijte WaitForExternalEvent<T>(string, CancellationToken).
IDurableOrchestrationContext.WaitForExternalEvent<T>(string, TimeSpan, T) (s defaultValue) Odstraněn. Použijte WaitForExternalEvent<T>(string, TimeSpan, CancellationToken), který vyvolá TaskCanceledException, pokud dojde k vypršení časového limitu.
IDurableOrchestrationContext.ParentInstanceId TaskOrchestrationContext.Parent.InstanceId
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() nebo TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CreateEntityProxy<T> Odstraněn. Použijte Entities.CallEntityAsync nebo Entities.SignalEntityAsync přímo.
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection()
RetryOptions TaskOptions s TaskRetryOptions
DurableActivityContext Žádný ekvivalent
DurableActivityContext.GetInput<T>() Vložte vstup jako parametr: MyActivity([ActivityTrigger] T input)
DurableHttpRequest (Obor názvů WebJobs) DurableHttpRequest (jmenný prostor Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)
DurableHttpResponse (Obor názvů WebJobs) DurableHttpResponse (jmenný prostor Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)

Rozhraní API entity

V procesu (2.x) Izolovaný pracovník
IDurableEntityContext TaskEntityContext
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Odstraněn. Přidejte FunctionContext jako vstupní parametr.
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 Odstraněn. Místo toho použijte návratové hodnoty metody.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity. Plánované signály používají SignalEntityOptions.SignalTime namísto přetížení parametru DateTime.
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration. Instance ID se nastavuje pomocí StartOrchestrationOptions.InstanceId namísto řetězcového parametru.
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Konstruktorové parametry byly odstraněny; místo toho použijte standardní DI (dependency injection).
IDurableEntityContext.BatchSize Removed
IDurableEntityContext.BatchPosition Removed

Změny chování

Před otestování migrované aplikace si projděte tyto změny způsobující chování.

Změna výchozího nastavení serializace

Výchozí serializátor se změnil z Newtonsoft.Json na System.Text.Json. Možnosti konfigurace najdete v tématu Serializace a trvalost v Durable Functions.

Warning

ContinueAsNew default change: Výchozí hodnota parametru preserveUnprocessedEvents byla změněna z false (2.x) na true (isolated). Pokud orchestrace používá ContinueAsNew a spoléhá na to, že nezpracované události mají být zahozeny, explicitně předejte preserveUnprocessedEvents: false.

Note

Výchozí změna restartAsync: Výchozí restartWithNewInstanceId parametr se změnil z true (2.x) na false (izolovaný). Pokud váš kód volá RestartAsync a závisí na vygenerovaném novém ID instance, explicitně předejte restartWithNewInstanceId: true.

Jiné změny chování

  • Odebrání proxy serveru entity: CreateEntityProxy<T> a přetížení typu SignalEntityAsync<TEntityInterface>(Action<T>) delegáta nejsou k dispozici v izolovaném pracovním procesu. Místo použití zadaných proxy rozhraní volejte Entities.CallEntityAsync nebo Entities.SignalEntityAsync přímo s názvy operací založenými na řetězcích.
  • WaitForCompletionOrCreateCheckStatusResponseAsync: Parametr timeout byl odebrán. Použijte CancellationToken s časovým limitem zrušení.
  • Operace mezi úlohami rozbočovače byly odebrány: Přetížení v procesu, která přijali taskHubName a connectionName parametry nejsou k dispozici v izolovaném pracovním procesu. Podporují se pouze operace stejného centra úloh.
  • Odebrané dávkové operace podle ID: Proces GetStatusAsync(IEnumerable<string>) a PurgeInstanceHistoryAsync(IEnumerable<string>) přetížení nejsou k dispozici. Použijte GetAllInstancesAsync s filtrem OrchestrationQuery nebo volejte GetInstanceAsync/PurgeInstanceAsync jednotlivě.
  • Přesunutá historie orchestrace: DurableOrchestrationStatus.History (vložený JArray) už není součástí objektu stavu. Použijte samostatné DurableTaskClient.GetOrchestrationHistoryAsync rozhraní API.
  • Odebrané parametry konstruktoru Entity DispatchAsync: Třídy entit jsou aktivovány prostřednictvím standardní injektáže závislostí. Zaregistrujte závislosti entity v souboru Program.cs.
  • Změny filtru dotazu entity: EntityQuery.EntityName je nahrazena znakem EntityQuery.InstanceIdStartsWith, a EntityQuery.IncludeDeleted je nahrazena EntityQuery.IncludeTransient.
  • Změna podpisu CleanEntityStorageAsync: Přebírá CleanEntityStorageRequest objekt s RemoveEmptyEntities parametry bool a ReleaseOrphanedLocks vlastnosti místo logických parametrů.
  • Nová rozhraní API v izolovanémDurableTaskClient.GetOrchestrationHistoryAsync pracovním procesu: TaskOrchestrationContext.GetFunctionContext() a metoda rozšíření nemá žádný ekvivalent v procesu.