예제 #1
0
        /// <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));
        }
예제 #3
0
        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();
        }