无法在<server name =“”> </server> </service>上打开<service name =“”>服务

时间:2014-02-14 06:45:30

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

方案

计算机1 在服务器计算机1 上安装了 Windows服务 本地系统。 该服务有一些方法可以及时执行。

WCF网络服务在其他服务器计算机2 的IIS上以网络服务身份运行。

以下是在Machine 2的WCF Web服务中编写的代码片段,用于在Machine 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服务是本地系统
  3. 配置2

    1. WCF服务是网络服务
    2. Windows服务是本地服务
    3. 到服务exe,右键单击=&gt;安全性=&gt;以用户身份添加网络服务=&gt;并授予所有权限。
    4. 配置3

      1. WCF服务是网络系统。
      2. Windows服务是本地服务
      3. 运行=&gt; services.msc =&gt; select service =&gt;右键单击=&gt; properties =&gt;登录=&gt;选择允许服务与桌面交互。
      4. 配置4

        1. WCF服务是网络系统。
        2. Windows服务是本地服务
        3. 运行=&gt; services.msc =&gt; select service =&gt;右键单击=&gt; properties =&gt;登录=&gt;选择此帐号=&gt;添加网络服务作为没有密码的用户。
        4. 配置5

          1. WCF服务是网络服务
          2. Windows服务是本地服务
          3. 到服务exe,右键单击=&gt;安全性=&gt;在用户中添加了机器2以进行访问=&gt;并授予所有权限。
          4. 以上所有情况均无效。

            请帮忙。

            提前感谢

1 个答案:

答案 0 :(得分:0)

在一台计算机上运行在网络服务帐户下的服务将在其连接的任何其他计算机上标识为其运行的计算机的计算机帐户。

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

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

NetworkService

  

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


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