private IMessage DoSendAndReceive(IMessage request, IMessageChannel channel) { TemporaryReplyChannel replyChannel = new TemporaryReplyChannel(_receiveTimeout); request = MessageBuilder.FromMessage(request) .SetReplyChannel(replyChannel) .SetErrorChannel(replyChannel) .Build(); if (!DoSend(request, channel)) { return(null); } return(DoReceive(replyChannel)); }
protected override IMessage DoSendAndReceive(IMessageChannel channel, IMessage requestMessage) { if (channel == null) { throw new ArgumentNullException(nameof(channel)); } var originalReplyChannelHeader = requestMessage.Headers.ReplyChannel; var originalErrorChannelHeader = requestMessage.Headers.ErrorChannel; var sendTimeout = GetSendTimeout(requestMessage); var receiveTimeout = GetReceiveTimeout(requestMessage); var tempReplyChannel = new TemporaryReplyChannel(_throwExceptionOnLateReply); requestMessage = MessageBuilder.FromMessage(requestMessage).SetReplyChannel(tempReplyChannel) .SetHeader(_sendTimeoutHeader, null) .SetHeader(_receiveTimeoutHeader, null) .SetErrorChannel(tempReplyChannel).Build(); try { DoSend(channel, requestMessage, sendTimeout); } catch (Exception) { tempReplyChannel.SendFailed = true; throw; } var replyMessage = DoReceive(tempReplyChannel, receiveTimeout); if (replyMessage != null) { replyMessage = MessageBuilder.FromMessage(replyMessage) .SetHeader(MessageHeaders.REPLY_CHANNEL, originalReplyChannelHeader) .SetHeader(MessageHeaders.ERROR_CHANNEL, originalErrorChannelHeader) .Build(); } return(replyMessage); }
protected async Task <IMessage> DoSendAndReceiveInternalAsync(IMessageChannel channel, IMessage requestMessage, CancellationToken cancellationToken = default) { var originalReplyChannelHeader = requestMessage.Headers.ReplyChannel; var originalErrorChannelHeader = requestMessage.Headers.ErrorChannel; var sendTimeout = GetSendTimeout(requestMessage); var receiveTimeout = GetReceiveTimeout(requestMessage); var tempReplyChannel = new TemporaryReplyChannel(_throwExceptionOnLateReply); requestMessage = MessageBuilder.FromMessage(requestMessage).SetReplyChannel(tempReplyChannel) .SetHeader(_sendTimeoutHeader, null) .SetHeader(_receiveTimeoutHeader, null) .SetErrorChannel(tempReplyChannel).Build(); try { await DoSendAsync(channel, requestMessage, sendTimeout, cancellationToken); } catch (Exception) { tempReplyChannel.SendFailed = true; throw; } var replyMessage = await DoReceiveAsync(tempReplyChannel, receiveTimeout, cancellationToken); if (replyMessage != null) { replyMessage = MessageBuilder.FromMessage(replyMessage) .SetHeader(MessageHeaders.REPLY_CHANNEL, originalReplyChannelHeader) .SetHeader(MessageHeaders.ERROR_CHANNEL, originalErrorChannelHeader) .Build(); } return(replyMessage); }