从远程计算机调用Windows服务

时间:2009-07-02 16:09:06

标签: c# wcf web-services windows-services

我将编写一个Windows服务来将用户添加到计算机(没有权限的用户,即仅用于身份验证)。 (作为旁注,我打算使用this method。)

我希望能够从另一台计算机上调用此Windows服务。

这是怎么做到的?这是一个很高的命令吗?我只是创建一个Web服务并在IIS中托管它会更好吗?

我在调用计算机上的IIS中托管了一些WCF服务(他们将调用建议的Windows服务)。我发现IIS中的托管有些问题,所以除非我需要,否则我宁愿不管理第二个IIS实例。

(我将使用Visual Studio 2008 SP1,C#和Windows Server 2003(适用于呼叫者和服务主机)。

感谢您的帮助

6 个答案:

答案 0 :(得分:3)

如果您考虑在IIS中托管Web服务只是为了与同一台计算机上的NT服务进行通信,那么肯定比在这种情况下的价值更加麻烦。

正如其他答案所示,您可以使用所需的操作制作WCF服务,并将其托管在您要与之交互的同一NT服务中。您可以使用证书或用户帐户轻松保护它,以确保它仅由合适的人员/机器控制。

如果您需要控制NT服务本身,可以使用sc.exe这样的现有程序来远程启动,停止,配置或查询NT服务的状态。

但是,您可能需要考虑寻求一种解决方案,而无需创建自定义NT服务和自定义WCF服务来与其进行交互。如果您这样做, Net User 命令(抱歉没有链接 - 新用户限制)或 AddUsers (请参阅kb 199878 / en-us)实用程序可能就足够了。如果您的远程“控制器”可以直接针对目标计算机调用这些命令,则可能不必创建此需要的任何自定义软件地址。此外,您可以在目标计算机上维护和管理更少的软件。您只需使用内置的操作系统功能和管理实用程序。

最后,您需要考虑安全方面,NT服务和IIS通常在非常受限制的帐户下运行,许多审计员会翻转任何运行的服务,并且有足够的权限在本地创建或修改用户,尤其是在其他机器上。您需要确保该服务永远不会用于创建具有超出您指定的“身份验证”权限的用户。

编辑: net user 命令可能无法对其他计算机的本地用户起作用,但请检查。 pspasswd与PsExec一起创建用户,应该远程执行您需要的操作。

答案 1 :(得分:2)

只需在Windows服务中托管WCF服务即可。然后,您就可以远程调用它。

答案 2 :(得分:2)

您可以在Windows服务中托管WCF服务。看一下TCP绑定(NetTcpBinding类)。客户端和服务器都必须使用WCF,但这听起来不像是你的实现问题。

MSDN article中标题为“在Windows服务中托管”的部分提供了该过程的演练

答案 3 :(得分:1)

如果Windows服务发布远程处理界面,则可以通过该远程处理界面访问它。

否则它与访问远程计算机上运行的任何其他进程相同,除了可能有一些内置支持对远程计算机执行的工具(例如sc)(禁止防火墙并发症)。

适用任何IPC机制;套接字,网络服务,远程处理等......

答案 4 :(得分:1)

您可以直接从Windows服务公开WCF服务。当您启动Windows服务时,除了启动任何其他后台进程外,您还可以创建ServiceHost< T>的实例。为您的服务实施。这样您不仅可以提供WCF访问,还可以避免您请求的额外IIS实例,并提供TCP,命名管道和WsHttp端点。这应该会为性能调优领域提供一些很好的灵活性,因为听起来这个服务将在网络内部使用,而不是在外部使用。

答案 5 :(得分:0)

您可以创建一个WCF服务,该服务将与远程复选框上的Windows服务进行通信。在IIS中托管WCF组件(或者您希望它可以与之通信),然后从远程计算机调用WCF组件。