diff --git a/src/Wolverine/Runtime/Routing/MessageRoute.cs b/src/Wolverine/Runtime/Routing/MessageRoute.cs index 29f2c171f..e13aa9d32 100644 --- a/src/Wolverine/Runtime/Routing/MessageRoute.cs +++ b/src/Wolverine/Runtime/Routing/MessageRoute.cs @@ -27,7 +27,14 @@ public MessageRoute(Type messageType, Endpoint endpoint, IReplyTracker replies) IsLocal = endpoint is LocalQueue; _replyTracker = replies; - Sender = endpoint.Agent ?? throw new ArgumentOutOfRangeException(nameof(endpoint), $"Endpoint {endpoint.Uri} does not have an active sending agent. Message type: {messageType.FullNameInCode()}"); + if (WolverineSystemPart.WithinDescription) + { + Sender = endpoint.Agent; + } + else + { + Sender = endpoint.Agent ?? throw new ArgumentOutOfRangeException(nameof(endpoint), $"Endpoint {endpoint.Uri} does not have an active sending agent. Message type: {messageType.FullNameInCode()}"); + } IsLocal = endpoint is LocalQueue; @@ -35,6 +42,10 @@ public MessageRoute(Type messageType, Endpoint endpoint, IReplyTracker replies) { Serializer = typeof(IntrinsicSerializer<>).CloseAndBuildAs(messageType); } + else if (WolverineSystemPart.WithinDescription) + { + Serializer = endpoint.DefaultSerializer; + } else { Serializer = endpoint.DefaultSerializer ?? throw new ArgumentOutOfRangeException(nameof(endpoint), "No DefaultSerializer on endpoint " + endpoint.Uri + ", Message type: " + messageType.FullNameInCode()); @@ -48,6 +59,8 @@ public MessageRoute(Type messageType, Endpoint endpoint, IReplyTracker replies) _endpoint = endpoint; } + public Uri Uri => _endpoint.Uri; + public Type MessageType { get; } public bool IsLocal { get; } diff --git a/src/Wolverine/Runtime/Routing/MessageRouter.cs b/src/Wolverine/Runtime/Routing/MessageRouter.cs index 66cb3ca13..d95c445ac 100644 --- a/src/Wolverine/Runtime/Routing/MessageRouter.cs +++ b/src/Wolverine/Runtime/Routing/MessageRouter.cs @@ -11,8 +11,10 @@ public MessageRouter(WolverineRuntime runtime, IEnumerable routes Routes = routes.ToArray(); // ReSharper disable once VirtualMemberCallInConstructor - foreach (var route in Routes.OfType().Where(x => x.Sender.Endpoint is LocalQueue)) + foreach (var route in Routes.OfType().Where(x => x.Sender?.Endpoint is LocalQueue)) + { route.Rules.Fill(HandlerRules); + } } public override IMessageRoute[] Routes { get; } diff --git a/src/Wolverine/WolverineSystemPart.cs b/src/Wolverine/WolverineSystemPart.cs index 88291d845..d32746a9e 100644 --- a/src/Wolverine/WolverineSystemPart.cs +++ b/src/Wolverine/WolverineSystemPart.cs @@ -14,6 +14,8 @@ namespace Wolverine; internal class WolverineSystemPart : SystemPartBase { + public static bool WithinDescription = false; + private readonly WolverineRuntime _runtime; public WolverineSystemPart(IWolverineRuntime runtime) : base("Wolverine", new Uri("wolverine://" + runtime.Options.ServiceName)) @@ -23,6 +25,7 @@ internal class WolverineSystemPart : SystemPartBase public override async Task WriteToConsole() { + WithinDescription = true; await _runtime.StartLightweightAsync(); _runtime.Options.WriteToConsole(); @@ -56,8 +59,8 @@ public void WriteMessageSubscriptions() var routes = _runtime.RoutingFor(messageType).Routes; foreach (var route in routes.OfType()) { - table.AddRow(messageType.FullNameInCode(), route.Sender.Destination.ToString(), - route.Serializer.ContentType); + table.AddRow(messageType.FullNameInCode(), route.Uri.ToString(), + route.Serializer?.ContentType ?? "application/json"); } }