我有几个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>
基本上没有效果。
我对其他想法持开放态度。我此时基本上是在击打键盘。
感谢您的帮助。
答案 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[] { });