从远程计算机调用Windows服务

3
我将编写一个Windows服务,用于向计算机添加用户(没有权限的用户,仅用于身份验证)。 (顺便说一句,我打算使用这种方法。)
我希望能够从另一台计算机调用此Windows服务。
如何做到这一点? 这是一个高要求的任务吗? 我最好只创建一个Web服务并在IIS中进行托管吗?
我在调用计算机上托管了一些WCF服务(它们将调用建议的Windows服务)。 我发现在IIS中托管有些棘手,因此除非必要,否则我不想再管理第二个IIS实例。
(我将使用Visual Studio 2008 SP1、C#和Windows Server 2003(对于调用方和服务主机)。
感谢您的帮助。
6个回答

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创建用户,可以远程完成所需操作。

谢谢DanO。以下是链接,供后续者使用:http://support.microsoft.com/default.aspx/kb/251394 - Vaccano

2

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


2
您可以将WCF服务托管在Windows服务中。请查看TCP绑定(NetTcpBinding类)。客户端和服务器都必须使用WCF,但这似乎不会成为您实现的问题。
此外,这篇MSDN文章中名为“在Windows服务中托管”的部分提供了该过程的详细步骤。

感谢提供额外的信息和链接到MSDN文章。 - Vaccano

1
如果Windows服务发布了远程接口,那么可以通过该远程接口访问它。
否则,与访问远程机器上运行的任何其他进程相同,只是可能有一些工具(例如sc)内置支持针对远程机器执行(除防火墙问题外)。
适用于任何IPC机制;套接字、Web服务、远程等...

网络服务套件的命令通常也支持远程目标。 - Shea
我喜欢这个想法。但是远程操作也有一定的难度(我只做过一次)。如果在Windows服务中运行WCF不起作用,我会尝试这个方法。 - Vaccano

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

0
你可以创建一个 WCF 服务,它将与远程计算机上的 Windows 服务通信。在 IIS 中托管 WCF 组件(或以其他方式进行通信),然后从远程计算机调用 WCF 组件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接