2009-07-02 96 views
3

我将编写Windows服务以将用户添加到计算机(没有权限的用户,即仅用于身份验证)。 (作为一个方面说明,我打算使用this method。)从远程计算机拨打Windows服务

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

这是如何完成的?这是一个很高的命令吗?我会更好的创建一个Web服务并将其托管在IIS中吗?

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

(我将使用Visual Studio 2008 SP1,C#和Windows Server 2003(用于调用程序和服务主机)。

感谢您的帮助

回答

3

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

正如其他答案已经表明你可以使用你需要的操作来创建一个WCF服务,并将它托管在你想要与之交互的同一个NT服务中。您可以轻松地通过证书或用户帐户来确保它只受合适的人员/机器控制。

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

但是,您可能需要考虑寻求解决方案,而不需要创建自定义NT服务和自定义WCF服务来与之交互。如果这样做,那么命令(对不起链接 - 新用户限制)或AddUsers(请参阅kb 199878/en-us)实用程序可能就足够了。如果您的远程“控制器”可以直接针对目标机器调用这些命令,则您可能不必创建任何需要的自定义软件地址。此外,您将拥有更少的软件来在目标机器上进行维护和管理。您只需使用内置的操作系统功能和管理实用程序。最后,您需要考虑安全方面,NT-services和IIS通常在非常受限制的帐户下运行,许多审计人员将在具有足够权限运行的任何服务上进行本地创建或修改用户的操作,并且特别是在其他机器上。您需要确保该服务永远不会用于创建超过您指定的“身份验证”权限的用户。

编辑:网络用户命令可能不会针对另一台机器的本地用户,但检查出来。 pspasswd与PsExec一起创建用户,应该做你需要的远程。

1

如果窗口服务发布一个远程接口,那么它可以通过远程访问接口访问

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

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

+0

网络服务套件命令也通常支持远程目标 – 2009-07-02 16:13:10

+0

我喜欢这个想法。但远程处理也有点困难(我只做过一次)。我会尝试这是在Windows服务中运行WCF不适合我。 – Vaccano 2009-07-02 17:29:46

0

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

2

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

2

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

此外,题为“在Windows服务托管”在这个MSDN article部分提供了过程

+0

感谢您的额外信息和MSDN文章的链接。 – Vaccano 2009-07-02 17:30:44

1

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