从 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 服务能够处理来自不同进程的调用而不是来自线程的调用