C# 为windows上的其他应用程序创建长寿命服务器

C# 为windows上的其他应用程序创建长寿命服务器,c#,.net,com,com+,C#,.net,Com,Com+,我已经研究过COM服务器和Windows服务,但我不确定什么最适合我的目的或如何做到这一点。我想要的是可以启动并无限期运行的东西,它保存一个对象,以便其他进程或应用程序获取对该对象的引用(或向服务器发出请求)以修改或查询其状态 服务器本质上是一个应用程序,它通过串行端口处理发送给设备的命令,并维护设备的内部状态 我现在用C#编写了设备通信和持久性功能,它可以在每个进程的基础上创建和运行,但显然我希望它实例化一次并独立于其他进程运行 我读过的COM教程只是让我感到困惑,因为我不完全确定这是否是我想

我已经研究过COM服务器和Windows服务,但我不确定什么最适合我的目的或如何做到这一点。我想要的是可以启动并无限期运行的东西,它保存一个对象,以便其他进程或应用程序获取对该对象的引用(或向服务器发出请求)以修改或查询其状态

服务器本质上是一个应用程序,它通过串行端口处理发送给设备的命令,并维护设备的内部状态

我现在用C#编写了设备通信和持久性功能,它可以在每个进程的基础上创建和运行,但显然我希望它实例化一次并独立于其他进程运行

我读过的COM教程只是让我感到困惑,因为我不完全确定这是否是我想要的,我希望有更多的.Net方法来实现这一点


任何帮助都将不胜感激

这似乎很适合windows服务。我应该说我不是.net程序员,但我知道你可以用.net创建服务。只要您知道可以使用.net操作串行端口,您就应该可以开始了


-don

这似乎是windows服务的天然选择。我应该说我不是.net程序员,但我知道你可以用.net创建服务。只要您知道可以使用.net操作串行端口,您就应该可以开始了


-DO/P> < P>我将为此建立一个Windows通信基础(WCF)服务,并将它与可用的许多绑定之一公开。您可以通过HTTP/SOAP、HTTP/REST、TCP/Binary、MSMQ等从同一个服务公开它。如果您有Windows 2008,您可以通过Windows激活服务(WAS)激活它。如果您有一些其他Windows操作系统,则应该编写一个可以向服务控制管理器(SCM)注册的Windows服务。这里有很多选择,但我肯定倾向于使用WCF来创建您的服务。有这么多的“管道”,WCF照顾你。没有必要重新发明所有这些。希望这有帮助。

< P>我会为此构建一个Windows通信基础(WCF)服务,并将它与许多可用的绑定之一公开。您可以通过HTTP/SOAP、HTTP/REST、TCP/Binary、MSMQ等从同一个服务公开它。如果您有Windows 2008,您可以通过Windows激活服务(WAS)激活它。如果您有一些其他Windows操作系统,则应该编写一个可以向服务控制管理器(SCM)注册的Windows服务。这里有很多选择,但我肯定倾向于使用WCF来创建您的服务。有这么多的“管道”,WCF照顾你。没有必要重新发明所有这些。希望这能有所帮助。

您的要求有点矛盾——如果服务器必须无限期运行,而不管是否有客户机提供服务,并且进程必须在所有客户机之间共享,而不管它们在哪个会话中运行,那么Windows服务就是最好的选择

如果希望服务器仅在有客户端时运行,并且可能(或不)希望这些客户端共享同一个服务器进程,则可以选择进程外COM服务器

对于COM,您必须使用DCOM与服务器进程通信。对于服务,可以使用DCOM、命名管道、RPC或其他IPC机制


但是,如果您希望用C#编写服务器代码,那么DCOM似乎是一个奇怪的选择——可以用C#创建DCOM服务器,但这确实很尴尬。正如Kevin所指出的,WCF/WAS/Remoting可能是更容易的选择。但请记住,这样的解决方案几乎必然比本机COM服务器或服务具有更高的开销w.r.t.内存消耗。如果这段软件要安装在客户端机器上,我会选择本机解决方案。

您的要求有点矛盾——如果服务器必须无限期运行,而不管是否有客户端提供服务,并且进程必须在所有客户端之间共享,无论在哪个会话中运行,Windows服务都是一条必由之路

如果希望服务器仅在有客户端时运行,并且可能(或不)希望这些客户端共享同一个服务器进程,则可以选择进程外COM服务器

对于COM,您必须使用DCOM与服务器进程通信。对于服务,可以使用DCOM、命名管道、RPC或其他IPC机制


但是,如果您希望用C#编写服务器代码,那么DCOM似乎是一个奇怪的选择——可以用C#创建DCOM服务器,但这确实很尴尬。正如Kevin所指出的,WCF/WAS/Remoting可能是更容易的选择。但请记住,这样的解决方案几乎必然比本机COM服务器或服务具有更高的开销w.r.t.内存消耗。如果要在客户端计算机上安装此软件,我更喜欢本机解决方案。

您似乎要求两件事-

  • 在Windows上托管长时间运行的持久应用程序的一种方法,它将通过串行端口处理某些设备或其他设备
  • 从其他应用程序与该应用程序通信的一种方式 Windows服务是一个很好的解决方案。Windows服务充当自定义逻辑的应用程序主机。它通过一个通用的UI和API为您提供启动/停止、轻量级监视和配置功能。用C#构建Windows服务很容易。从命令行、应用程序和GUI工具可以轻松启动和停止Windows服务

    将WCF主要视为一个通信接口。WCF可用于构造Windows服务公开的外部接口。如果要从.NET或HTTP客户端(重新连接)连接到应用程序(服务)