Подписаться WCF Сервис на RabbitMQ - PullRequest
0 голосов
/ 30 января 2019

Я бы хотел подписать мои WCF-сервисы на очередь RabbitMQ, чтобы просто масштабировать их с помощью IIS, который заботится о Thread, Process ecc.Я пытаюсь подписать WCF в Global.asax в методе Application_Start следующим образом:

    protected void Application_Start(object sender, EventArgs e)
    {
        var factory = new ConnectionFactory
        {
            HostName = "hostname",
            Port = 5672,
            UserName = "username",
            Password = "password"
        };

        ServiceResponse response = null;

        using (var connection = factory.CreateConnection())
        {
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "identity_provider", durable: false, exclusive: false, autoDelete: false,
                    arguments: null);

                channel.BasicQos(0, 1, false);

                var consumer = new EventingBasicConsumer(channel);

                channel.BasicConsume(queue: "identity_provider", autoAck: false, consumer: consumer);

                consumer.Received += (model, ea) =>
                {

                    var head = CreateHead(ea.BasicProperties.Headers);
                    var body = ea.Body;
                    var props = ea.BasicProperties;
                    var replyProps = channel.CreateBasicProperties();
                    replyProps.CorrelationId = props.CorrelationId;

                    try
                    {
                        var message = Encoding.UTF8.GetString(body);

                        response = new IdentityProviderService().Execute(head, message);
                    }
                    catch (Exception ex)
                    {
                        response = new ServiceResponse
                        {
                            Message = ex.Message
                        };
                    }
                    finally
                    {
                        var responseBytes = Encoding.UTF8.GetBytes(response.Message);
                        channel.BasicPublish(exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps,
                            body: responseBytes);
                        channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                    }
                };
            }
        }
    }

    private static Head CreateHead(IDictionary<string, object> headDictionary)
    {

        return new Head
        {

            User = Encoding.UTF8.GetString((byte[])headDictionary["user"]),
        };
    }

, но это не работает.Есть способ решить эту проблему?Могу ли я использовать службу Windows, которая открывает больше задач в зависимости от сообщений в очереди?Как?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...