public static Task ForwardCurrentMessageTo(IIncomingContext context, string destination) { var messageBeingProcessed = context.Extensions.Get <IncomingMessage>(); var outgoingMessage = new OutgoingMessage( messageBeingProcessed.MessageId, messageBeingProcessed.Headers, messageBeingProcessed.Body); var routingContext = new RoutingContext(outgoingMessage, new UnicastRoutingStrategy(destination), context); return(routingContext.InvokePipeline <IRoutingContext>()); }
void AssignResultIfPossible(IncomingMessage incomingMessage, IIncomingContext context) { if (!IsControlMessage(incomingMessage)) { return; } var result = context.TryRemoveResponseStateBasedOnCorrelationId(incomingMessage, requestResponseStateLookup); if (!result.HasValue) { return; } var responseType = result.Value.TaskCompletionSource.ResponseType; var errorCode = incomingMessage.Headers[Headers.ReturnMessageErrorCodeHeader]; result.Value.TaskCompletionSource.TrySetResult(errorCode.ConvertFromReturnCode(responseType)); }
public static RequestResponseStateLookup.State?TryRemoveResponseStateBasedOnCorrelationId(this IIncomingContext context, IncomingMessage message, RequestResponseStateLookup lookup) { var correlationId = context.GetCorrelationId(); if (correlationId == null) { return(null); } string version; var checkMessageIntent = true; if (message.Headers.TryGetValue(Headers.NServiceBusVersion, out version)) { Version parsedVersion; if (Version.TryParse(version, out parsedVersion)) { if (parsedVersion < minimumVersionThatSupportMessageIntent_Reply) { checkMessageIntent = false; } } } var messageIntentEnum = message.GetMessageIntent(); if (checkMessageIntent && messageIntentEnum != MessageIntentEnum.Reply) { return(null); } RequestResponseStateLookup.State state; return(lookup.TryRemove(correlationId, out state) ? (RequestResponseStateLookup.State?)state : null); }