/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Middleware/GenerateFaultFilter.cs
61 строка
2 KB
Chris Patterson
Fixed #6045 - ReceiveFault called in places it shouldn't be called (should be Dispatcher only).
23 июл 2025, 17:34
23 июл 2025, 17:34
09ca425
Код
Авторство
О чём код?
namespace MassTransit.Middleware { using System; using System.Linq; using System.Threading.Tasks; using Events; using Metadata; /// <summary> /// Generates and publishes a <see cref="Fault" /> event for the exception /// </summary> public class GenerateFaultFilter : IFilter<ExceptionReceiveContext> { public void Probe(ProbeContext context) { context.CreateFilterScope("generateFault"); } public async Task Send(ExceptionReceiveContext context, IPipe<ExceptionReceiveContext> next) { if (!context.IsFaulted) { await GenerateFault(context).ConfigureAwait(false); await context.NotifyFaulted(context.Exception).ConfigureAwait(false); } await next.Send(context).ConfigureAwait(false); } static async Task GenerateFault(ExceptionReceiveContext context) { Guid? messageId; Guid? requestId; string[] messageTypes = null; if (context.TryGetPayload(out ConsumeContext consumeContext)) { messageId = consumeContext.MessageId; requestId = consumeContext.RequestId; messageTypes = consumeContext.SupportedMessageTypes.ToArray(); } else { messageId = context.GetMessageId(); requestId = context.GetRequestId(); } if (context.PublishFaults || consumeContext?.FaultAddress != null || consumeContext?.ResponseAddress != null) { ReceiveFault fault = new ReceiveFaultEvent(HostMetadataCache.Host, context.Exception, context.ContentType?.MediaType, messageId, messageTypes); var faultEndpoint = await context.GetReceiveFaultEndpoint(consumeContext, requestId).ConfigureAwait(false); await faultEndpoint.Send(fault).ConfigureAwait(false); } } } }