Я бы хотел подписать мои 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, которая открывает больше задач в зависимости от сообщений в очереди?Как?Спасибо.