ASP.NET core API 6.0 + MassTransit 8.0.16 + Masstransit.Newtonsoft 8.0.16
I tried to implement request <-> response pattern and add newtonsoft serializer but faced with error after completing request. Not - Request and Response are successful and everything work fine. But finishing request there is an error in logs:
System.ArgumentNullException: Value cannot be null. (Parameter 'source')
at System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.Linq.Enumerable.Select[TSource,TResult](IEnumerable`1 source, Func`2 selector)
at MassTransit.RequestFaultException..ctor(String requestType, Fault fault) in /_/src/MassTransit.Abstractions/Exceptions/RequestFaultException.cs:line 13
at MassTransit.Clients.ClientRequestHandle`1.Fail(Fault message) in /_/src/MassTransit/Clients/ClientRequestHandle.cs:line 221
at MassTransit.Clients.ClientRequestHandle`1.FaultHandler(ConsumeContext`1 context) in /_/src/MassTransit/Clients/ClientRequestHandle.cs:line 214
at MassTransit.Clients.ClientRequestHandle`1.<HandleFault>g__MessageHandler|34_0(ConsumeContext`1 context) in /_/src/MassTransit/Clients/ClientRequestHandle.cs:line 201
at MassTransit.Middleware.HandlerMessageFilter`1.MassTransit.IFilter<MassTransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context, IPipe`1 next) in /_/src/MassTransit/Middleware/HandlerMessageFilter.cs:line 44
at MassTransit.Middleware.HandlerMessageFilter`1.MassTransit.IFilter<MassTransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context, IPipe`1 next) in /_/src/MassTransit/Middleware/HandlerMessageFilter.cs:line 72
at MassTransit.Middleware.KeyFilter`2.Send(TContext context, IPipe`1 next) in /_/src/MassTransit/Middleware/KeyFilter.cs:line 46
at MassTransit.Middleware.TeeFilter`1.<>c__DisplayClass5_0.<<Send>g__SendAsync|1>d.MoveNext() in /_/src/MassTransit/Middleware/TeeFilter.cs:line 40
--- End of stack trace from previous location ---
at MassTransit.Middleware.OutputPipeFilter`2.SendToOutput(IPipe`1 next, TOutput pipeContext) in /_/src/MassTransit/Middleware/OutputPipeFilter.cs:line 76
at MassTransit.Middleware.OutputPipeFilter`2.SendToOutput(IPipe`1 next, TOutput pipeContext) in /_/src/MassTransit/Middleware/OutputPipeFilter.cs:line 108
at MassTransit.Middleware.DynamicFilter`1.<>c__DisplayClass10_0.<<Send>g__SendAsync|0>d.MoveNext() in /_/src/MassTransit/Middleware/DynamicFilter.cs:line 89
--- End of stack trace from previous location ---
at MassTransit.Middleware.DeserializeFilter.Send(ReceiveContext context, IPipe`1 next) in /_/src/MassTransit/Middleware/DeserializeFilter.cs:line 40
at MassTransit.Middleware.RescueFilter`2.MassTransit.IFilter<TContext>.Send(TContext context, IPipe`1 next) in /_/src/MassTransit/Middleware/RescueFilter.cs:line 43
Repository which represent bug
If I remove:
cfg.ClearSerialization();
cfg.UseNewtonsoftRawJsonSerializer();
Everything works perfect but I need serializing for support another projects using rabbit mq and publish / consumer pattern.
I also tried:
cfg.ConfigureNewtonsoftJsonSerializer(s =>
{
s.NullValueHandling = NullValueHandling.Ignore;
return s;
});
Didn't help.
I got an answer on GitHub from the Author of MassTransit - Chris Patterson. Unfortunately, I can't use
cfg.ClearSerialization();
cfg.UseNewtonsoftRawJsonSerializer();
only
cfg.ClearSerialization();
cfg.UseNewtonsoftRawJsonSerializer(RawSerializerOptions.AddTransportHeaders | RawSerializerOptions.CopyHeaders);
with Request/Response Pattern
Ever with publish/consumer pattern, it works perfectly and the benefits were - that contract should follow all self namespace.