目前,我有一个类监视传入数据的串行端口,处理数据并根据接收的数据通过委托/事件引发事件。这是一个独立的应用程序。现在我必须将其转换为服务,以便当Windows启动并且客户端应用程序从远程PC或本地计算机订阅事件时,串行端口监视器类将作为服务启动。我见过很多关于在这种应用程序中使用WCF的文章。但是WCF是基于消息的,它将在请求客户端时创建服务对象。但我的要求是服务应该自动启动,客户端应用程序应该能够订阅已经在启动期间创建的服务类实例的事件。如何使用WCF实现此目的?
答案 0 :(得分:1)
WCF中的默认行为是创建服务类的新实例来处理每个传入请求,但您可以通过使用以下命令来修改类来覆盖它:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
为了获得单身人士的良好表现,你需要考虑以下几点:
ServiceHost
构造函数方法。 (例如,请参阅Figure 8 Initializing and Hosting a Singleton in this article ConcurrencyMode
)仅允许单个线程一次访问您的Singleton实例。您可能需要使用ConcurrencyMode = ConcurrencyMode.Multiple
来获得良好的性能(这意味着您需要自己处理与线程相关的问题)。[OperationContract(IsOneWay = true)]
,以便将事件发回给订阅者不会导致服务实例在事件处理程序完成之前阻塞。 (以这种方式使用WCF是covered in detail in this article by Juval Lowy