服务类所需的WCF解决方案

时间:2012-05-16 10:28:11

标签: wcf wcfserviceclient

我有一个班级举起一些活动并做手术。例如

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实现此目的?请注意,监视事件的服务类是单个实例,并在应用程序启动时初始化。

希望我能得到解决方案。请让我知道更多说明。

2 个答案:

答案 0 :(得分:0)

不要尝试使您的服务类为WCF服务。使它成为单身并让WCF与之交谈。

如果您希望事件向监控应用程序激活“事件”,则需要使用双工绑定(如果我推荐在同一台计算机上使用跨机器或NetNamedPipeBinding,则需要使用NetTcpBinding)。当监控应用程序连接时,保存其回调通道,并在连接到事件的方法中回调回调通道。

请注意,您必须让双方的会话保持活动状态,以便监控应用程序和服务必须比配置的receiveTimeout(默认情况下为10分钟)更频繁地向对方发送某些内容,但这样可以简单地使用“ping”方法作为保持活动

I blogged about duplex communication如果有帮助

答案 1 :(得分:0)

  1. 让您的“服务”成为Widnows服务而不是控制台应用程序。
  2. 您可以毫无问题地使MyService类成为WCF服务。但您也可以创建一些其他类来托管您的服务合同,并简单地与您的Windows服务实现进行通信。
  3. Windows服务激活时间和第一个WCF请求之间没有任何关联(这不是IIS,这是一个自托管的WCF服务,您可以在需要时启动它。)
  4. Here's link to self hosting WCF service tutorial
  5. 使用自动运行选项在您的计算机上安装Windows服务。