【问题标题】:Cannot open <service name> service on <server name>无法在 <服务器名称> 上打开 <服务名称> 服务
【发布时间】:2014-02-14 06:45:29
【问题描述】:

场景

在服务器 Machine 1 上安装了一个 windows 服务 作为本地系统。 该服务有一些方法可以及时执行。

有一个 WCF 网络服务在 IIS 上以 网络服务 身份在不同的服务器 Machine 2 上运行。

下面是用机器2的WCF web服务编写的sn-p代码,用来调用机器1上的Windows服务。

            ServiceController service = new ServiceController("Windows Service Name", "Machine 1");
            if (service != null)
            {
                service.ExecuteCommand((int)SimpleServiceCustomCommands.WallCacheRefresh);
            }

执行上述代码时,会抛出异常。

例外:

类型:System.InvalidOperationException。

消息:无法在计算机 机器 1 上打开 服务名称 服务。

附加信息: 消息:访问被拒绝。

尝试设置

配置1

  1. 将 WCF 服务的标识更改为本地系统。
  2. Windows 服务是本地系统

配置2

  1. WCF 服务是网络服务
  2. Windows 服务是本地服务
  3. 到服务exe,右键=>安全=>以用户身份添加网络服务=>并授予所有权限。

配置 3

  1. WCF 服务是网络系统。
  2. windows 服务是本地服务
  3. 运行 => services.msc => 选择服务 => 右键单击​​ => 属性 => 登录 => 选择允许服务与桌面交互。

配置4

  1. WCF 服务是网络系统。
  2. windows 服务是本地服务
  3. 运行 => services.msc => 选择服务 => 右键单击​​ => 属性 => 登录 => 选择此帐户 => 将网络服务添加为无密码用户。

配置5

  1. WCF 服务是网络服务
  2. Windows 服务是本地服务
  3. 到服务 exe,右键单击 => 安全 => 在用户中添加机器 2 以供访问=> 并授予所有权限。

上述方案均无效。

请帮忙。

提前致谢

【问题讨论】:

    标签: c# .net web-services wcf service


    【解决方案1】:

    在一台机器上以网络服务帐户运行的服务将在它连接到的任何其他机器上被识别为运行它的机器的机器帐户。

    因此,在机器 1 上,您应该为 机器 2 设置访问 windows 服务的权限。

    或者,我自己的偏好是为这两个服务选择不同的通信方式。通过服务控制管理器进行通信似乎有点笨拙。

    NetworkService:

    在 NetworkService 帐户上下文中运行的服务将计算机的凭据提供给远程服务器。


    您需要设置的权限在服务的安全描述符上 - 而不是在 exe 文件上。有关调整安全描述符的各种方法,请参阅 this question(关于非管理员,但有类似考虑)。

    【讨论】:

    • 也尝试了您要求的配置。忘记在这里详述了。已编辑问题并将其添加为 Config 5。但它仍然没有工作
    • @RaviSankarRao - 见编辑。服务的exe文件的权限与此无关。
    猜你喜欢
    • 1970-01-01
    • 2018-09-20
    • 2017-03-02
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多