Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务类所需的WCF解决方案_Wcf_Wcfserviceclient - Fatal编程技术网

服务类所需的WCF解决方案

服务类所需的WCF解决方案,wcf,wcfserviceclient,Wcf,Wcfserviceclient,我有一个类引发一些事件并执行操作。乙二醇 class MyService { EventHandler MessageSent; EventHandler StatusReceived; public void StartService(Serviceconfig configObject) { //Intialize serial port with OnSerialPortReceived event handler. }

我有一个类引发一些事件并执行操作。乙二醇

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。并且监视器应用程序调用服务类。在上面的示例中,监视器应用程序将调用GetStatusFormMessage方法。那么现在我们如何使用WCF实现呢。如果使用服务契约将上述类设为服务,则在客户端启动调用之前,不会初始化和启动该类。当系统重新启动时,该类对象将被初始化并启动其功能

我找到了这篇文章。使用这种方法,我的服务将成为发布者客户端,监视器应用程序将成为订阅者客户端应用程序。但是客户端必须调用服务类。因此,我的客户机应用程序应该支持回调,并且应该能够调用服务方法。如何使用WCF实现这一点?注意,监视事件的服务类是单个实例,在应用程序启动时初始化


希望我能找到解决办法。请让我知道更多的澄清。

不要试图将您的服务归类为WCF服务。让它成为一个单件,让WCF和它对话

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

注意:您必须保持会话双方都处于活动状态,因此监控应用程序和服务必须比配置的receiveTimeout(默认情况下为10分钟)更定期地相互触发某些内容,但这可以只是一种“ping”方法,用作保持活动状态

一段时间以前,如果有帮助的话

  • 使您的“服务”成为Widnows服务,而不是控制台应用程序
  • 您可以使MyService类成为WCF服务,而不会出现任何问题。但您也可以创建一些其他类来承载您的服务契约,并简单地与windows服务实现通信
  • windows服务激活时间和第一个WCF请求之间没有连接(这不是IIS,这是一个自托管WCF服务,您可以在需要时启动它)
  • 使用自动运行选项在计算机上安装windows服务

  • 嗨,我看过你的博客,它是一个很好的博客。如果我将其设置为singleton,则在请求客户端时将创建该项目,对吗?但是在我的例子中,对象已经被创建了。所以我需要创建一个WCF服务,它将与之对话。那么单例WCF对象应该如何与我已经创建的服务对象进行通信呢?对不起,不是WCF单例,而是设计模式意义上的单例,您可以通过多种方式创建它,记住我说过不要将您的服务设为WCF服务。事实上,当ServiceHost不是在第一次请求时打开时,会在中创建一个WCF单例,但我不会将您的服务类绑定到WCFOh!好啊甚至我也不想把我的WCF服务类和我的服务类捆绑在一起。现在我的问题是如何与我的WCF服务类对象和我的服务类交互。需要我的服务类有一个全局对象,以便我可以在WCF singleton中访问它吗?(我不认为这是个好主意)。具有的WCF服务类必须了解服务类,即使是通过抽象(这将使单元测试更容易)。例如,.NET中的单例模式有很好的文档记录。在那篇文章中,您希望使用静态初始化模型,并确保在启动代码中有服务类类型。这将导致静态初始值设定项运行,从而在startupOK创建您的对象。谢谢。这个链接正确吗?它带我去看电影。实际上,在program.cs中,我将启动我的应用程序服务,也将启动singlton WCF服务。那么,现在我如何访问单吨WCF服务中program.cs中的对象进行交互(这就是我真正遇到的问题)。