2010-01-27 89 views
0

我正在使用WCF回调在我公司的LAN内实现警报类型系统。它有一个订阅机制等。我用this教程作为起点,但我将绑定更改为NetTcpBinding而不是wsDualHttpBinding,并且我在Windows服务中自行托管。服务器上的服务之间的WCF通信

这工作很好,但我有一个问题。我的大多数客户不需要回拨。它们是各种桌面应用程序,只需要向服务器发送单向警报,然后将这些警报传递给运行启用回调的“通知”应用程序并订阅该类警报的客户端。

我可能不在意这里,但自从我的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方法,我想我能做到这一点:

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

    notify.SendMessage("Message text"); 

SendMessage函数()将回调消息发送给订阅的客户端。不幸的是,即使有客户端连接并等待回调,myNotifyHost.SingletonInstance也始终为空。我想我误解了这个属性的含义。 NortifyService具有这些属性

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

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

感谢

回答

1

试试这个,

public class NotifyService 
    { 
     public static NotifyService DefaultInstace; 

     public NotifyService() 
     { 
      DefaultInstace = this; 


     } 
    ///.....SNIP......  
    } 
+0

感谢。这工作得很好。我其实早先想到的,但不知何故,我从来没有尝试过,因为我有一些奇怪的想法,你不能在构造函数中访问“this”。 – tetranz 2010-01-27 19:42:05