Устойчивые функции: внутрипроцессное сопоставление рабочих API

Эта ссылка обеспечивает комплексное сопоставление между пакетом SDK для внутрипроцессного (2.x) и изолированным рабочим пакетом SDK для Устойчивые функции. Используйте эту страницу вместе с руководством по миграции при обновлении кода.

Клиентские API

В процессе (2.x) Изолированный работник
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 или PurgeAllInstancesAsync
IDurableOrchestrationClient.CreateCheckStatusResponse DurableTaskClient.CreateCheckStatusResponseAsync (метод расширения, принимает HttpRequestData)
IDurableOrchestrationClient.WaitForCompletionOrCreateCheckStatusResponseAsync DurableTaskClient.WaitForCompletionOrCreateCheckStatusResponseAsync (метод расширения, timeout замененный CancellationToken)
IDurableOrchestrationClient.CreateHttpManagementPayload DurableTaskClient.CreateHttpManagementPayload (метод расширения)
DurableOrchestrationStatus OrchestrationMetadata
DurableOrchestrationStatus.History Удален из объекта состояния. Вместо этого используйте DurableTaskClient.GetOrchestrationHistoryAsync.
PurgeHistoryResult PurgeResult
OrchestrationStatusQueryCondition OrchestrationQuery
OrchestrationStatusQueryResult AsyncPageable<OrchestrationMetadata>

Удаленные клиентские API

Следующие интерфейсы API в процессе не имеют эквивалентов в изолированном рабочем пакете SDK:

Удалённый API Обходной путь
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync Нет эквивалента
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) Использование GetInstanceAsync в цикле или GetAllInstancesAsync с фильтром запросов
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) Использование PurgeInstanceAsync в цикле или PurgeAllInstancesAsync с фильтром
Перегрузки между задачами (RaiseEventAsync, SignalEntityAsyncReadEntityStateAsyncс )taskHubName/connectionName Поддерживаются только операции с тем же центром задач

API клиента сущности

В процессе (2.x) Изолированный работник
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync (принимает CleanEntityStorageRequest объект вместо булевых параметров)

API контекста оркестрации

В процессе (2.x) Изолированный работник
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>() или ввести входные данные в качестве параметра: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
IDurableOrchestrationContext.SetOutput Удалено. Используйте значение, возвращаемое функцией оркестратора.
IDurableOrchestrationContext.CallActivityAsync TaskOrchestrationContext.CallActivityAsync
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync с параметром для сведений TaskOptions о повторных попытках
IDurableOrchestrationContext.CallSubOrchestratorAsync TaskOrchestrationContext.CallSubOrchestratorAsync
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync с параметром для сведений TaskOptions о повторных попытках
IDurableOrchestrationContext.ContinueAsNew TaskOrchestrationContext.ContinueAsNew (см. изменения поведения для различий по умолчанию)
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateTimer<T>(DateTime, T, CancellationToken) TaskOrchestrationContext.CreateTimer(DateTime, CancellationToken). Удален параметр состояния.
IDurableOrchestrationContext.WaitForExternalEvent(string) (не универсальный) Удалено. Используйте WaitForExternalEvent<T>(string, CancellationToken).
IDurableOrchestrationContext.WaitForExternalEvent<T>(string, TimeSpan, T)defaultValue) Удалено. Используйте WaitForExternalEvent<T>(string, TimeSpan, CancellationToken), который выбрасывает TaskCanceledException при превышении времени ожидания.
IDurableOrchestrationContext.ParentInstanceId TaskOrchestrationContext.Parent.InstanceId
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() или TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CreateEntityProxy<T> Удалено. Используйте Entities.CallEntityAsync или Entities.SignalEntityAsync напрямую.
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection()
RetryOptions TaskOptions С TaskRetryOptions
DurableActivityContext Нет эквивалента
DurableActivityContext.GetInput<T>() Внедрение входных данных в качестве параметра: MyActivity([ActivityTrigger] T input)
DurableHttpRequest (пространство имен WebJobs) DurableHttpRequest (пространство имен Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)
DurableHttpResponse (пространство имен WebJobs) DurableHttpResponse (пространство имен Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)

API сущностей

В процессе (2.x) Изолированный работник
IDurableEntityContext TaskEntityContext
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Удалено. Добавьте FunctionContext в качестве входного параметра.
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 Удалено. Используйте вместо этого возвращаемое значение метода.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity. Запланированные сигналы используют SignalEntityOptions.SignalTime вместо перегрузки параметра DateTime.
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration. Идентификатор экземпляра задается через StartOrchestrationOptions.InstanceId вместо строкового параметра.
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Удалены параметры конструктора; используйте стандартный DI.
IDurableEntityContext.BatchSize Removed
IDurableEntityContext.BatchPosition Removed

Изменения поведения

Просмотрите эти критические изменения поведения перед тестированием перенесенного приложения.

Изменение сериализации по умолчанию

Сериализатор по умолчанию изменился на Newtonsoft.JsonSystem.Text.Json. Параметры конфигурации см. в разделе Сериализация и сохраняемость в Устойчивые функции.

Предупреждение

Продолжение изменения по умолчанию для AsNew: preserveUnprocessedEvents параметр по умолчанию изменился с false (2.x) на true (изолированный). Если ваша оркестрация использует ContinueAsNew и зависит от сброса необработанных событий, передайте preserveUnprocessedEvents: false явно.

Note

Изменение параметра по умолчанию для RestartAsync: restartWithNewInstanceId параметр по умолчанию был изменён с true (2.x) на false (изолированный). Если ваш код вызывает RestartAsync и зависит от создания нового идентификатора экземпляра, явно передайте restartWithNewInstanceId: true.

Другие изменения поведения

  • Удаление прокси-сервера сущности: CreateEntityProxy<T> а перегрузки делегата SignalEntityAsync<TEntityInterface>(Action<T>) типа недоступны в изолированном рабочем процессе. Вызовите Entities.CallEntityAsync или Entities.SignalEntityAsync прямо с именами операций на основе строк вместо использования типизированных прокси-интерфейсов.
  • WaitForCompletionOrCreateCheckStatusResponseAsync: timeout параметр был удален. Вместо этого используйте CancellationToken с таймаутом отмены.
  • Удаленные операции между задачами: перегрузки внутри процесса, принятые taskHubName и connectionName параметры недоступны в изолированной рабочей роли. Поддерживаются только те же операции центра задач.
  • Пакетные операции по идентификатору удалены: GetStatusAsync(IEnumerable<string>) встроенные и PurgeInstanceHistoryAsync(IEnumerable<string>) перегрузки недоступны. Используйте GetAllInstancesAsync с фильтром OrchestrationQuery или вызывайте элементы GetInstanceAsync/PurgeInstanceAsync по отдельности.
  • Журнал оркестрации перемещен: DurableOrchestrationStatus.History (внедренный JArray) больше не является частью объекта состояния. Используйте отдельный DurableTaskClient.GetOrchestrationHistoryAsync API.
  • Удалены параметры конструктора Entity DispatchAsync: классы сущностей активируются с помощью стандартной внедрения зависимостей. Зарегистрируйте зависимости вашей сущности в Program.cs.
  • Изменения фильтра запросов сущностей: EntityQuery.EntityName заменяются EntityQuery.InstanceIdStartsWithи EntityQuery.IncludeDeleted заменяются EntityQuery.IncludeTransient.
  • Изменение подписи CleanEntityStorageAsync: принимает CleanEntityStorageRequest объект с свойствами RemoveEmptyEntities вместо ReleaseOrphanedLocks логических параметров.
  • Новые API в изолированной рабочей роли: DurableTaskClient.GetOrchestrationHistoryAsync и TaskOrchestrationContext.GetFunctionContext() метод расширения не имеет эквивалентного процесса.