【问题标题】:How to expose locally installed application as Web Service?如何将本地安装的应用程序公开为 Web 服务?
【发布时间】:2011-05-07 09:54:48
【问题描述】:

假设我在 SOA 项目中有 2 个 Web 服务 A 和 B。这两个 Web 服务都在远程服务器上运行。 Web 服务 A 依赖于仅可从人类演员机器上本地安装的桌面应用程序获得的信息,这就是 Web 服务 A 所做的所有事情,即提供此信息)。有数百个这样的人类参与者具有相同的本地安装应用程序,提供 Web 服务 A 需要的自己的信息。 Web 服务 B 需要来自 Web 服务 A 的此信息,其结果(这是该项目的全部好处)提供给发起此过程的人类参与者(通过登录系统并单击某个命令按钮)。所以这个人的行为就像 Web 服务 B 的消费者。问题是我怎样才能让这个本地安装的应用程序充当 Web 服务 A(在 SOA 项目的上下文中)?

这个问题最好由在 Web 服务和 SOA 方面具有丰富经验的人来回答。

此 SOA 项目使用 Java,例如基于 Java 的 ESB,尽管桌面应用程序是 Windows 应用程序,但没有运行 Microsoft 特定的服务。该应用程序为外部进程提供 c/C++ API 来调用和检索 Web 服务 A 所需的信息。我想要的是 Web 服务 A 和 B 都托管在远程服务器上并通过 ESB 相互交互,但问题是如何使本地应用程序信息对 Web Service A 可用?

【问题讨论】:

    标签: web-services soa


    【解决方案1】:

    有两种解决方案

    第一种:让原始客户端应用程序添加一个带有Web服务A地址的参数,并使用该地址调用服务。

    第二个:从客户端传递一个更抽象的用户标识符(实际上,你很有可能在服务中有这样一个字段)。并使用翻译服务来检索与此 id 对应的物理地址。 为了允许这样的翻译,作为服务器的桌面应用程序需要在启动时向翻译服务“注册”。

    如果您使用的是 ESB 或其他 SOA 基础架构(如服务目录、消息队列服务),它将包含构建翻译服务所需的大部分功能。

    关于服务在客户端机器中的实际托管。

    最简单的解决方案是使用与实际应用程序不同的进程,只访问应用程序使用的文件或数据库。 在这种情况下,您可以使用任何您喜欢的基础设施来开发服务。

    一个更复杂的场景是当您需要实际的应用程序来提供服务时。在这种情况下,您需要在应用程序中有一个线程来监听服务请求。 如果您使用 WCF,请参阅Hosting Services,了解如何在您的应用程序中托管 Web 服务。

    编辑

    关于您的说明的一些补充。

    据我了解,桌面应用程序公开了一个 C\C++ API,可用于同一台机器上的外部进程。

    您可以编写一个将使用此 API 的 Web 服务。谷歌搜索“C++ Web Services Windows”将为您提供一些实现这些的相关指针。

    另一个不错的选择是使用消息传递基础架构。大多数 JMS 提供程序以 Java 以外的语言提供 API,包括 C++。 您的应用程序将是一个 C++ Windows 服务,它侦听并向您的 JMS 提供者发送消息。

    【讨论】:

    • 感谢您的意见。我更新了我的问题以使其更清楚。我对基于 ESB 的解决方案很感兴趣。您能否详细说明如何使用 ESB 来解决此类问题?在我看来,我必须开发一个小型 Windows 客户端,通过提供的 API 连接到桌面应用程序并获取这些信息并以某种方式为其提供 Web 服务 A。通常 Web 服务从网络上的数据库中获取它们的信息,但这种情况不同.
    • 场景是这样的:人类演员登录到一个网站并单击一个按钮,该按钮请求 Web 服务 B 提供的服务,并发送他的 ID。 Web 服务 B 使用此 ID 向 Web 服务 A 发送请求。 Web 服务 A 使用此 ID 并知道与特定 Windows 客户端通信以获取信息的地址。这部分是如何工作的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多