0

我正在使用 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 也始终为空。我想我误解了该属性的含义。NortifyService 有这些属性

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

有没有办法可以在这两个服务之间进行通信?我是否应该放弃这一点,只坚持一项服务,并在那些不需要它的客户端中实现无意义的回调类。在这一点上,这没什么大不了的。这更多地与我对WCF的理解有关。

谢谢

4

1 回答 1

1

试试这个,

  public class NotifyService
    {
        public static NotifyService DefaultInstace;

        public NotifyService()
        {
            DefaultInstace = this;


        }
     ///.....SNIP......      
   }
于 2010-01-27T19:30:30.737 回答