/// <summary>
        /// Метод получения сообщения из шины клиентом.
        /// </summary>
        /// <param name="clientId">Идентификатор клиента, запрашивающего сообщение.</param>
        /// <param name="messageTypeId">Идентификатор типа сообщения, которое нужно получить.</param>
        /// <returns>Найденное сообщение, либо <c>null</c>.</returns>
        public MessageFromESB GetMessageFromESB(string clientId, string messageTypeId)
        {
            Message        message = _sendingManager.ReadMessage(clientId, messageTypeId);
            MessageFromESB result  = null;

            if (message != null)
            {
                result = ServiceHelper.CreateWcfMessageFromEsb(
                    message.ReceivingTime,
                    message.MessageType.ID,
                    message.Body,
                    message.Sender,
                    message.Group,
                    ServiceHelper.GetTagDictionary(message),
                    message.BinaryAttachment);

                if (result.Tags.ContainsKey("sendingWay"))
                {
                    result.Tags["sendingWay"] += '/' + ConfigurationManager.AppSettings.Get("ServiceID4SB");
                }
                else
                {
                    result.Tags.Add("sendingWay", ConfigurationManager.AppSettings.Get("ServiceID4SB"));
                }

                _sendingManager.DeleteMessage(message.__PrimaryKey.ToString());
            }

            return(result);
        }
        /// <summary>
        /// Принять сообщение от шины.
        /// </summary>
        /// <param name="msg">Принимаемое сообщение.</param>
        public void AcceptMessage(MessageFromESB msg)
        {
            var msgFor = new MessageForESB
            {
                Attachment    = msg.Attachment,
                Body          = msg.Body,
                MessageTypeID = msg.MessageTypeID,
                ClientID      = GetLastSenderID(msg),
                Tags          = msg.Tags
            };

            if (!msgFor.Tags.ContainsKey("senderName"))
            {
                msgFor.Tags.Add("senderName", msg.SenderName);
            }

            if (msg.GroupID == String.Empty)
            {
                SendMessageToESB(msgFor);
            }
            else
            {
                SendMessageToESBWithUseGroup(msgFor, msg.GroupID);
            }
        }
        /// <summary>
        /// Получить сообщение из шины с соответствующими тэгами.
        /// </summary>
        /// <param name="clientId">Идентификатор клиента, запрашивающего сообщение.</param>
        /// <param name="messageTypeId">Тип запрашиваемого сообщения.</param>
        /// <param name="tags">Тэги, которые должно содержать сообщение.</param>
        /// <returns>Найденное сообщение или <c>null</c>.</returns>
        public MessageFromESB GetMessageWithTagsFromESB(string clientId, string messageTypeId, string[] tags)
        {
            Message        message = _sendingManager.ReadMessage(clientId, messageTypeId, tags);
            MessageFromESB result  = null;

            if (message != null)
            {
                result = new MessageFromESB
                {
                    MessageFormingTime = message.ReceivingTime,
                    MessageTypeID      = message.MessageType.ID,
                    Body       = message.Body,
                    Attachment = message.BinaryAttachment,
                    SenderName = message.Sender,
                    GroupID    = message.Group,
                    Tags       = ServiceHelper.GetTagDictionary(message),
                };

                if (result.Tags.ContainsKey("sendingWay"))
                {
                    result.Tags["sendingWay"] += '/' + ConfigurationManager.AppSettings.Get("ServiceID4SB");
                }
                else
                {
                    result.Tags.Add("sendingWay", ConfigurationManager.AppSettings.Get("ServiceID4SB"));
                }

                _sendingManager.DeleteMessage(message.__PrimaryKey.ToString());
            }

            return(result);
        }
        /// <summary>
        /// Создать сообщение для отправки клиенту посредством WCF-сервиса по сообщению, хранящемуся в шину.
        /// </summary>
        /// <param name="formTime">Время формирования сообщения в шине.</param>
        /// <param name="messageTypeID">Идентификатор типа собщения.</param>
        /// <param name="msgBody">Тело сообещния.</param>
        /// <param name="senderName">Имя отправителя сообщения.</param>
        /// <param name="groupID">Имя группы сообщения.</param>
        /// <param name="tags">Теги собщения.</param>
        /// <param name="attachment">Вложение сообщения.</param>
        /// <returns>Сформированный объект для отправки сообщения.</returns>
        public static MessageFromESB CreateWcfMessageFromEsb(
            DateTime formTime,
            String messageTypeID,
            String msgBody,
            String senderName,
            String groupID,
            Dictionary <string, string> tags,
            byte[] attachment)
        {
            var msg = new MessageFromESB
            {
                MessageFormingTime = formTime,
                MessageTypeID      = messageTypeID,
                Body       = msgBody,
                Attachment = attachment,
                SenderName = senderName,
                GroupID    = groupID,
                Tags       = tags
            };

            return(msg);
        }
        /// <summary>
        /// Извлечь из тегов идентификатор последнего отправителя.
        /// </summary>
        /// <param name="msg">Сообщение, из которого извлекается последний отправитель.</param>
        /// <returns>Идентификатор последнего отправителя.</returns>
        private static string GetLastSenderID(MessageFromESB msg)
        {
            string[] strings = msg.Tags["sendingWay"].Split('/');

            return(strings[strings.Length - 1]);
        }