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