你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Durable Functions:进程内到独立的辅助角色 API 映射

此参考提供了进程内 SDK (2.x) SDK 与用于Durable Functions的独立辅助角色 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.PurgeInstanceAsyncPurgeAllInstancesAsync
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 Workaround
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync 无等效项
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) GetInstanceAsync在循环或GetAllInstancesAsync查询筛选器中使用
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) PurgeInstanceAsync在循环或PurgeAllInstancesAsync筛选器中使用
跨任务中心重载(RaiseEventAsyncReadEntityStateAsyncSignalEntityAsync具有connectionNametaskHubName/) 仅支持同一任务中心操作

实体客户端 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.CallEntityAsyncEntities.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 命名空间) DurableHttpRequestMicrosoft.Azure.Functions.Worker.Extensions.DurableTask.Http 命名空间)
DurableHttpResponse (WebJobs 命名空间) DurableHttpResponseMicrosoft.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。 实例 ID 通过 StartOrchestrationOptions.InstanceId 而不是字符串参数进行设置。
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync。 已删除构造函数参数;请改用标准 DI。
IDurableEntityContext.BatchSize Removed
IDurableEntityContext.BatchPosition Removed

行为变更

在测试迁移的应用之前,请查看这些中断性行为更改。

序列化默认值已更改

默认序列化程序已从 /> 更改为 。 有关配置选项,请参阅 Durable Functions 中的序列化和持久性。

警告

ContinueAsNew 默认更改preserveUnprocessedEvents 参数默认值从 false (2.x) 更改为 true (独立)。 如果业务流程使用 ContinueAsNew 并依赖于被丢弃的未处理事件,请显式传递 preserveUnprocessedEvents: false

注释

RestartAsync 默认更改restartWithNewInstanceId 参数默认值从 true (2.x) 更改为 false (独立)。 如果代码调用 RestartAsync 并依赖于正在生成的新实例 ID,请显式传递 restartWithNewInstanceId: true

其他行为更改

  • 实体代理移除CreateEntityProxy<T> 和类型化SignalEntityAsync<TEntityInterface>(Action<T>) 委托重载在隔离工作器中不可用。 调用 Entities.CallEntityAsyncEntities.SignalEntityAsync 直接调用字符串形式的操作名称,而不是使用类型化代理接口。
  • WaitForCompletionOrCreateCheckStatusResponseAsynctimeout 参数已删除。 请使用CancellationToken并设置取消超时。
  • 已删除跨任务中心操作:接受 taskHubName 的进程内重载和 connectionName 参数在独立辅助角色中不可用。 仅支持相同任务中心的操作。
  • 按 ID 删除的批处理操作:进程 GetStatusAsync(IEnumerable<string>) 内和 PurgeInstanceHistoryAsync(IEnumerable<string>) 重载不可用。 GetAllInstancesAsyncOrchestrationQuery筛选器一起使用,或单独调用GetInstanceAsync/PurgeInstanceAsync
  • 协调历史记录已移动DurableOrchestrationStatus.History (嵌入的JArray)不再是状态对象的一部分。 使用单独的 DurableTaskClient.GetOrchestrationHistoryAsync API。
  • 删除了实体 DispatchAsync 构造函数参数:实体类通过标准依赖项注入激活。 在Program.cs中注册您的实体的依赖项。
  • 实体查询筛选器更改EntityQuery.EntityNameEntityQuery.InstanceIdStartsWith 替换,EntityQuery.IncludeDeletedEntityQuery.IncludeTransient 替换。
  • CleanEntityStorageAsync 签名更改:采用 CleanEntityStorageRequest 具有 RemoveEmptyEntities 属性的对象和 ReleaseOrphanedLocks 属性,而不是布尔参数。
  • 独立辅助角色中的新 APIDurableTaskClient.GetOrchestrationHistoryAsync 扩展 TaskOrchestrationContext.GetFunctionContext() 方法没有进程内等效的 API。