/// <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]); }