簡體   English   中英

WCF在服務器上的服務之間進行通信

[英]WCF communicating between services on a server

我正在使用WCF回調在公司LAN中實現警報類型系統。 它具有訂閱機制等。我以教程為起點,但是我將綁定更改為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();
    }

在我的由sendonly客戶端調用的SendingService方法中,我認為我能夠做到這一點:

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

    notify.SendMessage("Message text");

SendMessage()將回調消息發送到訂閱的客戶端。 不幸的是,即使有客戶端連接並等待回調,myNotifyHost.SingletonInstance始終為null。 我想我誤會了該財產的含義。 NortifyService具有這些屬性

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

我可以在兩種服務之間進行通信嗎? 我應該放棄這一點,而只堅持一種服務,並在那些不需要它的客戶端中實現無意義的回調類。 在這一點上沒什么大不了的。 這與我對WCF的理解有關。

謝謝

嘗試這個,

  public class NotifyService
    {
        public static NotifyService DefaultInstace;

        public NotifyService()
        {
            DefaultInstace = this;


        }
     ///.....SNIP......      
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM