WCF, общение между службами на сервере

Я внедряю систему оповещений в локальной сети моей компании с помощью обратных вызовов WCF. У него есть механизм подписки и т. Д. Я использовал это руководство в качестве отправной точки, но я изменил привязку на NetTcpBinding вместо wsDualHttpBinding, и я сам хостинг в службе Windows.

Это работает довольно хорошо, но у меня есть вопрос. Большинство моих клиентов не нуждаются в обратном вызове. Это различные настольные приложения, которым нужно только отправлять одностороннее оповещение на сервер, которое будет передаваться тем клиентам, на которых запущено приложение "Уведомить" с обратным вызовом и которые подписаны на этот тип оповещения.

Я мог бы беспокоиться ни о чем здесь, но так как моя служба WCF реализует обратный вызов, все клиенты должны реализовать объект обратного вызова независимо от того, нужен им обратный вызов или нет. Казалось бы, более аккуратное решение, если бы клиенты могли обмениваться данными со службой, которая не выполняет обратный вызов.

Итак... Я создал другую конечную точку без обратного вызова в моей службе WCF. Он просто имеет простой односторонний вызов метода. Это работает, но моя проблема в том, что я не могу понять, как передать полученное сообщение службе с поддержкой обратного вызова.

Моя служба Windows имеет что-то вроде этого:

        internal static ServiceHost myNotifyHost;
    internal static ServiceHost mySendingHost;

    protected override void OnStart(string[] args)
    {
        // service with callback
        myNotifyHost = new ServiceHost(typeof(NotifyService));
        myNotifyHost.Open();

        // service without callback
        mySendingHost = new ServiceHost(typeof(SendingService));
        mySendingHost.Open();
    }

В моем методе SendingService, который вызывается клиентом sendonly, я думал, что смогу сделать это:

    var notify = (NotifyService)WindowsService.myNotifyHost.SingletonInstance;

    notify.SendMessage("Message text");

SendMessage () отправляет сообщения обратного вызова подписанным клиентам. К сожалению, myNotifyHost.SingletonInstance всегда имеет значение null, даже если клиент подключен и ожидает обратного вызова. Думаю, я неправильно понимаю, что означает это свойство. NortifyService имеет эти атрибуты

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

Есть ли способ, которым я могу общаться между двумя службами? Должен ли я отказаться от этого и просто придерживаться одного сервиса и просто жить с реализацией бессмысленного класса обратного вызова в тех клиентах, которые в этом не нуждаются. На данный момент это не имеет большого значения. Это больше связано с моим пониманием WCF.

Спасибо

1 ответ

Решение

Попробуй это,

  public class NotifyService
    {
        public static NotifyService DefaultInstace;

        public NotifyService()
        {
            DefaultInstace = this;


        }
     ///.....SNIP......      
   }
Другие вопросы по тегам