Может быть, я смешиваю вещи, если это так, пожалуйста, дайте мне знать.
Я хочу предоставить набор услуг через WCF для сообщений (это пример). В этом наборе у меня будет служба sendMessage и служба receiveMessage.
Для sendMessage я хочу использовать MSMQ, чтобы пользователь мог отправить сообщение 100.000 другим пользователям, и оно будет обработано в фоновом режиме.
Для receiveMessage я не хочу использовать MSMQ, потому что я хочу, чтобы пользователь обслуживался, когда он делал запрос и получал ответ (MSMQ, в данном случае, односторонний).
Я использую этот код для запуска моего хоста в примере приложения
static void Main(string[] args)
{
using (ServiceHost host =
new ServiceHost(typeof(Service), new Uri[] {
new Uri("net.msmq://localhost/private/loadqueue"),
new Uri("http://localhost:8383/") }))
{
host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true });
NetMsmqBinding binding = new NetMsmqBinding();
binding.Security.Transport.MsmqAuthenticationMode = MsmqAuthenticationMode.None;
binding.Security.Transport.MsmqProtectionLevel = System.Net.Security.ProtectionLevel.None;
binding.ExactlyOnce = false;
host.AddServiceEndpoint(
typeof(IContract),
binding,
string.Empty);
host.AddServiceEndpoint(
typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexHttpBinding(),
"mex");
host.Open();
Console.WriteLine("service running");
Console.ReadLine();
}
}
Контракт выглядит так
[ServiceContract(SessionMode=SessionMode.Allowed)]
[DeliveryRequirements(QueuedDeliveryRequirements = QueuedDeliveryRequirementsMode.Allowed)]
public interface IContract
{
[OperationContract(IsOneWay = true)]
void SendData(string msg);
}
Когда клиент вызывает службу SendData, сообщение отправляется в очередь, после чего оно используется службой.
Я хотел бы создать второй сервис, который будет получать напрямую сообщение от клиента (без очереди в середине).
У клиента будет только одна веб-ссылка, и если он вызывает service.SendData (), сообщение отправляется в очередь, а если клиент вызывает service.NetMethod (), служба получает сообщение напрямую. Таким образом, было бы прозрачно для разработчика на стороне клиента, если служба использует очередь или нет, и я мог бы сгруппировать службы по их функциям, а не по механизмам. Можно ли это сделать?
Спасибо,
Оскар