自托管WCF需要以用户身份启动流程

时间:2015-01-27 17:26:51

标签: c# .net wcf

我有几个Windows Server机箱,我试图进行艰苦而长时间运行的计算。我在这些计算机上安装了一个小型WCF,它使用SYSTEM权限下的net.tcp作为Windows服务运行。然后,我有一个中央任务大师'这将发送一个JobDescription对象(我​​创建),以允许这些机器执行他们的长任务(一个需要大量资源和时间的python脚本)。为了启动它,我让worker创建一个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>

基本上没有效果。

我对其他想法持开放态度。我此时基本上是在击打键盘。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我最终弄明白了。我不得不接受地址并对其进行修改,以便连接到群集中的任何计算机。当我在代码中创建新端点时,我从app.config文件中丢失了身份。

OLD:

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[] { });