void HandleAck(CallInfo callInfo)
        {
            byte[] outMessage;
            IDictionary <string, string> outHeaders;

            if (!persister.AckMessage(callInfo.ClientId, out outMessage, out outHeaders))
            {
                Logger.InfoFormat("Message with id: {0} is already acked, dropping the request", callInfo.ClientId);
                return;
            }

            var msg = new TransportMessage
            {
                Body          = outMessage,
                Headers       = new Dictionary <string, string>(),
                MessageIntent = MessageIntentEnum.Send,
                Recoverable   = true
            };


            if (outHeaders.ContainsKey(GatewayHeaders.IsGatewayMessage))
            {
                HeaderMapper.Map(outHeaders, msg);
            }


            MessageReceived(this, new MessageReceivedOnChannelArgs {
                Message = msg
            });
        }
Beispiel #2
0
        void HandleSubmit(CallInfo callInfo)
        {
            using (var stream = new MemoryStream())
            {
                callInfo.Data.CopyTo(stream);
                stream.Position = 0;

                Hasher.Verify(stream, callInfo.Md5);

                var msg = HeaderMapper.Map(headerManager.Reassemble(callInfo.ClientId, callInfo.Headers));
                msg.Body = new byte[stream.Length];
                stream.Read(msg.Body, 0, msg.Body.Length);

                if (deduplicator.DeduplicateMessage(callInfo.ClientId, DateTime.UtcNow))
                {
                    MessageReceived(this, new MessageReceivedOnChannelArgs {
                        Message = msg
                    });
                }
                else
                {
                    Logger.InfoFormat("Message with id: {0} is already on the bus, dropping the request", callInfo.ClientId);
                }
            }
        }
Beispiel #3
0
        public void Forward(TransportMessage message, Site targetSite)
        {
            var headers = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase);

            HeaderMapper.Map(message, headers);

            var channelSender = channelFactory.GetSender(targetSite.Channel.Type);

            using (var messagePayload = new MemoryStream(message.Body))
                Transmit(channelSender, targetSite, CallType.Submit, headers, messagePayload);

            TransmittDataBusProperties(channelSender, targetSite, headers);

            Transmit(channelSender, targetSite, CallType.Ack, headers, new MemoryStream());
        }
        void SendToSite(TransportMessage transportMessage, Site targetSite)
        {
            var headers = new NameValueCollection();

            HeaderMapper.Map(transportMessage, headers);

            var channelSender = channelFactory.CreateChannelSender(targetSite.ChannelType);

            channelSender.Send(targetSite.Address, headers, transportMessage.Body);

            notifier.RaiseMessageForwarded(typeof(MsmqMessageReceiver), channelSender.GetType(), transportMessage);

            //todo get audit settings from the audit settings of the host (possibly allowing to override in config)
            //if (!string.IsNullOrEmpty(audit))
            // messageSender.Send(e.Message, audit);
        }
Beispiel #5
0
        public void Forward(TransportMessage message, Site targetSite)
        {
            var headers = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase);

            HeaderMapper.Map(message, headers);

            var channelSender = channelFactory.GetSender(targetSite.Channel.Type);

            //databus properties have to be available at the receiver site
            //before the body of the message is forwarded on the bus
            TransmitDataBusProperties(channelSender, targetSite, headers);

            using (var messagePayload = new MemoryStream(message.Body))
            {
                Transmit(channelSender, targetSite, CallType.SingleCallSubmit, headers, messagePayload);
            }
        }
Beispiel #6
0
        public void Start()
        {
            var templateTransport = Configure.Instance.Builder.Build <TransactionalTransport>();

            transport = new TransactionalTransport
            {
                //todo grab the receiver from the main bus and clone
                MessageReceiver       = new MsmqMessageReceiver(),
                IsTransactional       = true,
                NumberOfWorkerThreads = templateTransport.NumberOfWorkerThreads == 0 ? 1 : templateTransport.NumberOfWorkerThreads,
                MaxRetries            = templateTransport.MaxRetries,
                FailureManager        = templateTransport.FailureManager
            };


            transport.TransportMessageReceived += (s, e) =>
            {
                var transportMessage = e.Message;

                var address = GetRemoteAddress(RemoteAddress, transportMessage);

                //todo - why are we doing this?
                if (!String.IsNullOrEmpty(transportMessage.IdForCorrelation))
                {
                    transportMessage.IdForCorrelation = transportMessage.Id;
                }

                var headers = new NameValueCollection();

                HeaderMapper.Map(transportMessage, headers);

                channelSender.Send(address, headers, transportMessage.Body);

                notifier.RaiseMessageForwarded(ChannelType.Msmq, channelSender.Type, transportMessage);

                //todo get audit settings from the audit settings of the host (possibly allowing to override in config)
                //if (!string.IsNullOrEmpty(audit))
                // messageSender.Send(e.Message, audit);
            };

            transport.Start(InputQueue);
        }
        void HandleAck(CallInfo callInfo)
        {
            byte[] outMessage;
            IDictionary <string, string> outHeaders;

            if (!persister.AckMessage(callInfo.ClientId, out outMessage, out outHeaders))
            {
                Logger.InfoFormat("Message with id: {0} is already acked, dropping the request", callInfo.ClientId);
                return;
            }


            var msg = HeaderMapper.Map(outHeaders);

            msg.Body = outMessage;

            MessageReceived(this, new MessageReceivedOnChannelArgs {
                Message = msg
            });
        }
 public static void Run()
 {
     PageMapper.Run();
     HeaderMapper.Run();
 }