为什么我不能从Web服务

为什么我不能从Web服务

问题描述:

我与客户的WinForms应用程序来包装它作为一个Web服务工作启动WinForms应用程序 - 这是不理想,但唯一的选择,我有瞬间。为什么我不能从Web服务

的WinForms应用程序可以通过命令行的一些参数,使它能够产生一些输出文件,我可以然后过程并返回用户调用。该命令行界面基本上启动GUI,预先填充一些输入字段(通过命令行参数提供),生成输出文件并退出。

从我的web服务我使用的Process.Start()来运行应用程序,等待它退出,然后处理输出文件返回到客户端。 (虽然GUI显示在服务器上,但我不希望任何用户看到这一点)。

当使用IIS Express以调试模式(Visual Studio 2017)运行时,代码按预期工作 - 我对Web服务进行适当调用,WinForms应用程序启动(我可以在屏幕上看到它)和做它的事情,然后自动关闭,预期的输出文件被发现在预期的地方。基本上,它全部按照设计运行。

但是,当我部署到相同的服务器,但在IIS(而不是IIS Express)下的主机时,它不再有效。当我打电话给Web服务时,我可以在任务管理器中看到启动WinForms应用程序...但是它立即停止UI本身不显示。在此之后,与WinForms应用程序相关的内存保持不变(在比正常工作时低得多的水平),并且API调用最终超时。

我在IIS改程序池用我的管理员帐户,并与WinForms应用程序相关联的所有文件夹具有相同的管理帐户“完全控制”权限。当WinForms应用程序启动时,它也与同一个管理员帐户相关联(也与IIS Express使用的帐户相同)。

难道不具有的权限启动了一个GUI应用程序如IIS一些事情,但IIS快车呢?

我如此搜查了类似的问题,但没有帮助解决这个问题(大多涉及Web服务的根目录下访问文件时,并不可能出现的常用文件夹的访问权限)。

Web服务托管在Windows Server 2016 Datacenter上。

编辑

我做了一个小的进步 - 按照其中一个答案在IIS7 does not start my Exe file by Process Start but it's running in task bar我改变了应用程序池设置加载用户配置文件= TRUE(https://i.stack.imgur.com/2pIyr.png)。现在当我尝试时,我可以在任务管理器中看到WinForms应用程序,内存变化类似于我所期望的,并且应用程序似乎退出。 GUI没有显示出来,预期的输出文件没有被创建,并且web服务process.WaitForExit()似乎没有收到退出事件(由于当WinForms应用程序退出时流程实例丢失,它会引发错误) 。

编辑

只是澄清,这是一个演示因此该解决方案不需要反映生产的最佳实践。

+0

您是否将“万维网发布服务”配置为“允许服务与桌面交互”? (在我的Win10pro机器上,这是在“登录”选项卡上,但只有在选择“本地系统”帐户时才可用 – theGleep

+0

感谢您的建议,我没有尝试过,我更改了设置并执行了重新启动。这似乎没有什么区别,我想知道是否有另一种服务需要类似的权限 – ProfNimrod

+0

有一种叫做“会话隔离”的东西,学习并理解系统会话和登录会话之间的障碍,那么你会看到应该做什么 –

鉴于问题似乎与IIS有关(我完全不了解这一点),并且使用IIS Express在调试模式下运行工作正常,而且这是针对演示(而非生产)的,所以我决定只是简单地在IIS Express中使用主机,并使用VS 2017的传送带插件(https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti)允许远程调用(默认情况下不允许使用IIS Express)。

一旦输送机安装完毕并且服务器防火墙上打开了适当的端口(并且添加到我用于此演示的Azure虚拟机上的网络接口上),则所有操作都如希望的那样进行。

这不是一个长期的解决方案,当然不是一个生产解决方案,但它符合当前的目的。我可以轻松地拒绝在WinForms应用程序运行时进入的任何请求。