【问题标题】:Could IIS hosted WCF service run application that shows UIIIS 托管的 WCF 服务能否运行显示 UI 的应用程序
【发布时间】:2013-05-28 11:47:12
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net wcf iis


    【解决方案1】:

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

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

    这种情况的问题是,您必须授予您创建的用户帐户与桌面交互的权限。这有点安全问题,因为您可能有一个管理员级别的帐户(取决于您的设置方式)自主运行并有权与桌面交互。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 问题是 - 我从 WCF 运行的应用程序是一个已经构建的应用程序,我无法访问代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多