我正在公司局域网内使用WCF回调实现一个警报类型系统。它有一个订阅机制等。
this
教程是一个起点,但是我将绑定改为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的理解有关。
谢谢