Сериализация ввода в устойчивой функции с помощью OrchestratorC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Сериализация ввода в устойчивой функции с помощью Orchestrator

Сообщение Anonymous »

Используя .NET 8 и функции Azure в изолированном режиме, у меня есть функция EventGridTrigger, которая запускает оркестратор, предоставляя типизированные входные данные в качестве параметра. Тип параметра является частью следующей иерархии классов:

Код: Выделить всё

[JsonDerivedType(typeof(IntegrationEventBase), typeDiscriminator: "IntegrationEventBase")]
[JsonDerivedType(typeof(WorkItemIntegrationEventBase), typeDiscriminator: "WorkItemIntegrationEventBase")]
public class IntegrationEventBase
{
public string? Traceparent { get; set; }
}

[JsonDerivedType(typeof(WorkItemCreatedIntegrationEvent), typeDiscriminator: "WorkItemCreatedIntegrationEvent")]
[JsonDerivedType(typeof(WorkItemProgressedIntegrationEvent), typeDiscriminator: "WorkItemProgressedIntegrationEvent")]
public class WorkItemIntegrationEventBase : IntegrationEventBase
{
public string? WorkItemId { get; set; }

public ushort? Quantity { get; set; }
}

public class WorkItemCreatedIntegrationEvent : WorkItemIntegrationEventBase
{
}

public class WorkItemProgressedIntegrationEvent : WorkItemIntegrationEventBase
{
public WorkItemStatus Status { get; set; }
}
Функция EventGridTrigger
Это просто десериализация события, полученного из службы «Сетка событий», и передача его в качестве входных данных оркестратора.

Код: Выделить всё

[Function("WorkItemProgressedIntegrationEventHandler")]
public async Task WorkItemProgressedIntegrationEventHandler([EventGridTrigger] EventGridEvent eventGridEvent,
[DurableClient] DurableTaskClient client,
FunctionContext executionContex)
{
var @event = _serializer.Deserialize(eventGridEvent.Data.ToString());

await client.ScheduleNewOrchestrationInstanceAsync(
Constants.WORKFLOW_ORCHESTRATOR, @event);
}
Оркестратор
Оркестратор получает WorkItemIntegrationEventBase, а затем вызывает объект одним из двух разных способов в зависимости от фактического внутренний тип события (полиморфизм).

Код: Выделить всё

[Function("Orchestrator")]
public static async Task RunOrchestrator(
[OrchestrationTrigger] TaskOrchestrationContext context, WorkItemIntegrationEventBase @event)
{
var entityId = BuildEntityIds(@event);

if (@event is WorkItemCreatedIntegrationEvent createdEvent)
await context.Entities.SignalEntityAsync(workflowEntityId, nameof(IDurableWorkflow.EnqueueWork),
WorkItemInput.FromWorkItemIntegrationEvent(createdEvent));
else if (@event is WorkItemProgressedIntegrationEvent progressedEvent)
await context.Entities.SignalEntityAsync(workflowEntityId, nameof(IDurableWorkflow.ProgressWork),
WorkItemInput.FromWorkItemIntegrationEvent(progressedEvent));
}
Проблема!: Я не могу заставить @event в оркестраторе десериализоваться с использованием информации о типе, который использовался в триггер события, означающий, что обе вышеуказанные проверки всегда ложны.
Я попробовал почти все, что здесь указано, но безуспешно, я, должно быть, что-то упускаю.

Подробнее здесь: https://stackoverflow.com/questions/783 ... chestrator
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как получить текущий объект в изолированной модели устойчивой функции Azure
    Anonymous » » в форуме C#
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Использование ConcurrentQueue в устойчивой функции Azure с взаимодействием с Dataverse
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Использование ConcurrentQueue в устойчивой функции Azure с взаимодействием с Dataverse
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как получить строку подключения в устойчивой функции Azure
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как получить строку подключения в устойчивой функции Azure
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»