/// <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)); }
public WcfCallbackFixture() { // Arrange. var address = new Uri("http://localhost:12346/CallbackSubscriber"); RecManager = new Mock <IReceivingManager>(); service = new WcfService(GetMockSubscriptionManager(), GetMockSendingManager(), RecManager.Object, GetMockLogger(), GetMockStatisticsService(), GetMockObjectRepository()) { UseWcfSettingsFromConfig = false, Binding = new BasicHttpBinding(), Address = address }; var binding = new BasicHttpBinding(); ServiceBus = new ChannelFactory <ICallbackSubscriber>(binding, new EndpointAddress(address)).CreateChannel(); service.Start(); }