C# Azure Event Grid publicar EventGridTopicEvent.
Tengo un escenario en el que necesito publicar datos de EventGridTopicEvent
y al mismo tiempo necesito almacenar esta información del evento en la Tabla de Almacenamiento de Azure. Me gustaría saber si hay alguna manera de obtener la información (como V/F) si la publicación del evento se realizó correctamente o no (cualquier error). Si se publica correctamente, solo debo guardar los datos en el almacenamiento de la tabla.
Necesito manejar la lógica anterior a través del Controlador de Eventos de C# (mediador). He intentado con TransactionScope
de C#, pero no tiene un mecanismo como Rollback. Si el evento no se publica, deshacer el evento y no almacenar nada en el almacenamiento de la tabla o no hacer una llamada para manejar la transacción de la base de datos.
También he intentado _mediator.Publish(request).IsCompletedSuccessfully
pero siempre devuelve verdadero aunque pase datos de solicitud no válidos.
Fragmento de código:
public async Task<Result<Response<XYZ>>> Handle(EventGridTopicEvent request, CancellationToken cancellationToken)
{
using TransactionScope transactionScope = new TransactionScope();
{
try
{
bool eventPublishStatus = _mediator.Publish(request).IsCompletedSuccessfully;
if (eventPublishStatus)
{
//Insertar los datos de solicitud en el almacenamiento de la tabla
}
}
}
}
davy.ai
Para lograr la lógica deseada en el controlador de eventos de C#, puedes utilizar el siguiente enfoque:
EventGridTopicEvent
utilizando el método_mediator.Publish(request)
.EventGridTopicEvent
, el cual será activado una vez que el evento sea publicado exitosamente.Fragmento de código:
En el código anterior, se registra un controlador de eventos
EventGridTopicEventHandler
para elEventGridTopicEvent
, que será activado una vez que el evento se publique exitosamente. Cuando se llama al métodoEventGridTopicEventMediator.PublishEvent()
, el métodoEventGridTopicEventPublisher.PublishEventGridTopicEvent()
publicará el evento y devolverá un valor booleanoisPublishSuccessful
que indica si el evento se publicó exitosamente o no. Basado en este valor, los datos se pueden almacenar en Azure Storage Table o no. En caso de alguna excepción durante la publicación del evento, el bloque catch registrará la excepción y devolveráisPublishSuccessful
comofalse
.