【问题标题】:Call A Windows Service from a remote computer从远程计算机调用 Windows 服务
【发布时间】:2009-07-02 16:09:06
【问题描述】:

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

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

这是怎么做到的?这是一项艰巨的任务吗?仅仅创建一个 Web 服务并将其托管在 IIS 中会更好吗?

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

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

感谢您的帮助

【问题讨论】:

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


    【解决方案1】:

    如果您想在 IIS 中托管 Web 服务只是为了与同一台机器上的 NT 服务进行通信,那么在这种情况下,肯定会带来更多麻烦。

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

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

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

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

    编辑:net user 命令可能不适用于另一台机器的本地用户,但请检查一下。 pspasswd 与 PsExec 一起创建用户,应该远程执行您需要的操作。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 感谢您提供额外信息和指向 MSDN 文章的链接。
      【解决方案4】:

      如果 Windows 服务发布了远程接口,则可以通过该远程接口访问它。

      否则,它与访问远程计算机上运行的任何其他进程相同,只是可能存在一些内置支持对远程计算机执行的工具(例如 sc)(除非防火墙复杂化)。

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

      【讨论】:

      • net services 命令套件通常也支持远程目标
      • 我喜欢这个主意。但是远程处理也有些困难(我只做过一次)。我会尝试这是在 Windows 服务中运行 WCF 对我不起作用。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2013-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多