如何将本地安装的应用程序公开为Web服务?

时间:2011-05-07 09:54:48

标签: web-services soa

假设我在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提供本地应用程序信息?

1 个答案:

答案 0 :(得分:3)

有两种类型的解决方案

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

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

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

关于在客户端计算机中实际托管服务。

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

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

修改

关于你澄清的一些补充。

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

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

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