.net IIS托管的WCF服务能否运行显示UI的应用程序

.net IIS托管的WCF服务能否运行显示UI的应用程序,.net,wcf,iis,.net,Wcf,Iis,我有一个应用程序,通常是一个典型的GUI文档编辑应用程序。它有一个“批处理模式”,因此用户可以使用一些参数运行它并获得结果文档。问题是,即使在批处理模式下运行,应用程序也会显示UI(它会显示、执行某些操作,然后自行退出) 问题是-我是否可以在服务器上的IIS中以批处理模式运行此应用程序的WCF服务 我花了两天的时间试图这样做,但没有成功。我看到该进程正在服务器上的任务资源管理器中运行,但它不执行任何操作,不产生任何结果,也不会正常退出 通过IIS托管的WCF服务运行UI的应用程序是否有任何限制?

我有一个应用程序,通常是一个典型的GUI文档编辑应用程序。它有一个“批处理模式”,因此用户可以使用一些参数运行它并获得结果文档。问题是,即使在批处理模式下运行,应用程序也会显示UI(它会显示、执行某些操作,然后自行退出)

问题是-我是否可以在服务器上的IIS中以批处理模式运行此应用程序的WCF服务

我花了两天的时间试图这样做,但没有成功。我看到该进程正在服务器上的任务资源管理器中运行,但它不执行任何操作,不产生任何结果,也不会正常退出


通过IIS托管的WCF服务运行UI的应用程序是否有任何限制?

是的,服务在与桌面交互方面有限制


将您的业务逻辑放在一个单独的库中,将您的服务提取到一个单独的项目中,最后将您的GUI连接到两者。现在,您已经重新构建了已有的应用程序,并且有了一个额外的功能:您现在可以创建一个新的库或Windows服务项目,并引用业务逻辑和服务代码。最后一个项目可以托管在IIS中或作为Windows服务,而无需显示任何GUI。

@CodeCaster是正确的。WCF服务本身不公开UI。然而,正如您所说,您的应用程序能够以批处理模式运行;在这种模式下,它仍然显示一个UI

可能有一种方法可以让WCF服务以批处理模式启动并运行此GUI程序。您需要创建一个Windows用户帐户,服务将在该帐户下运行。创建WCF服务并将其作为Windows服务安装后,从管理工具中打开服务小程序。右键单击服务并选择属性。然后单击“登录”选项卡,并指定为该服务创建的Windows用户帐户的用户名和密码。(当然,WindowsServer2008R2和2012有新的服务帐户,也可以做到这一点。)

此场景的关键在于,您必须为您创建的用户帐户赋予与桌面交互的权限。这是一个安全问题,因为您可能有一个管理员级别的帐户(取决于您如何设置)自动运行,并具有与桌面交互的权限

这种方法的另一个问题是,如果GUI程序需要任何类型的用户输入(即发生错误或显示对话框),服务帐户无论如何都无法单击任何按钮或确认任何内容。这就是为什么不鼓励这种方法

如果程序是用.NET编写的,并且是您公司的内部代码,您可以尝试将ILDASM转换为程序二进制文件,或者使用ILSpy或RedGate的.NET Reflector等工具,对程序进行反向工程,并将其分为多个组成部分(假设代码没有混淆)-一个提供批处理的服务DLL,当你想以交互方式运行程序时,你可以使用GUI。然后,可以重新使用服务DLL(正如@CodeCaster所说),通过您将创建的WCF服务以“批处理”模式运行逻辑,同时避免运行当前程序GUI所需的与桌面交互的讨厌的


这并不是一个完美的答案(如果答案是有的话),但我希望它能有所帮助。

问题是——我从WCF运行的应用程序是一个已经构建的应用程序,我无法访问代码。