示例#1
0
        static void TransportTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            if (!ConfigureClaimFlow.Flow)
            {
                return;
            }
            if (!e.Message.Headers.ContainsKey(SecurityTokenKey))
            {
                return;
            }

            var serializedToken = e.Message.Headers[SecurityTokenKey];
            var certificate     = ExtractCertificate(serializedToken);
            var handler         = new Saml2SecurityTokenHandler(new SamlSecurityTokenRequirement());
            var tokens          = new List <SecurityToken> {
                new X509SecurityToken(certificate)
            };
            var resolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(tokens.AsReadOnly(), false);

            handler.Configuration = new SecurityTokenHandlerConfiguration
            {
                IssuerTokenResolver  = resolver,
                IssuerNameRegistry   = new InternalIssuerNameRegistry(),
                CertificateValidator = X509CertificateValidator.None
            };
            using (var reader = XmlReader.Create(new StringReader(serializedToken)))
            {
                var bootstrapToken = handler.ReadToken(reader);
                handler.Configuration.AudienceRestriction.AudienceMode = AudienceUriMode.Never;
                handler.Configuration.MaxClockSkew = TimeSpan.MaxValue;
                var collection = handler.ValidateToken(bootstrapToken);
                Thread.CurrentPrincipal = new ClaimsPrincipal(collection);
            }
        }
示例#2
0
 /// <summary>
 /// Handles the <see cref="ITransport.TransportMessageReceived"/> event from the <see cref="ITransport"/> used
 /// for the bus.
 /// </summary>
 /// <param name="sender">The sender of the event.</param>
 /// <param name="e">The arguments for the event.</param>
 /// <remarks>
 /// When the transport passes up the <see cref="TransportMessage"/> its received,
 /// the bus checks for initialization,
 /// sets the message as that which is currently being handled for the current thread
 /// and, depending on <see cref="DisableMessageHandling"/>, attempts to handle the message.
 /// </remarks>
 private void TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     using (var child = Builder.CreateChildBuilder())
     {
         HandleTransportMessage(child, e.Message);
     }
 }
示例#3
0
        private void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            if (_messageCreator == null)
            {
                return;
            }


            var messages = e.Message.Body.OfType <TMessage>();

            if (messages.Count() == 0)
            {
                return;
            }

            for (int i = 0; i < messages.Count(); i++)
            {
                var message = messages.ToArray()[i];

                if (!_canBeHandled(message))
                {
                    continue;
                }

                if (e.Message.ReturnAddress == _transport.Address)
                {
                    _transport.HandleLocalMessage(e.Message.Headers, MessageCreator(e, message));
                }
                else
                {
                    _transport.HandleMessageFromTp(e.Message.Headers, MessageCreator(e, message));
                }
            }
        }
示例#4
0
 void HandleMessageReceived(object sender, TransportMessageReceivedEventArgs e, ISatellite satellite)
 {
     if (!satellite.Handle(e.Message))
     {
         ((ITransport)sender).AbortHandlingCurrentMessage();
     }
 }
示例#5
0
        void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var messageToDispatch = e.Message;

            var destinationSites = GetDestinationSitesFor(messageToDispatch);

            //if there is more than 1 destination we break it up into multiple messages
            if (destinationSites.Count() > 1)
            {
                foreach (var destinationSite in destinationSites)
                {
                    CloneAndSendLocal(messageToDispatch, destinationSite);
                }

                return;
            }

            var destination = destinationSites.FirstOrDefault();

            if (destination == null)
            {
                throw new InvalidOperationException("No destination found for message");
            }


            SendToSite(messageToDispatch, destination);
        }
示例#6
0
        void InternalTransportTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            if (UnicastBus.HandledSubscriptionMessage(e.Message, Subscribers, null))
            {
                e.Message.ReplyToAddress = ExternalAddress;
                ExternalMessageSender.Send(e.Message, RemoteServer);

                Logger.Debug("Received subscription message.");
                return;
            }

            var data = new ProxyData
            {
                Id            = GenerateId(),
                ClientAddress = e.Message.ReplyToAddress,
                CorrelationId = e.Message.IdForCorrelation
            };

            Storage.Save(data);

            Logger.Debug("Forwarding request to " + RemoteServer + ".");

            e.Message.IdForCorrelation = data.Id;
            e.Message.ReplyToAddress   = ExternalAddress;

            ExternalMessageSender.Send(e.Message, RemoteServer);
        }
示例#7
0
        void AuditMessageQueueTransport_TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var message = e.Message;

            // Get the xml content of the message in the audit Q that's being stored.
            var doc = new XmlDocument();

            doc.Load(new MemoryStream(message.Body));
            var messageBodyXml = doc.InnerXml;

            // Get the header list as a key value dictionary...
            Dictionary <string, string> headerDictionary = message.Headers.ToDictionary(k => k.Key, v => v.Value);

            var    enclosedMessageType = headerDictionary["NServiceBus.EnclosedMessageTypes"];
            string messageType         = enclosedMessageType;

            if (!String.IsNullOrWhiteSpace(enclosedMessageType))
            {
                messageType = enclosedMessageType.Split(new char[] { ',' }, StringSplitOptions.None)[0];
            }

            AuditMessage messageToStore = new AuditMessage
            {
                MessageId         = message.Id,
                OriginalMessageId = message.GetOriginalId(),
                Body         = messageBodyXml,
                Headers      = headerDictionary,
                MessageType  = messageType,
                ReceivedTime = DateTime.ParseExact(headerDictionary["NServiceBus.TimeSent"], "yyyy-MM-dd HH:mm:ss:ffffff Z", System.Globalization.CultureInfo.InvariantCulture)
            };

            // Save the message
            Console.WriteLine("Saving {0}", messageType);
            Persister.Persist(messageToStore);
        }
 void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     //dispatch request will arrive at the same input so we need to make sure to call the correct handler
     if (e.Message.Headers.ContainsKey(TimeoutDispatcher.TimeoutIdToDispatchHeader))
         Builder.Build<TimeoutDispatchHandler>().Handle(e.Message);
     else
         Builder.Build<TimeoutTransportMessageHandler>().Handle(e.Message);
 }
示例#9
0
        void AuditMessageQueueTransport_TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var message = e.Message;

            var messageBodyXml = System.Text.Encoding.UTF8.GetString(message.Body);

            // Save the message
            Console.WriteLine("Saving {0}", messageBodyXml);
        }
示例#10
0
 static void Transport_TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     if (ConfigureImpersonation.Impersonate)
     {
         if (e.Message.Headers.ContainsKey(WindowsIdentityName))
         {
             Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(e.Message.Headers[WindowsIdentityName]), new string[0]);
         }
     }
 }
示例#11
0
        private void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var         transportMessage = e.Message;
            var         timeoutId        = transportMessage.Headers["Timeout.Id"];
            TimeoutData timeoutData;

            if (TimeoutsPersister.TryRemove(timeoutId, out timeoutData))
            {
                MessageSender.Send(timeoutData.ToTransportMessage(), timeoutData.Destination);
            }
        }
		private void OnMessageReceived(object sender, TransportMessageReceivedEventArgs args)
		{
			EventHandler handler = (s, e) =>
			{
				var observers = this.TransportMessageReceived;
				if (observers != null)
					observers(this, args);
			};

			this.OnTransportEvent(handler, this.MasterSink.Failure);
		}
示例#13
0
        private ISagaMessage[] MessageCreator(TransportMessageReceivedEventArgs e, TMessage message)
        {
            var headerValue = GetHeaderValue(e.Message, BusExtensions.SAGAID_KEY);
            var sagaId      = headerValue == null ? Guid.Empty : new Guid(headerValue.Value);
            var result      = _messageCreator(message);

            foreach (var sagaMessage in result)
            {
                sagaMessage.SagaId = sagaId;
            }
            return(result);
        }
示例#14
0
 void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     //dispatch request will arrive at the same input so we need to make sure to call the correct handler
     if (e.Message.Headers.ContainsKey(TimeoutDispatcher.TimeoutIdToDispatchHeader))
     {
         Builder.Build <TimeoutDispatchHandler>().Handle(e.Message);
     }
     else
     {
         Builder.Build <TimeoutTransportMessageHandler>().Handle(e.Message);
     }
 }
示例#15
0
 void HandleMessageReceived(object sender, TransportMessageReceivedEventArgs e, ISatellite satellite)
 {
     try
     {
         satellite.Handle(e.Message);
     }
     catch (Exception ex)
     {
         Logger.ErrorFormat("{0} could not handle message. Exception: {1}", satellite.GetType().Name, ex.Message);
         throw;
     }
 }
示例#16
0
 void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     //dispatch request will arrive at the same input so we need to make sure to call the correct handler
     if (e.Message.Headers.ContainsKey(TimeoutIdToDispatchHeader))
     {
         HandleBackwardsCompatibility(e.Message);
     }
     else
     {
         Handle(e.Message);
     }
 }
示例#17
0
        /// <summary>
        /// Handles reciept of a message on the bus to distribute for.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <remarks>
        /// This method checks whether a worker is available to handle the message and
        /// forwards it if one is found.
        /// </remarks>
        private void messageBusTransport_TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var destination = WorkerManager.PopAvailableWorker();

            if (destination == null)
            {
                Rollback();
            }
            else
            {
                logger.Debug("Sending message to: " + destination);
                MessageSender.Send(e.Message, destination);
            }
        }
示例#18
0
        void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var transportMessage = e.Message;

            //send first so that we get the new id that we can use for retries
            MessageSender.Send(transportMessage, errorLogAddress);

            var message = new ProcessFaultMessage
            {
                FaultEnvelopeId = transportMessage.Id,
                Headers         = transportMessage.Headers,
                Body            = Encoding.UTF8.GetString(transportMessage.Body)//wil only work for text serialization
            };

            BackendUploader.Upload(message);
        }
示例#19
0
        private void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            dynamic response = new ExpandoObject();

            XmlMessageSerializer serializer = new XmlMessageSerializer(new MessageMapper());
            var message = serializer.Deserialize(new MemoryStream(e.Message.Body)).First();

            response.Endpoint = bus.InputAddress.Queue;
            response.Time     = DateTime.UtcNow;
            response.type     = message.GetType().ToString();
            response.body     = message;
            response.headers  = e.Message.Headers;


            _monitor.Invoke("MessageReceived", response);
        }
示例#20
0
        void ExternalTransportTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            if (e.Message.MessageIntent == MessageIntentEnum.Publish)
            {
                string val = null;
                foreach (var header in e.Message.Headers)
                {
                    if (header.Key == UnicastBus.EnclosedMessageTypes)
                    {
                        val = header.Value;
                    }
                }

                var types = UnicastBus.DeserializeEnclosedMessageTypes(val);

                var subs = Subscribers.GetSubscriberAddressesForMessage(types.Select(s => new MessageType(s)));

                Logger.Debug("Received notification from " + remoteServer + ".");

                foreach (var s in subs)
                {
                    InternalMessageSender.Send(e.Message, s);
                }
            }
            else
            {
                ProxyData data = null;

                if (e.Message.CorrelationId != null)
                {
                    data = Storage.GetAndRemove(e.Message.CorrelationId);
                }

                if (data == null)
                {
                    return;
                }

                e.Message.CorrelationId = data.CorrelationId;

                Logger.Debug("Received response from " + remoteServer + ".");

                InternalMessageSender.Send(e.Message, data.ClientAddress);
            }
        }
示例#21
0
        void ExternalTransportTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            if (e.Message.MessageIntent == MessageIntentEnum.Publish)
            {
                if (!e.Message.Headers.ContainsKey(EnclosedMessageTypesMutator.EnclosedMessageTypes))
                {
                    throw new InvalidOperationException("Enclosed message type header was not found in message");
                }


                var types = e.Message.Headers[EnclosedMessageTypesMutator.EnclosedMessageTypes].Split(';');

                var subs = Subscribers.GetSubscriberAddressesForMessage(types.Select(s => new MessageType(s)));

                Logger.Debug("Received notification from " + RemoteServer + ".");

                foreach (var s in subs)
                {
                    InternalMessageSender.Send(e.Message, s);
                }
            }
            else
            {
                ProxyData data = null;

                if (e.Message.CorrelationId != null)
                {
                    data = Storage.GetAndRemove(e.Message.CorrelationId);
                }

                if (data == null)
                {
                    return;
                }

                e.Message.CorrelationId = data.CorrelationId;

                Logger.Debug("Received response from " + RemoteServer + ".");

                InternalMessageSender.Send(e.Message, data.ClientAddress);
            }
        }
示例#22
0
        void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var transportMessage = e.Message;
            var message          = new ProcessAuditMessage
            {
                MessageId             = transportMessage.IdForCorrelation,
                Headers               = transportMessage.Headers,
                AdditionalInformation = new Dictionary <string, string>()
            };

            message.AdditionalInformation["MessageIntent"] = transportMessage.MessageIntent.ToString();
            message.AdditionalInformation["CorrelationId"] = transportMessage.CorrelationId;

            if (includeMessageBody)
            {
                message.Body = transportMessage.Body;
            }

            BackendUploader.Upload(message);
        }
示例#23
0
        static void Transport_TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            if (!ConfigureImpersonation.Impersonate)
            {
                return;
            }

            if (!e.Message.Headers.ContainsKey(Headers.WindowsIdentityName))
            {
                return;
            }

            var name = e.Message.Headers[Headers.WindowsIdentityName];

            if (name == null)
            {
                return;
            }

            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(name), new string[0]);
        }
        void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var messageToDispatch = e.Message;

            var destinationSites = routeMessages.GetDestinationSitesFor(messageToDispatch);

            //if there is more than 1 destination we break it up into multiple messages
            if (destinationSites.Count() > 1)
            {
                foreach (var destinationSite in destinationSites)
                    CloneAndSendLocal(messageToDispatch, destinationSite);

                return;
            }

            var destination = destinationSites.FirstOrDefault();

            if (destination == null)
                throw new InvalidOperationException("No destination found for message");

            SendToSite(messageToDispatch, destination);
        }
示例#25
0
        private void Transport_TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            this.OutgoingHeaders.Clear();
            _messageBeingHandled = e.Message;
            Logger.Debug("Received transport message with ID " + e.Message.Id + " from sender " + e.Message.ReturnAddress);
            OnMessageReceived((ITransport)sender);
            var sw = Stopwatch.StartNew();

            try
            {
                if (e.Message.MessageIntent == MessageIntentEnum.Send)
                {
                    using (var childServiceLocator = this.messageDispatcher.ServiceLocator.GetChildServiceLocator())
                    {
                        childServiceLocator.RegisterComponent <IMessageBus>(this);
                        this.messageDispatcher.DispatchMessages(childServiceLocator, e.Message.Body, CurrentMessageContext);
                    }
                }
                sw.Stop();
                OnMessageHandled((ITransport)sender, e.Message, sw.Elapsed.TotalMilliseconds, sw.ElapsedTicks);
            }
            catch (Exception ex)
            {
                var orignalException = ex;
                if (orignalException is TargetInvocationException)
                {
                    orignalException = ex.InnerException;
                }
                throw new TransportMessageHandlingFailedException(orignalException);
            }
            finally
            {
                sw.Stop();
            }
            Logger.Debug("Finished handling message.");
        }
示例#26
0
 static void TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     throw new TransportMessageHandlingFailedException(new ApplicationException("A user exception"));
 }
示例#27
0
 void TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     PipelineFactory.InvokeReceivePhysicalMessagePipeline();
 }
示例#28
0
 void HandleMessageReceived(object sender, TransportMessageReceivedEventArgs e, ISatellite satellite)
 {
     if (!satellite.Handle(e.Message))
     {
         ((ITransport) sender).AbortHandlingCurrentMessage();
     }
 }
示例#29
0
        private void HandleTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            counter.RawValue = Convert.ToInt32((DateTime.Now - e.Message.TimeSent).TotalSeconds);

            timeOfLastCounter = DateTime.Now;
        }
 static void TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     throw new TransportMessageHandlingFailedException(new ApplicationException( "A user exception"));
 }
 void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     //dispatch request will arrive at the same input so we need to make sure to call the correct handler
     if (e.Message.Headers.ContainsKey(TimeoutIdToDispatchHeader))
         HandleBackwardsCompatibility(e.Message);
     else
         Handle(e.Message);
 }
        private void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var transportMessage = e.Message;
            var timeoutId = transportMessage.Headers["Timeout.Id"];
            TimeoutData timeoutData;

            if (TimeoutsPersister.TryRemove(timeoutId, out timeoutData))
            {
                MessageSender.Send(timeoutData.ToTransportMessage(), timeoutData.Destination);
            }
        }
示例#33
0
        void TransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
        {
            var message = e.Message.Body[0];

            _bus.SendLocal(message);
        }
 void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     Builder.Build<TimeoutTransportMessageHandler>()
         .Handle(e.Message);
 }
示例#35
0
 void OnTransportMessageReceived(object sender, TransportMessageReceivedEventArgs e)
 {
     Builder.Build <TimeoutTransportMessageHandler>()
     .Handle(e.Message);
 }