private void AddNotUnderstoodHeaders(MessageHeaders headers)
 {
     for (int i = 0; i < _notUnderstoodHeaders.Count; ++i)
     {
         headers.Add(new NotUnderstoodHeader(_notUnderstoodHeaders[i].Name, _notUnderstoodHeaders[i].Namespace));
     }
 }
Esempio n. 2
0
		protected AdwsRequestMsg(string instance)
		{
			this._messageProperties = new MessageProperties();
			this._messageHeaders = new MessageHeaders(this.Version, 7);
			this.Headers.Action = this.Action;
			this.Headers.Add(MessageHeader.CreateHeader("instance", "http://schemas.microsoft.com/2008/1/ActiveDirectory", instance));
		}
 public void AddHeaders(MessageHeaders headers)
 {
     if (headers.MessageVersion.Envelope == EnvelopeVersion.Soap11)
     {
         headers.Add(new WSAddressing10ProblemHeaderQNameHeader(this.invalidHeaderName));
     }
 }
 public static CreateSequenceInfo ReadMessage(MessageVersion messageVersion, ReliableMessagingVersion reliableMessagingVersion, ISecureConversationSession securitySession, Message message, MessageHeaders headers)
 {
     CreateSequenceInfo info;
     if (message.IsEmpty)
     {
         string reason = System.ServiceModel.SR.GetString("NonEmptyWsrmMessageIsEmpty", new object[] { WsrmIndex.GetCreateSequenceActionString(reliableMessagingVersion) });
         Message faultReply = WsrmUtilities.CreateCSRefusedProtocolFault(messageVersion, reliableMessagingVersion, reason);
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(WsrmMessageInfo.CreateInternalFaultException(faultReply, reason, new ProtocolException(reason)));
     }
     using (XmlDictionaryReader reader = message.GetReaderAtBodyContents())
     {
         info = CreateSequence.Create(messageVersion, reliableMessagingVersion, securitySession, reader);
         message.ReadFromBodyContentsToEnd(reader);
     }
     info.SetMessageId(messageVersion, headers);
     info.SetReplyTo(messageVersion, headers);
     if (info.AcksTo.Uri != info.ReplyTo.Uri)
     {
         string str2 = System.ServiceModel.SR.GetString("CSRefusedAcksToMustEqualReplyTo");
         Message message3 = WsrmUtilities.CreateCSRefusedProtocolFault(messageVersion, reliableMessagingVersion, str2);
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(WsrmMessageInfo.CreateInternalFaultException(message3, str2, new ProtocolException(str2)));
     }
     info.to = message.Headers.To;
     if ((info.to == null) && (messageVersion.Addressing == AddressingVersion.WSAddressing10))
     {
         info.to = messageVersion.Addressing.AnonymousUri;
     }
     return info;
 }
        public void ApplySecurityAndWriteHeaders(MessageHeaders headers, XmlDictionaryWriter writer, SecurityIdGenerator securityIdGenerator)
        {
            // There is no way to look through the headers attributes without changing the way
            // Headers.WriterStartHeader / headers.writeHeadercontents writes the header
            // So i'm using a copy that I can change without worries.
            MessageHeaders copyHeaders = new MessageHeaders(headers);

            for (int i = 0; i < headers.Count; i++)
            {
                MessageHeaderInfo header = headers[i];

                // We are not supporting another d:Security header, throw if there is already one in the message
                if (this.IsSecurityElement(header))
                {
                    throw new ArgumentException("The message already contains a d:security header.");
                }

                if (this.ShouldProtectHeader(header))
                {
                    string headerId;
                    bool idInserted;
                    this.GetHeaderId(copyHeaders.GetReaderAtHeader(i), securityIdGenerator, true, out headerId, out idInserted);

                    // Add a reference for this header
                    this.signer.AddReference(headers, i, writer, headerId, idInserted);
                }
                else
                {
                    headers.WriteHeader(i, writer);
                }
            }
        }
Esempio n. 6
0
        public static bool ExtractActivityAndCorrelationId(MessageHeaders headers, out Guid activityId, out Guid correlationId)
        {
            if (headers == null) throw new ArgumentNullException(nameof(headers));

            activityId = Guid.Empty;
            correlationId = Guid.Empty;

            try
            {
                var index = headers.FindHeader("ActivityId", "http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics");
                if (index >= 0)
                {
                    using (var reader = headers.GetReaderAtHeader(index))
                    {
                        correlationId = new Guid(reader.GetAttribute("CorrelationId", null));
                        activityId = reader.ReadElementContentAsGuid();
                        return true;
                    }
                }
            }
            catch
            {
                if (Debugger.IsAttached)
                {
                    throw;
                }
            }

            return false;
        }
Esempio n. 7
0
        /// <summary>
        /// Constructor.
        /// </summary>
        protected AmfMessageBase()
        {
            _properties = new MessageProperties();

            //Make sure that there is no wrapping applied to this message
            _headers = new MessageHeaders(MessageVersion.None);
        }
 private void AddNotUnderstoodHeaders(MessageHeaders headers)
 {
     for (int i = 0; i < this.notUnderstoodHeaders.Count; i++)
     {
         headers.Add(new NotUnderstoodHeader(this.notUnderstoodHeaders[i].Name, this.notUnderstoodHeaders[i].Namespace));
     }
 }
Esempio n. 9
0
 internal LocalByRefMessage(MessageVersion version, string action, int id)
     : base()
 {
     this.headers = new MessageHeaders(version);
     this.headers.Action = action;
     this.data = id;
 }
 public AddressingProperty(MessageHeaders headers)
 {
     this.action = headers.Action;
     this.to = headers.To;
     this.replyTo = headers.ReplyTo;
     this.messageId = headers.MessageId;
 }
 public void ReturnHeaders(MessageHeaders headers)
 {
     if (headers.CanRecycle)
     {
         headers.Recycle(this.HeaderInfoCache);
         this.recycledHeaders = headers;
     }
 }
 protected void SetMessageId(MessageVersion messageVersion, MessageHeaders headers)
 {
     this.messageId = headers.MessageId;
     if (this.messageId == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageHeaderException(System.ServiceModel.SR.GetString("MissingMessageIdOnWsrmRequest", new object[] { this.RequestName }), messageVersion.Addressing.Namespace, "MessageID", false));
     }
 }
Esempio n. 13
0
		public void TestConstructor ()
		{
			MessageHeaders headers = new MessageHeaders (MessageVersion.Soap12WSAddressing10);
			Assert.AreEqual (0, headers.Count);

			headers = new MessageHeaders (MessageVersion.Default);
			Assert.AreEqual (0, headers.Count);
		}
		internal DefaultMessageBuffer (int maxBufferSize, MessageHeaders headers, MessageProperties properties, BodyWriter body, bool isFault)
		{
			this.max_buffer_size = maxBufferSize;
			this.headers = headers;
			this.body = body;
			this.closed = false;
			this.is_fault = isFault;
			this.properties = properties;
		}
        public AddressingProperty(MessageHeaders headers)
        {
            Fx.Assert(null != headers, "");

            this.action = headers.Action;
            this.to = headers.To;
            this.replyTo = headers.ReplyTo;
            this.messageId = headers.MessageId;
        }
        public DelegatingHeader(MessageHeaderInfo info, MessageHeaders originalHeaders)
        {
            Fx.Assert(info != null, "info is required");
            Fx.Assert(originalHeaders != null, "originalHeaders is required");

            this.info = info;
            this.originalHeaders = originalHeaders;
            this.index = -1;
        }
Esempio n. 17
0
 internal ChunkingMessage(MessageVersion version, string action, ChunkingReader reader, Guid messageId)
 {
     this.version = version;
     this.chunkReader = reader;
     this.properties = new MessageProperties();
     this.headers = new MessageHeaders(this.version);
     this.headers.Action = action;
     this.messageId = messageId;
 }
		public override void Close ()
		{
			if (closed) 
				return;
			
			headers = null;
			body = null;
			closed = true;
		}
 public static RequestTotalItemsCountEstimate ReadFrom(MessageHeaders messageHeaders)
 {
    int index = messageHeaders.FindHeader(ElementName, ManagementNamespaces.Namespace);
    if (index < 0)
    {
       return null;
    }         
    MessageHeaderInfo headerInfo = messageHeaders[index];
    return new RequestTotalItemsCountEstimate();
 }
Esempio n. 20
0
 /// <summary>
 /// Gets the data signature in the given message header collection
 /// </summary>
 /// <param name="headers">Message headers</param>
 /// <returns>Data signature or Guid.Empty</returns>
 public static Guid GetDataSignature(MessageHeaders headers)
 {
     Guid dataSignature = Guid.Empty;
     int headerIndex = headers.FindHeader(Header.Name, Header.Namespace);
     if (headerIndex != -1)
     {
         dataSignature = headers.GetHeader<Guid>(headerIndex);
     }
     return dataSignature;
 }
 public static Uri GetHeaderUri(MessageHeaders headers, string name, string ns)
 {
     Uri uri = null;
     string uriString = GetHeaderString(headers, name, ns);
     if (uriString != null)
     {
         uri = new Uri(uriString);
     }
     return uri;
 }
 public HttpStreamMessage(BodyWriter writer)
 {
     if (writer == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("writer");
     }
     this.bodyWriter = writer;
     this.headers = new MessageHeaders(MessageVersion.None, 1);
     this.properties = new MessageProperties();
 }
 public void SerializeWithAllSerializableHeaders()
 {
     IDictionary<string, object> map = new Dictionary<string, object>();
     map.Add("name", "joe");
     map.Add("age", 42);
     MessageHeaders input = new MessageHeaders(map);
     MessageHeaders output = (MessageHeaders) SerializeAndDeserialize(input);
     Assert.That(output.Get("name"), Is.EqualTo("joe"));
     Assert.That(output.Get("age"), Is.EqualTo(42));
 }
 public HttpStreamMessage(MessageHeaders headers, MessageProperties properties, BodyWriter bodyWriter)
 {
     if (bodyWriter == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("bodyWriter");
     }
     this.headers = new MessageHeaders(headers);
     this.properties = new MessageProperties(properties);
     this.bodyWriter = bodyWriter;
 }
Esempio n. 25
0
        /// <summary>
        /// Create a new message with the given payload. The id will be generated by
        /// the default {@link IdGenerator} strategy. The headers will be populated
        /// with the provided header values.
        /// </summary>
        /// <param name="headers">message headers</param>
        /// <param name="payload">the message payload</param>
        public Message(object payload, IDictionary<string, object> headers)
        {
            AssertUtils.ArgumentNotNull(payload, "payload must not be null");

            if(headers == null) {
                headers = new Dictionary<string, object>();
            }

            _headers = new MessageHeaders(headers);
            _payload = payload;
        }
 protected void SetReplyTo(MessageVersion messageVersion, MessageHeaders headers)
 {
     this.replyTo = headers.ReplyTo;
     if ((messageVersion.Addressing == AddressingVersion.WSAddressing10) && (this.replyTo == null))
     {
         this.replyTo = EndpointAddress.AnonymousAddress;
     }
     if (this.replyTo == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageHeaderException(System.ServiceModel.SR.GetString("MissingReplyToOnWsrmRequest", new object[] { this.RequestName }), messageVersion.Addressing.Namespace, "ReplyTo", false));
     }
 }
 public StreamedMessage(XmlDictionaryReader reader, int maxSizeOfHeaders, MessageVersion desiredVersion)
 {
     if (reader.NodeType != XmlNodeType.Element)
     {
         reader.MoveToContent();
     }
     if (desiredVersion.Envelope == EnvelopeVersion.None)
     {
         this.reader = reader;
         this.headerAttributes = XmlAttributeHolder.emptyArray;
         this.headers = new MessageHeaders(desiredVersion);
     }
     else
     {
         this.envelopeAttributes = XmlAttributeHolder.ReadAttributes(reader, ref maxSizeOfHeaders);
         this.envelopePrefix = reader.Prefix;
         EnvelopeVersion envelopeVersion = ReceivedMessage.ReadStartEnvelope(reader);
         if (desiredVersion.Envelope != envelopeVersion)
         {
             Exception innerException = new ArgumentException(System.ServiceModel.SR.GetString("EncoderEnvelopeVersionMismatch", new object[] { envelopeVersion, desiredVersion.Envelope }), "reader");
             throw TraceUtility.ThrowHelperError(new CommunicationException(innerException.Message, innerException), this);
         }
         if (ReceivedMessage.HasHeaderElement(reader, envelopeVersion))
         {
             this.headerPrefix = reader.Prefix;
             this.headerAttributes = XmlAttributeHolder.ReadAttributes(reader, ref maxSizeOfHeaders);
             this.headers = new MessageHeaders(desiredVersion, reader, this.envelopeAttributes, this.headerAttributes, ref maxSizeOfHeaders);
         }
         else
         {
             this.headerAttributes = XmlAttributeHolder.emptyArray;
             this.headers = new MessageHeaders(desiredVersion);
         }
         if (reader.NodeType != XmlNodeType.Element)
         {
             reader.MoveToContent();
         }
         this.bodyPrefix = reader.Prefix;
         ReceivedMessage.VerifyStartBody(reader, envelopeVersion);
         this.bodyAttributes = XmlAttributeHolder.ReadAttributes(reader, ref maxSizeOfHeaders);
         if (base.ReadStartBody(reader))
         {
             this.reader = reader;
         }
         else
         {
             this.quotas = new XmlDictionaryReaderQuotas();
             reader.Quotas.CopyTo(this.quotas);
             reader.Close();
         }
     }
 }
 public override void Close()
 {
     lock (this.ThisLock)
     {
         if (!this.closed)
         {
             this.closed = true;
             this.bodyWriter = null;
             this.headers = null;
             this.properties = null;
         }
     }
 }
Esempio n. 29
0
        public static bool ExtractMessageId(MessageHeaders headers, out Guid messageId)
        {
            if (headers == null) throw new ArgumentNullException(nameof(headers));

            messageId = Guid.Empty;

            if (headers.MessageId != null)
            {
                return headers.MessageId.TryGetGuid(out messageId);
            }

            return false;
        }
 public static ulong GetHeaderULong(MessageHeaders headers, int index)
 {
     ulong maxValue = ulong.MaxValue;
     if (index >= 0)
     {
         using (XmlDictionaryReader reader = headers.GetReaderAtHeader(index))
         {
             maxValue = XmlConvert.ToUInt64(reader.ReadElementString());
         }
         headers.UnderstoodHeaders.Add(headers[index]);
     }
     return maxValue;
 }
Esempio n. 31
0
        protected virtual void OnReadHeaders(MessageHeaders Headers)
        {
            XmlUtility.MarkHeaderAsUnderstood(Headers, "Action", "http://www.w3.org/2005/08/addressing");
            int num = Headers.FindHeader("Action", "http://www.w3.org/2005/08/addressing");
            XmlDictionaryReader readerAtHeader = Headers.GetReaderAtHeader(num);
            string str = readerAtHeader.ReadElementString("Action", "http://www.w3.org/2005/08/addressing");

            if (string.Equals(str, this.SupportedAction, StringComparison.Ordinal))
            {
                num = Headers.FindHeader("objectReferenceProperty", "http://schemas.microsoft.com/2008/1/ActiveDirectory");
                if (num >= 0)
                {
                    readerAtHeader        = Headers.GetReaderAtHeader(num);
                    this._objectReference = readerAtHeader.ReadElementString("objectReferenceProperty", "http://schemas.microsoft.com/2008/1/ActiveDirectory");
                }
                return;
            }
            else
            {
                throw new ADException(StringResources.ADWSXmlParserInvalidActionForMessage);
            }
        }
        /// <summary>
        /// Получить заголовок сообщения из формата RabbitMq.
        /// </summary>
        public MessageHeaders ConvertMessageHeadersFrom(IDictionary <string, object> headers)
        {
            if (headers != null)
            {
                var result = new MessageHeaders();

                foreach (var item in headers)
                {
                    var key   = item.Key;
                    var value = item.Value as byte[];

                    if (key != null)
                    {
                        result[key] = value;
                    }
                }

                return(result);
            }

            return(null);
        }
            void PreProcess(Message message)
            {
                //If the user does not have manual addressing enabled then clear these out
                if (!this.manualAddressing)
                {
                    MessageHeaders headers             = message.Headers;
                    string         addressingNamespace = RoutingUtilities.GetAddressingNamespace(headers.MessageVersion.Addressing);

                    //Go through in reverse to reduce shifting after RemoveAt(i)
                    for (int i = headers.Count - 1; i >= 0; --i)
                    {
                        MessageHeaderInfo header = headers[i];
                        if (string.Equals(header.Namespace, addressingNamespace, StringComparison.Ordinal))
                        {
                            if (!addressingHeadersToFlow.Contains(header.Name))
                            {
                                headers.RemoveAt(i);
                            }
                        }
                    }
                }
            }
        // Token: 0x06000386 RID: 902 RVA: 0x00015F04 File Offset: 0x00014104
        private static bool TryGetRequestVersion(out ExchangeVersion requestVersion)
        {
            requestVersion = ExchangeVersion.Exchange2010;
            bool result;

            try
            {
                MessageHeaders incomingMessageHeaders = OperationContext.Current.IncomingMessageHeaders;
                string         header = incomingMessageHeaders.GetHeader <string>("RequestedServerVersion", "http://schemas.microsoft.com/exchange/2010/Autodiscover");
                AutodiscoverRequestMessage.RemapEquivalentRequestedExchangeVersion(ref header);
                result = EnumValidator <ExchangeVersion> .TryParse(header, EnumParseOptions.Default, out requestVersion);
            }
            catch (MessageHeaderException)
            {
                result = false;
            }
            catch (SerializationException)
            {
                result = false;
            }
            return(result);
        }
        public void TestDebatchByContainerBadMessageRejected()
        {
            var provider = new ServiceCollection().BuildServiceProvider();
            var config   = new ConfigurationBuilder().Build();
            var context  = new GenericApplicationContext(provider, config);

            context.ServiceExpressionResolver = new StandardServiceExpressionResolver();
            var container = new DirectMessageListenerContainer(context, connectionFactory);

            container.SetQueueNames(ROUTE);
            var listener = new EmptyListener();

            container.MessageListener = listener;
            var errorHandler = new TestConditionalRejectingErrorHandler();

            container.ErrorHandler = errorHandler;
            container.Initialize();
            container.Start();
            try
            {
                var template = new RabbitTemplate
                {
                    ConnectionFactory = connectionFactory
                };
                var headers = new MessageHeaders(new Dictionary <string, object>()
                {
                    { RabbitMessageHeaders.SPRING_BATCH_FORMAT, RabbitMessageHeaders.BATCH_FORMAT_LENGTH_HEADER4 }
                });
                var message = Message.Create(Encoding.UTF8.GetBytes("\u0000\u0000\u0000\u0004foo"), headers);
                template.Send(string.Empty, ROUTE, message);
                Thread.Sleep(1000);
                Assert.Equal(0, listener.Count);
                Assert.True(errorHandler.HandleErrorCalled);
            }
            finally
            {
                container.Stop();
            }
        }
Esempio n. 36
0
        public void TestInt2809JavaTypePropertiesFromAmqp()
        {
            var config   = new ConfigurationBuilder().Build();
            var services = new ServiceCollection().BuildServiceProvider();
            var context  = new GenericApplicationContext(services, config);

            var channel = new Mock <RC.IModel>();

            channel.Setup(c => c.IsOpen).Returns(true);
            var connection = new Mock <Messaging.RabbitMQ.Connection.IConnection>();

            connection.Setup(c => c.IsOpen).Returns(true);
            connection.Setup(c => c.CreateChannel(It.IsAny <bool>())).Returns(channel.Object);
            var connectionFactory = new Mock <Messaging.RabbitMQ.Connection.IConnectionFactory>();

            connectionFactory.Setup(f => f.CreateConnection()).Returns(connection.Object);
            var container = new DirectMessageListenerContainer();

            container.ConnectionFactory = connectionFactory.Object;
            var adapter  = new RabbitInboundChannelAdapter(context, container);
            var qchannel = new QueueChannel(context);

            adapter.OutputChannel = qchannel;
            object payload     = new Foo("bar1");
            var    headers     = new MessageHeaders();
            var    amqpMessage = new JsonMessageConverter().ToMessage(payload, headers);
            var    listener    = container.MessageListener as IChannelAwareMessageListener;

            listener.OnMessage(amqpMessage, null);
            var receive = qchannel.Receive(1000);
            var result  = new JsonToObjectTransformer(context).Transform(receive) as IMessage;

            Assert.NotNull(result);
            Assert.Equal(payload, result.Payload);
            var sourceData = result.Headers.Get <IMessage>(IntegrationMessageHeaderAccessor.SOURCE_DATA);

            Assert.Null(sourceData);
        }
Esempio n. 37
0
        /// <inheritdoc />
        /// <summary>
        /// Returns messages in the queue that are pending
        /// </summary>
        /// <param name="cancellationToken">(Optional) A token provided by the caller that can
        /// be used by the caller to request cancellation of the fetch operation</param>
        /// <returns>Returns the set of pending messages in the queue</returns>
        protected override async Task <IEnumerable <QueuedMessage> > GetPendingMessages(CancellationToken cancellationToken = default(CancellationToken))
        {
            var fb     = Builders <QueuedMessageDocument> .Filter;
            var filter = fb.Eq(qm => qm.Queue, (string)QueueName) &
                         fb.Eq(qm => qm.State, QueuedMessageState.Pending);

            var existingMessages = await _queuedMessages.Find(filter).ToListAsync(cancellationToken);

            var queuedMessages = new List <QueuedMessage>();

            foreach (var queuedMessage in existingMessages)
            {
                try
                {
                    var messageHeaders = new MessageHeaders(queuedMessage.Headers);
                    var principal      = await _securityTokenService.NullSafeValidate(messageHeaders.SecurityToken);

                    var message = new Message(messageHeaders, queuedMessage.Content);
                    if (message.IsEncrypted() && _messageEncryptionService != null)
                    {
                        message = await _messageEncryptionService.Decrypt(message);
                    }
                    message = message.WithoutSecurityToken();
                    queuedMessages.Add(new QueuedMessage(message, principal, queuedMessage.Attempts));
                }
                catch (Exception ex)
                {
                    DiagnosticService.Emit(new MongoDBEventBuilder(this, MongoDBEventType.MessageDocumentFormatError)
                    {
                        Detail         = "Error reading previously queued message document ID " + queuedMessage.Id + "; skipping",
                        CollectionName = _queuedMessages.CollectionNamespace.CollectionName,
                        DatabaseName   = _queuedMessages.Database.DatabaseNamespace.DatabaseName,
                        Exception      = ex
                    }.Build());
                }
            }
            return(queuedMessages);
        }
        /// <summary>
        /// 接收请求后事件
        /// </summary>
        /// <param name="request">请求消息</param>
        /// <param name="channel">信道</param>
        /// <param name="instanceContext">WCF实例上下文</param>
        /// <returns></returns>
        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            //如果是身份认证接口,无需认证
            if (OperationContext.Current.EndpointDispatcher.ContractName != "IAuthenticationContract")
            {
                //获取消息头
                MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;

                #region # 验证消息头

                if (!headers.Any(x => x.Name == CommonConstants.WcfAuthHeaderName && x.Namespace == CommonConstants.WcfAuthHeaderNamespace))
                {
                    throw new NullReferenceException("身份认证消息头不存在,请检查程序!");
                }

                #endregion

                //读取消息头中的公钥
                Guid publicKey = headers.GetHeader <Guid>(CommonConstants.WcfAuthHeaderName, CommonConstants.WcfAuthHeaderNamespace);

                //认证
                lock (_Sync)
                {
                    //以公钥为键,查询分布式缓存,如果有值则通过,无值则不通过
                    LoginInfo loginInfo = CacheMediator.Get <LoginInfo>(publicKey.ToString());

                    if (loginInfo == null)
                    {
                        throw new NoPermissionException("身份过期,请重新登录!");
                    }

                    //通过后,重新设置缓存过期时间
                    CacheMediator.Set(publicKey.ToString(), loginInfo, DateTime.Now.AddMinutes(_Timeout));
                }
            }

            return(null);
        }
        /// <summary>
        /// 请求发送前事件
        /// </summary>
        /// <param name="request">请求消息</param>
        /// <param name="channel">信道</param>
        /// <returns></returns>
        public object BeforeSendRequest(ref Message request, IClientChannel channel)
        {
            //WCF客户端获取公钥处理
            MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;

            #region # 验证消息头

            if (!headers.Any(x => x.Name == CommonConstants.WcfAuthHeaderName && x.Namespace == CommonConstants.WcfAuthHeaderNamespace))
            {
                throw new NullReferenceException("身份认证消息头不存在,请检查程序!");
            }

            #endregion

            //读取消息头中的公钥
            Guid publishKey = headers.GetHeader <Guid>(CommonConstants.WcfAuthHeaderName, CommonConstants.WcfAuthHeaderNamespace);

            //添加消息头
            MessageHeader header = MessageHeader.CreateHeader(CommonConstants.WcfAuthHeaderName, CommonConstants.WcfAuthHeaderNamespace, publishKey);
            request.Headers.Add(header);

            return(null);
        }
Esempio n. 40
0
        private static async Task <MessageJournalReadResult> ParseResponseContent(HttpResponseMessage responseMessage)
        {
            var content = await responseMessage.Content.ReadAsStringAsync();

            var model        = JsonConvert.DeserializeObject <JournalGetResponseModel>(content);
            var start        = new VerbatimMessageJournalPosition(model.Start);
            var next         = new VerbatimMessageJournalPosition(model.Next);
            var endOfJournal = model.EndOfJournal;
            var entries      = new List <MessageJournalEntry>();

            foreach (var entryModel in model.Entries)
            {
                var category       = entryModel.Category;
                var position       = new VerbatimMessageJournalPosition(entryModel.Position);
                var timestamp      = entryModel.Timestamp;
                var headers        = new MessageHeaders(entryModel.Data.Headers);
                var messageContent = entryModel.Data.Content;
                var message        = new Message(headers, messageContent);
                var entry          = new MessageJournalEntry(category, position, timestamp, message);
                entries.Add(entry);
            }
            return(new MessageJournalReadResult(start, next, endOfJournal, entries));
        }
Esempio n. 41
0
        public void TestAction()
        {
            Message m = Message.CreateMessage(MessageVersion.Default, "test", 1);

            m.Headers.Add(MessageHeader.CreateHeader("FirstHeader", "ns", "first"));
            Assert.AreEqual("test", m.Headers.Action, "#1");

            MessageHeaders headers = new MessageHeaders(MessageVersion.Default, 1);

            Assert.AreEqual(null, headers.Action, "#2");
            headers.Add(MessageHeader.CreateHeader("Action", "http://www.w3.org/2005/08/addressing", "test"));

            MessageHeaderInfo info = headers [0];

            Assert.AreEqual("Action", info.Name, "#2-1");
            Assert.AreEqual("http://www.w3.org/2005/08/addressing", info.Namespace, "#2-2");
            Assert.AreEqual(false, info.MustUnderstand, "#2-3");
            Assert.AreEqual(String.Empty, info.Actor, "#2-4");

            Assert.AreEqual("test", headers.Action, "#3");
            headers.Clear();
            Assert.AreEqual(null, headers.Action, "#4");
        }
Esempio n. 42
0
        internal void ProcessHeaders(Message msg, Dictionary <QName, int> qnameLookup, Dictionary <string, HeaderBit[]> headerLookup)
        {
            string         key;
            QName          qname;
            MessageHeaders headers = msg.Headers;

            for (int j = 0; j < headers.Count; ++j)
            {
                qname.name = headers[j].Name;
                qname.ns   = headers[j].Namespace;
                if (headers.MessageVersion.Addressing == AddressingVersion.WSAddressing10 &&
                    !headers[j].IsReferenceParameter)
                {
                    continue;
                }
                if (qnameLookup.ContainsKey(qname))
                {
                    _builder.Remove(0, _builder.Length);
                    XmlReader reader = headers.GetReaderAtHeader(j).ReadSubtree();
                    reader.Read();  // Needed after call to ReadSubtree
                    key = GetComparableForm(_builder, reader);

                    if (headerLookup.TryGetValue(key, out HeaderBit[] bits))
Esempio n. 43
0
        internal void ProcessHeaders(Message msg, Dictionary <QName, int> qnameLookup, Dictionary <string, HeaderBit[]> headerLookup)
        {
            MessageHeaders headers = msg.Headers;

            for (int i = 0; i < headers.Count; i++)
            {
                QName name;
                name.name = headers[i].Name;
                name.ns   = headers[i].Namespace;
                if (((headers.MessageVersion.Addressing != AddressingVersion.WSAddressing10) || headers[i].IsReferenceParameter) && qnameLookup.ContainsKey(name))
                {
                    HeaderBit[] bitArray;
                    this.builder.Remove(0, this.builder.Length);
                    XmlReader reader = headers.GetReaderAtHeader(i).ReadSubtree();
                    reader.Read();
                    string comparableForm = GetComparableForm(this.builder, reader);
                    if (headerLookup.TryGetValue(comparableForm, out bitArray))
                    {
                        this.SetBit(bitArray);
                    }
                }
            }
        }
Esempio n. 44
0
 void WriteHeaders(MessageHeaders headers)
 {
     Console.ForegroundColor = ConsoleColor.Red;
     Console.WriteLine("IncomingHeader:");
     Console.ForegroundColor = ConsoleColor.Blue;
     foreach (MessageHeaderInfo h in headers)
     {
         if (!h.Actor.Equals(String.Empty))
         {
             Console.WriteLine("\t" + h.Actor);
         }
         Console.ForegroundColor = ConsoleColor.White;
         Console.WriteLine("\t" + h.Name);
         Console.ForegroundColor = ConsoleColor.Blue;
         Console.WriteLine("\t" + h.Namespace);
         Console.WriteLine("\t" + h.Relay);
         if (h.IsReferenceParameter == true)
         {
             Console.WriteLine("IsReferenceParameter header detected: " + h.ToString());
         }
     }
     Console.ResetColor();
 }
Esempio n. 45
0
        internal override void OnAddHeaders(MessageHeaders messageHeaders)
        {
            if (AddHeaders != null)
            {
                ServiceRemotingMessageHeaders headers = Header <ServiceRemotingMessageHeaders> .Get(messageHeaders);

                AddHeaders(new HeaderAccessor(headers));
                Header <ServiceRemotingMessageHeaders> .Replace(headers, messageHeaders);
            }
            else
            {
                if (Accessor != null)
                {
                    ServiceRemotingMessageHeaders headers = Header <ServiceRemotingMessageHeaders> .Get(messageHeaders);

                    foreach (KeyValuePair <string, byte[]> header in (Accessor as HeaderAccessor).Headers.Headers())
                    {
                        headers.AddHeader(header.Key, header.Value);
                    }
                    Header <ServiceRemotingMessageHeaders> .Replace(headers, messageHeaders);
                }
            }
        }
Esempio n. 46
0
        /// <inheritdoc />
        /// <summary>
        /// Publishes a message to a topic.
        /// </summary>
        /// <param name="message">The message to publish.</param>
        /// <param name="topicName">The name of the topic.</param>
        /// <param name="cancellationToken">A token used by the caller
        /// to indicate if and when the publish operation has been canceled.</param>
        /// <returns>returns a task that completes when the message has
        /// been successfully published to the topic.</returns>
        public async Task PublishMessage(Message message, TopicName topicName, CancellationToken cancellationToken)
        {
            if (_messageJournal != null)
            {
                await _messageJournal.Append(message, MessageJournalCategory.Published, cancellationToken);
            }

            var subscribers = await _subscriptionTrackingService.GetSubscribers(topicName, cancellationToken);

            var transportTasks = new List <Task>();

            foreach (var subscriber in subscribers)
            {
                IEndpointCredentials subscriberCredentials = null;
                if (_endpoints.TryGetEndpointByAddress(subscriber, out var subscriberEndpoint))
                {
                    subscriberCredentials = subscriberEndpoint.Credentials;
                }

                var perEndpointHeaders = new MessageHeaders(message.Headers)
                {
                    MessageId   = MessageId.Generate(),
                    Destination = subscriber
                };

                var addressedMessage = new Message(perEndpointHeaders, message.Content);
                if (addressedMessage.Headers.Synchronous)
                {
                    transportTasks.Add(TransportMessage(addressedMessage, subscriberCredentials, cancellationToken));
                    continue;
                }

                await _messageQueueingService.EnqueueMessage(_outboundQueueName, addressedMessage, null, cancellationToken);
            }

            await Task.WhenAll(transportTasks);
        }
            void FilterHeaders(MessageHeaders headers, HashSet <string> understoodHeadersSet)
            {
                string addressingNamespace = RoutingUtilities.GetAddressingNamespace(headers.MessageVersion.Addressing);

                //Go in reverse to reduce shifting after RemoveAt(i)
                for (int i = headers.Count - 1; i >= 0; --i)
                {
                    MessageHeaderInfo header = headers[i];
                    bool removeHeader        = false;

                    if (string.Equals(header.Namespace, addressingNamespace, StringComparison.Ordinal) &&
                        (addressingHeadersToFlow.Contains(header.Name) || this.manualAddressing))
                    {
                        continue;
                    }

                    if (understoodHeadersSet.Contains(MessageHeaderKey(header)))
                    {
                        // This header was understood at this endpoint, do _not_ flow it
                        removeHeader = true;
                    }
                    else if (ActorIsNextDestination(header, headers.MessageVersion))
                    {
                        //This was a header targeted at the SOAP Intermediary ("actor/next", which is us)
                        //It can explicitly tell us to relay this header when we don't understand it.
                        if (!header.Relay)
                        {
                            removeHeader = true;
                        }
                    }

                    if (removeHeader)
                    {
                        headers.RemoveAt(i);
                    }
                }
            }
Esempio n. 48
0
        private async Task ProcessMessageAsync(
            IMessageSubscription subscription,
            EnvelopedMessage envelopedMessage,
            object payload,
            MessageHeaders headers)
        {
            var publisher = _repliesPublisher?.Invoke(headers.CorrelationId)
                            ?? ProhibitedRepliesMessagePublisher.Instance;

            var handlingContext = new MessageHandlingContext
                                  (
                envelopedMessage.Exchange,
                envelopedMessage.RetryCount,
                envelopedMessage.RoutingKey
                                  );
            var result = await subscription.InvokeHandlerAsync(_serviceProvider, payload, headers, handlingContext, publisher);

            if (result == null)
            {
                throw new InvalidOperationException("Result should be not null");
            }

            switch (result)
            {
            case MessageHandlingResult.SuccessResult _:
            case MessageHandlingResult.NonTransientFailureResult _:
                CurrentMessage.Ack();
                break;

            case MessageHandlingResult.TransientFailureResult tfr:
                _retryManager.ScheduleRetry(CurrentMessage, tfr.RetryAfter ?? _defaultRetryTimeout);
                break;

            default:
                throw new NotSupportedException($"Unexpected message handling result [{result.GetType().Name}].");
            }
        }
Esempio n. 49
0
        /// <summary>
        /// Converts from an integration Message to a NMS Message.
        /// </summary>
        /// <param name="objectToConvert">the object to convert</param>
        /// <param name="session">the Session to use for creating a NMS Message</param>
        /// <returns>the NMS Message</returns>
        /// <throws>NMSException if thrown by NMS API methods </throws>
        /// <throws>MessageConversionException in case of conversion failure </throws>
        public Apache.NMS.IMessage ToMessage(object objectToConvert, ISession session)
        {
            MessageHeaders headers = null;

            Apache.NMS.IMessage nmsMessage = null;
            if (objectToConvert is Spring.Integration.Core.IMessage)
            {
                headers = ((Spring.Integration.Core.IMessage)objectToConvert).Headers;
                if (extractIntegrationMessagePayload)
                {
                    objectToConvert = ((IMessage)objectToConvert).Payload;
                }
            }
            nmsMessage = converter.ToMessage(objectToConvert, session);
            if (headers != null)
            {
                headerMapper.FromHeaders(headers, nmsMessage);
            }
            if (logger.IsDebugEnabled)
            {
                logger.Debug("converted [" + objectToConvert + "] to NMS Message [" + nmsMessage + "]");
            }
            return(nmsMessage);
        }
Esempio n. 50
0
        //This method will try to retrieve a header whose value matches the GUID passed by the client.
        //The return value will notify the client whether the service was able to retrieve the header or not.
        public bool RetrieveHeader(string guid)
        {
            MessageHeaders messageHeaderCollection = OperationContext.Current.IncomingMessageHeaders;
            String         guidHeader = null;

            Console.WriteLine("Trying to check if IncomingMessageHeader collection contains header with value {0}", guid);
            if (messageHeaderCollection.FindHeader(CustomHeader.HeaderName, CustomHeader.HeaderNamespace) != -1)
            {
                guidHeader = messageHeaderCollection.GetHeader <String>(CustomHeader.HeaderName, CustomHeader.HeaderNamespace);
            }
            else
            {
                Console.WriteLine("No header was found");
            }

            if (guidHeader != null)
            {
                Console.WriteLine("Found header with value {0}. Does it match with GUID sent as parameter: {1}", guidHeader, guidHeader.Equals(guid));
            }

            Console.WriteLine();
            //Return true if header is present and equals the guid sent by client as argument
            return(guidHeader != null && guidHeader.Equals(guid));
        }
Esempio n. 51
0
        private ProcessingContext GetProcessingContext(MessageHeaders headers, ConfigData configData)
        {
            // проверка токена бд
            var dbTokenData = dbTokenService.GetDbTokenData() ?? throw new InvalidOperationException("Отсутствует токен базы данных");

            if (headers.DbToken != dbTokenData.DbToken)
            {
                // стоит переделать?
                if (string.Compare(headers.DbToken, dbTokenData.DbToken) > -1)
                {
                    dbTokenService.ReloadToken();
                    dbTokenData = dbTokenService.GetDbTokenData() ?? throw new InvalidOperationException("Отсутствует токен базы данных");
                }

                //lazyResponse.Value.SetDbTokenData(dbTokenData);
            }

            return(new ProcessingContext
            {
                CurrentConfigData = configData,
                CurrentDbTokenData = dbTokenData,
                MessageHeaders = headers,
            });
        }
Esempio n. 52
0
        public void AddReference(
            MessageHeaders headers,
            int i,
            XmlDictionaryWriter writer,
            string headerId,
            bool idInserted)
        {
            HashStream hashStream = this.TakeHashStream();

            writer.StartCanonicalization(hashStream, false, this.InclusivePrefixes);
            headers.WriteStartHeader(i, writer);
            if (idInserted)
            {
                writer.WriteAttributeString(this.discoveryInfo.DiscoveryPrefix, ProtocolStrings.IdAttributeName, this.discoveryInfo.DiscoveryNamespace, headerId);
            }

            headers.WriteHeaderContents(i, writer);
            writer.WriteEndElement();
            writer.EndCanonicalization();
            writer.Flush();

            // Add a pre-digested reference for this header
            this.AddReference(headerId, hashStream.FlushHashAndGetValue());
        }
Esempio n. 53
0
        public static void AddMessageHeader(MessageHeaders headers, HeaderParameter para)
        {
            headers.RemoveAll("CMD", ns);
            headers.RemoveAll("RouterID", ns);
            headers.RemoveAll("Plugin", ns);
            headers.RemoveAll("ReplyIdentify", ns);
            headers.RemoveAll("Token", ns);
            headers.RemoveAll("IsCompressJson", ns);
            headers.RemoveAll("IsEncryptionJson", ns);
            headers.RemoveAll("SerializeType", ns);

            var CMD = System.ServiceModel.Channels.MessageHeader.CreateHeader("CMD", ns, para.cmd);

            headers.Add(CMD);
            var router = System.ServiceModel.Channels.MessageHeader.CreateHeader("RouterID", ns, para.routerid);

            headers.Add(router);
            var plugin = System.ServiceModel.Channels.MessageHeader.CreateHeader("Plugin", ns, para.pluginname);

            headers.Add(plugin);
            var ReplyHN = System.ServiceModel.Channels.MessageHeader.CreateHeader("ReplyIdentify", ns, para.replyidentify);

            headers.Add(ReplyHN);
            var token = System.ServiceModel.Channels.MessageHeader.CreateHeader("Token", ns, para.token);

            headers.Add(token);
            var IsCompressJson = System.ServiceModel.Channels.MessageHeader.CreateHeader("IsCompressJson", ns, Convert.ToString(para.iscompressjson ? 1 : 0));

            headers.Add(IsCompressJson);
            var IsEncryptionJson = System.ServiceModel.Channels.MessageHeader.CreateHeader("IsEncryptionJson", ns, Convert.ToString(para.isencryptionjson ? 1 : 0));

            headers.Add(IsEncryptionJson);
            var SerializeType = System.ServiceModel.Channels.MessageHeader.CreateHeader("SerializeType", ns, Convert.ToString((int)para.serializetype));

            headers.Add(SerializeType);
        }
Esempio n. 54
0
        /// <summary>
        /// Adds the message header.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="name">The name.</param>
        /// <param name="ns">The ns.</param>
        /// <param name="createHeader">The create header.</param>
        protected virtual MessageHeader AddMessageHeader(ref System.ServiceModel.Channels.Message request,
                                                         string name, string ns, Func <MessageHeader> createHeader)
        {
            ModuleProc    PROC   = new ModuleProc(this.DYN_MODULE_NAME, "AddMessageHeader");
            MessageHeader result = null;

            try
            {
                MessageHeaders headers = request.Headers;
                if (headers != null)
                {
                    if (headers.FindHeader(name, ns) == -1)
                    {
                        headers.Add((result = createHeader()));
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Exception(PROC, ex);
            }

            return(result);
        }
Esempio n. 55
0
        public CertificateDto RegisterClient(string address)
        {
            CertificateDto certDto = null;

            if (!String.IsNullOrEmpty(address))
            {
                MessageHeaders headers = OperationContext.Current.RequestContext.RequestMessage.Headers;
                string         subject = null;
                if (headers.FindHeader("UserName", "") > -1)
                {
                    subject = headers.GetHeader <string>(headers.FindHeader("UserName", ""));
                }
                if (subject == null)
                {
                    throw new Exception("Invalid user name");
                }
                //string subject = ServiceSecurityContext.Current.PrimaryIdentity.Name.Replace('\\','_').Trim();
                //string port = address.Split(':')[2].Split('/')[0];
                //subject = subject.Replace('-', '_') + port;
                certDto = CAProxy.GenerateCertificate(subject, address);
            }

            return(certDto);
        }
Esempio n. 56
0
        protected T GetMessageHeaderData <T>(ref System.ServiceModel.Channels.Message message,
                                             OperationContext context,
                                             string headerNamespace, string headerName)
            where T : class
        {
            ModuleProc PROC   = new ModuleProc(this.DYN_MODULE_NAME, "GetMessageHeaderData");
            T          result = default(T);

            try
            {
                if (message != null)
                {
                    if (!headerNamespace.IsEmpty() &&
                        !headerName.IsEmpty())
                    {
                        if (context != null &&
                            context.IncomingMessageHeaders != null)
                        {
                            MessageHeaders headers = context.IncomingMessageHeaders;
                            int            index   = headers.FindHeader(headerName, headerNamespace);
                            if (index != -1)
                            {
                                result = DeserializeDC <T>(headers.GetReaderAtHeader(index));
                                headers.RemoveAt(index);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Exception(PROC, ex);
            }

            return(result);
        }
Esempio n. 57
0
        public void TestFindHeader()
        {
            // <a:Action mU="true">test</a:Action>
            Message m = Message.CreateMessage(MessageVersion.Default, "test", 1);

            Assert.AreEqual(1, m.Headers.Count, "#0");

            // <MyHeader xmlns="bar">1</MyHeader>
            m.Headers.Add(MessageHeader.CreateHeader("MyHeader", "bar", 1));
            // <MyHeader xmlns="baz" role="john">1</MyHeader>
            m.Headers.Add(MessageHeader.CreateHeader("MyHeader", "baz", 1, false, "john"));

            MessageHeaders headers = m.Headers;

            // The first header is at 0
            Assert.AreEqual(0, headers.FindHeader("Action", wsa1), "#1");

            // The return value of FindHeader maps to its places in the headers
            Assert.AreEqual(1, headers.FindHeader("MyHeader", "bar"), "#2");

            // If a header has actor (role) specified, then it must be provided
            Assert.AreEqual(-1, headers.FindHeader("MyHeader", "baz"), "#3");
            Assert.AreEqual(2, headers.FindHeader("MyHeader", "baz", "john"), "#4");
        }
        public void SubscribeShouldCreateQueueHeadersAndRegisterWorker()
        {
            // Given

            var routingHeader        = new MessageHeaders();
            var queueSession         = new Mock <IMessageQueueSession>();
            var queueCommandExecutor = new Mock <IMessageQueueCommandExecutor>();
            var queueWorkerContainer = new Mock <IMessageQueueWorkerContainer>();

            queueCommandExecutor
            .Setup(m => m.Execute(It.IsAny <Action <IMessageQueueSession> >()))
            .Callback <Action <IMessageQueueSession> >(command => command(queueSession.Object));

            // When

            IExchangeHeadersBinding target = new ExchangeBinding(ExchangeName, queueCommandExecutor.Object, queueWorkerContainer.Object);

            target.Subscribe(QueueName, () => null, routingHeader);

            // Then

            queueSession.Verify(m => m.CreateQueueHeaders(It.Is <QueueConfig>(q => q.QueueName == QueueName), routingHeader));
            queueWorkerContainer.Verify(m => m.RegisterWorker(QueueName, It.IsAny <IMessageQueueWorker>()));
        }
Esempio n. 59
0
        public void DoWork()
        {
            //check for CustomHeaderValue custom header
            MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;

            if (headers.FindHeader("CustomHeaderValue", "ns") != -1)
            {
                var customheader = headers.GetHeader <string>("CustomHeaderValue", "ns");
                if (customheader != null)
                {
                    Helper.Log("ServiceDemo.DoWork() was called with custom header CustomHeaderValue: {0}", customheader);
                }
            }

            //check for InspectorHeader custom header
            if (headers.FindHeader("InspectorHeader", "ns") != -1)
            {
                var customheader = headers.GetHeader <string>("InspectorHeader", "ns");
                if (customheader != null)
                {
                    Helper.Log("ServiceDemo.DoWork() was called with header from Inspector InspectorHeader: {0}", customheader);
                }
            }
        }
 public RawMessageBuffer(byte [] buffer, MessageHeaders headers, MessageProperties properties)
 {
     this.buffer     = buffer;
     this.headers    = new MessageHeaders(headers);
     this.properties = new MessageProperties(properties);
 }