/// <summary> /// Отправить сообщение. /// </summary> /// <param name="message">Сообщение, которое нужно отправить.</param> /// <returns>Успешно ли было отправлено сообщение.</returns> public bool SendMessage(Message message) { if (string.IsNullOrEmpty(Client.Address)) { _logger.LogError("Ошибка отправки сообщения клиенту через WCF", $"У клиента '{Client.Name ?? Client.ID}' не указан адрес для отправки сообщений.", message); return(false); } var channelFactory = new ChannelFactory <ICallbackSubscriber>( "CallbackClient", Client.DnsIdentity != null ? new EndpointAddress(new Uri(Client.Address), EndpointIdentity.CreateDnsIdentity(Client.DnsIdentity)) : new EndpointAddress(Client.Address)); ICallbackSubscriber channel = channelFactory.CreateChannel(); ((IClientChannel)channel).Open(); MessageFromESB messageFromEsb = ServiceHelper.CreateWcfMessageFromEsb( message.ReceivingTime, message.MessageType.ID, message.Body, message.Sender, message.Group, ServiceHelper.GetTagDictionary(message), message.BinaryAttachment); return(ServiceHelper.TryWithExceptionLogging( () => channel.AcceptMessage(messageFromEsb), () => { ((IClientChannel)channel).Close(); channelFactory.Close(); }, string.Format("Ошибка отправки сообщения клиенту через WCF по адресу {0}", Client.Address), Client, message, _logger)); }
/// <summary> /// Отправить сообщение. /// </summary> /// <param name="message">Сообщение, которое нужно отправить.</param> /// <returns>Успешно ли было отправлено сообщение.</returns> public bool SendMessage(Flexberry.ServiceBus.Message message) { if (string.IsNullOrEmpty(Client.Address)) { _logger.LogError( "Ошибка отправки сообщения клиенту через веб-сервис", $"У клиента '{Client.Name ?? Client.ID}' не указан адрес для отправки сообщений.", message); return(false); } var channelFactory = new ChannelFactory <ICallbackSubscriber>( new BasicHttpBinding(), new EndpointAddress( new Uri(Client.Address), AddressHeader.CreateAddressHeader("headerName", Regex.Replace(Client.Address, ".asmx$", string.Empty), "headerValue"))); ICallbackSubscriber channel = channelFactory.CreateChannel(); ((IClientChannel)channel).Open(); MessageFromESB messageFromEsb = ServiceHelper.CreateWcfMessageFromEsb( message.ReceivingTime, message.MessageType.ID, message.Body, message.Sender, message.Group, ServiceHelper.GetTagDictionary(message), message.BinaryAttachment); return(ServiceHelper.TryWithExceptionLogging(() => channel.AcceptMessage(messageFromEsb), null, null, null, null, _logger)); }
static void Main(string[] args) { string adaptersCommand = ""; while (adaptersCommand != "exit") { using (var ServiceBus = new ServiceBus.ServiceBusServiceClient()) { string serviceID = ConfigurationManager.AppSettings["ServiceID4SB"]; string messageTypeID = ConfigurationManager.AppSettings["MessageTypeID"]; //Получить все адресованные сообщения (при запуске). MessageFromESB message = ServiceBus.GetMessageFromESB(serviceID, messageTypeID); Console.WriteLine(message.Body); // Получить новые сообщения/выйти из приложения. Console.WriteLine("Enter \"get\" for get a message (for exit type \"exit\"):"); adaptersCommand = Console.ReadLine(); while (message != null) { // Получить новый список сообщений через команду "get". message = ServiceBus.GetMessageFromESB(serviceID, messageTypeID); } } } }
public void TestCallBackServiceAcceptToMsrFromReestrMspCatalogItemsResponseMessage() { using (new FakeHttpContext()) { var pathToXML = Path.Combine(HttpRuntime.AppDomainAppPath, $"{Context.XMLMessagePath}{ToMsrFromReestrMspCatalogItemsResponse.NameForESB}.xml"); var xmlTemplateDoc = new XmlDocument(); xmlTemplateDoc.Load(pathToXML); var xmlStringMsg = xmlTemplateDoc.InnerXml; var msg = new MessageFromESB { MessageTypeID = ToMsrFromReestrMspCatalogItemsResponse.NameForESB, Body = xmlStringMsg, SenderName = "TestSender" }; var cb = new CallbackSubscriber(); try { cb.AcceptMessage(msg); } catch (Exception ex) { Assert.Fail($"Произошло неожиданное исключение - {ex.Message}"); } } }
static void Main(string[] args) { var messageFromESB = new MessageFromESB(); MyServiceHost.StartService(); Console.WriteLine("MsgListener started."); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); MyServiceHost.StopService(); }
/// <inheritdoc/> public override bool SendMessage(Message message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (string.IsNullOrEmpty(Client.Address)) { Logger.LogError("Error sending message to client via WEB.", $"The client '{Client.Name ?? Client.ID}' not specified address to send messages.", message); return(false); } ChannelFactory <ICallbackSubscriber> channelFactory; ICallbackSubscriber channel; try { var endpointAddress = new EndpointAddress(new Uri(Client.Address), AddressHeader.CreateAddressHeader("headerName", Regex.Replace(Client.Address, ".asmx$", string.Empty), "headerValue")); channelFactory = new ChannelFactory <ICallbackSubscriber>(new BasicHttpBinding(), endpointAddress); channel = channelFactory.CreateChannel(); ((IClientChannel)channel).Open(); } catch (Exception exception) { Logger.LogUnhandledException(exception, message); throw exception; } var sbMessage = 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), }; return(ServiceHelper.TryWithExceptionLogging( () => channel.AcceptMessage(sbMessage), () => { ((IClientChannel)channel).Close(); channelFactory.Close(); }, $"Error sending message to the client '{Client.Name ?? Client.ID}' via WEB at address '{Client.Address}'.", Client, message, Logger)); }
public void TestAcceptMessage() { // Arrange. const string clientId = "Client1"; const string senderId = "Client2"; const string messageTypeId = "messageType1"; const string groupId = "Group1"; var message = new MessageFromESB { GroupID = groupId, MessageTypeID = messageTypeId, Body = "Сообщение для шины", Tags = new Dictionary <string, string>(), SenderName = senderId }; message.Tags["sendingWay"] = clientId; // Act & Assert. fixture.ServiceBus.AcceptMessage(message); fixture.RecManager.Verify( rec => rec.AcceptMessage( It.Is <ServiceBusMessage>( msg => msg.ClientID == clientId && msg.MessageTypeID == messageTypeId && msg.Body == message.Body && msg.Tags["senderName"] == senderId), groupId), Times.Once); message.GroupID = string.Empty; fixture.ServiceBus.AcceptMessage(message); fixture.RecManager.Verify( rec => rec.AcceptMessage( It.Is <ServiceBusMessage>( msg => msg.ClientID == clientId && msg.MessageTypeID == messageTypeId && msg.Body == message.Body && msg.Tags["senderName"] == senderId)), Times.Once); }
public void TestCreateWcfMessageFromEsb() { // Arrange. var formTime = DateTime.Now; const string messageTypeId = "03FE3B98-2D09-4032-A5BF-03BEDF86F4F4"; const string msgBody = "TestBody"; const string senderName = "Sender's name"; const string groupId = "715A8124-A154-485B-83AC-6EE6BA7A9470"; Dictionary <string, string> tags = new Dictionary <string, string> { { "testTag", "tag" } }; byte[] attachment = Encoding.Unicode.GetBytes(msgBody); // Act. MessageFromESB msg = ServiceHelper.CreateWcfMessageFromEsb(formTime, messageTypeId, msgBody, senderName, groupId, tags, attachment); // Assert. Assert.True(msg.MessageFormingTime == formTime && msg.MessageTypeID == messageTypeId && msg.Body == msgBody && msg.SenderName == senderName && msg.GroupID == groupId && msg.Tags == tags && msg.Attachment == attachment); }
public void TestCallBackServiceUnknowMessageEx() { var msg = new MessageFromESB { MessageTypeID = "TestUnknowTypeMessage", Body = "", SenderName = "TestSender" }; try { var cb = new CallbackSubscriber(); cb.AcceptMessage(msg); } catch (UnknowMessageTypeException) { throw; } catch (Exception ex) { Assert.Fail($"Произошло неожиданное исключение - {ex.Message}"); } }
public void AcceptMessage(MessageFromESB msg) { Console.WriteLine(msg.Body); }
/// <summary> /// Принять сообщение из шины. /// </summary> /// <param name="message">Сообщение.</param> public void AcceptMessage([MessageParameter(Name = "msg")] MessageFromESB message) { LogService.LogInfo($"BusListenerService: Принял соообщение - {message.MessageTypeID}!"); // Ищем в конфиг файле, привязку между типов сообщения и xml-классом этого сообщения. var xmlClassName = Context.GetMessageXMLClassNameByMessageID(message.MessageTypeID); if (!string.IsNullOrEmpty(xmlClassName)) { // Получаем тип по названию класса из конфиг файла. var messageType = Type.GetType(xmlClassName); if (messageType != null) { try { ICommonMessage messageObj = null; if (!string.IsNullOrEmpty(message.Body)) { // Проверка валидация по XSD-схеме полученного xml. if (Context.EnableXSDValidation) { var pathToXSD = Path.Combine(HttpRuntime.AppDomainAppPath, $"{Context.XSDSchemasPath}{message.MessageTypeID}.xsd"); if (File.Exists(pathToXSD)) { XMLTools.CheckXMLFromStringtoXSD(message.Body, pathToXSD); } else { LogService.LogWarn( $"BusListenerService: При получении сообщения включена проверка валидности сообщения XSD-схеме, но XSD-схема для сообщения типа {message.MessageTypeID} не найдена!{Environment.NewLine} Путь для ожидаемой XSD-схемы - {pathToXSD}"); } } // Десериализуем сообщение для его сохранения. messageObj = SerializationTools.DeserialiseDataContract(messageType, message.Body) as ICommonMessage; } if (messageObj != null) { // Сохранение сообщения в SyncLogItem. messageObj.Save(message.SenderName, message.Body, true); } else { LogService.LogWarn( $"BusListenerService: Получено пустое сообщение типа {message.MessageTypeID}. Сообщение не будет сохранено в БД!"); } } catch (XmlSchemaValidationException ex) { LogService.LogError( $"{MessageErrorHeader} Не пройдена валидация XSD-схемы для сообщения типа {message.MessageTypeID}", ex); throw; } catch (Exception ex) { LogService.LogError($"{MessageErrorHeader}", ex); throw; } } else { var errorMessage = $"{MessageErrorHeader} Не найден XML-класс типа сообщения с названием {xmlClassName}"; LogService.LogError(errorMessage); throw new InvalidOperationException(errorMessage); } } else { var errorMessage = $"{MessageErrorHeader} Неизвестный тип сообщения - {message.MessageTypeID}. Проверьте настройки секции {Context.CustomSBListenerConfigSectionName} в конфигурационном файле."; LogService.LogError(errorMessage); throw new UnknowMessageTypeException(errorMessage); } }