从 WCF 服务调用进程以在 WCF 服务帐户下运行

Posted

技术标签:

【中文标题】从 WCF 服务调用进程以在 WCF 服务帐户下运行【英文标题】:invoke a process from WCF service to run under the WCF service account 【发布时间】:2010-09-02 12:17:03 【问题描述】:
    我需要从 WCF 服务启动一个可执行文件,该服务应该在 WCF 服务使用的同一服务帐户下运行。 WCF 服务托管在 IIS 中,并配置为在特定服务帐户下运行。 我还需要获取该进程的句柄并将其保存在某处(例如在数据库中),以便在它意外运行很长时间时我可以稍后杀死它。 我应该能够使用不同的参数并行启动该进程的多个实例。

这是否可能,或者我是否需要创建一个 Windows 服务(假设它与可执行文件执行相同的操作)并使用一个帐户对其进行配置并从 WCF 服务启动它?请让我知道什么是正确的解决方案。谢谢。

【问题讨论】:

【参考方案1】:

您应该能够使用System.Diagnostics.Process 启动一个新进程并使用Start 方法。它将在它启动的上下文中运行。

【讨论】:

我认为情况并非如此,本文说它在受限权限msdn.microsoft.com/en-us/library/e8zac0ca(VS.90).aspx 下运行。它说“ASP.NET 网页和服务器控件代码在 Web 服务器上的 ASP.NET 工作进程的上下文中执行。如果您在 ASP.NET 网页或服务器控件中使用 Start 方法,新进程将在具有受限权限的 Web 服务器。该进程不会在与客户端浏览器相同的上下文中启动,并且无权访问用户桌面。”它不适用于 WCF 服务吗? 还有关于我的第二个问题的 cmet 吗?【参考方案2】:

如果您想稍后获取该进程的句柄,请将其 PID 保存到您的数据库或文件中。然后使用Process.GetProcessById 获取该句柄。

【讨论】:

[被 JustPixelz 拒绝编辑] 我没有尝试过这个,但假设它会像描述的那样工作。但是,如果您使用多个 IIS 实例进行工作负载平衡,请记住 PID 或其他引用仅适用于创建进程的计算机。另外,请记住,当您返回杀死它时,该进程可能尚未运行。或者更糟糕的是,PID 可能已经变成了一个不同的进程!

以上是关于从 WCF 服务调用进程以在 WCF 服务帐户下运行的主要内容,如果未能解决你的问题,请参考以下文章

从作为 LocalSystem 运行的 WCF 托管服务以特定用户身份启动进程

IIS 网络用户帐户可以调用在不同帐户下运行的 WCF 服务吗?

如何创建 PHP SOAP 客户端以在 SSL 下调用 WCF Web 服务?

为啥 WCF 服务能够处理来自不同进程的调用而不是来自线程的调用

如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名?

在域帐户下运行的 WCF 服务