Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта ссылка обеспечивает комплексное сопоставление между пакетом 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.GetOrchestrationHistoryAsyncAPI. -
Удалены параметры конструктора Entity DispatchAsync: классы сущностей активируются с помощью стандартной внедрения зависимостей. Зарегистрируйте зависимости вашей сущности в
Program.cs. -
Изменения фильтра запросов сущностей:
EntityQuery.EntityNameзаменяютсяEntityQuery.InstanceIdStartsWithиEntityQuery.IncludeDeletedзаменяютсяEntityQuery.IncludeTransient. -
Изменение подписи CleanEntityStorageAsync: принимает
CleanEntityStorageRequestобъект с свойствамиRemoveEmptyEntitiesвместоReleaseOrphanedLocksлогических параметров. -
Новые API в изолированной рабочей роли:
DurableTaskClient.GetOrchestrationHistoryAsyncиTaskOrchestrationContext.GetFunctionContext()метод расширения не имеет эквивалентного процесса.
Связанный контент
- руководство по Migration: Устойчивые функции из процесса в изолированный рабочий
- Сериализация и сохраняемость в Устойчивые функции
- справочник по API пакета SDK для процесса (
Microsoft.Azure.WebJobs.Extensions.DurableTask) - справочник по API пакета SDK Isolated (
Microsoft.DurableTask)