我有一个班级举起一些活动并做手术。例如
class MyService
{
EventHandler MessageSent;
EventHandler StatusReceived;
public void StartService(Serviceconfig configObject)
{
//Intialize serial port with OnSerialPortReceived event handler.
}
public void GetStatusForMessage(string messageID)
{
}
public void OnSerialPortReceived(string data)
{
if(data=="123")
MessageSent(this,null);
if(data=="456")
StatusSent(this,null);
}
}
这是一个控制台应用程序,它将在系统启动时启动。现在,当事件服务上触发某些事件时,我们需要一个监控应用程序(基本上是一个带回调的客户端),因为我们应该使用WCF。并且监视器应用程序也调用服务类。在上面的例子中,监视器应用程序将调用GetStatusForMessage方法。那么现在我们如何使用WCF实现。如果将上述类作为服务合同的服务,则不会初始化并启动,直到客户端发起呼叫。系统重新启动时,将初始化此类对象并启动其功能。
我发现了这篇文章http://msdn.microsoft.com/en-us/magazine/cc163537.aspx。通过这种方法,我的服务将成为发布者客户端,监控应用程序将成为订户客户端应用程序。但是客户端必须调用服务类。所以我的客户端应用程序应该支持两个回调,并且它应该能够调用服务方法。如何使用WCF实现此目的?请注意,监视事件的服务类是单个实例,并在应用程序启动时初始化。
希望我能得到解决方案。请让我知道更多说明。
答案 0 :(得分:0)
不要尝试使您的服务类为WCF服务。使它成为单身并让WCF与之交谈。
如果您希望事件向监控应用程序激活“事件”,则需要使用双工绑定(如果我推荐在同一台计算机上使用跨机器或NetNamedPipeBinding,则需要使用NetTcpBinding)。当监控应用程序连接时,保存其回调通道,并在连接到事件的方法中回调回调通道。
请注意,您必须让双方的会话保持活动状态,以便监控应用程序和服务必须比配置的receiveTimeout(默认情况下为10分钟)更频繁地向对方发送某些内容,但这样可以简单地使用“ping”方法作为保持活动
答案 1 :(得分:0)