自托管WCF需要以用户身份启动一个进程

Self-hosted WCF needs to start a process as a user

我有几个 Windows 服务器盒子,我正试图让它们进行艰巨而漫长的 运行 计算。我在每台机器上都安装了一个小型 WCF 运行 作为 Windows 服务,使用 net.tcp 在 SYSTEM 权限下。然后我有一个中央 'task master' 将发送一个 JobDescription 对象(我创建的)以允许这些机器执行他们的长期任务(一个需要大量资源和时间的 python 脚本)。为了启动它,我让工作人员创建一个 System.Diagnostic.Process 并用所有参数填充它。完成后,工作人员将通知任务主管。

我 运行 遇到的问题是 python 脚本需要读取和写入具有安全设置的网络驱动器,这样工作机器 SYSTEM 帐户就无法读取或写需要的东西。我尝试进入 Windows 服务工具并以特定用户身份启动工作机器进程,但我的任务管理器无法再连接到该进程。我收到以下错误:

     System.ServiceModel.CommunicationObjectFaultedException: The
    communication object, System.ServiceModel.Channels.ServiceChannel,
    cannot be used for communication because it is in the Faulted state.

我已经尝试将标识标签添加到任务主 .config 文件中:

    <identity>
      <servicePrincipalName value="winntdom/name@company.com" />
    </identity>

基本没有效果

我对其他想法持开放态度。我现在基本上是在用头敲键盘。

感谢您的帮助。

我想通了 eventually.I 必须获取地址并修改它,这样我才能连接到集群中的任何一台计算机。当我在代码中创建一个新端点时,我丢失了 app.config 文件中的标识。

旧:

address = new System.ServiceModel.EndpointAddress(String.Format@"net.tcp://{0}:8008/WorkerMachine/Daemon", machine_name));

`

新:

address = new System.ServiceModel.EndpointAddress(
                    new Uri(String.Format(@"net.tcp://{0}:8008/WorkerMachine/Daemon", machine_name)),
                    EndpointIdentity.CreateUpnIdentity("name@company.com"),
                    new System.ServiceModel.Channels.AddressHeader[] { });