2011-05-07 55 views
0

假設我在SOA項目中有2個Web服務A和B.這兩個Web服務都在遠程服務器上運行。 Web服務A依賴於只能從本地安裝在人類角色機器上的桌面應用程序獲得的信息,並且所有Web服務A都會提供此信息)。有數百個這樣的人類演員使用同一本地安裝的應用程序提供Web服務A需要的自己的信息。 Web服務B需要來自Web服務A的這些信息,其結果(這是該項目的全部好處)被提供給發起該過程的人類演員(通過登錄到系統並單擊某個命令按鈕)。因此,這個人類角色的行爲就像Web服務B的使用者一樣。問題是,如何讓這個本地安裝的應用程序充當Web服務A(在SOA項目的上下文中)?如何將本地安裝的應用程序公開爲Web服務?

這個問題最好由一個在Web服務和SOA方面有豐富經驗的人來解答。

此SOA項目使用java,就像基於Java的ESB一樣,雖然桌面應用程序是Windows應用程序,但沒有Microsoft特定的服務正在運行。該應用程序爲外部進程提供c/C++ API來調用和檢索Web服務A所需的信息。我想要的是Web服務A和B都駐留在遠程服務器上,並通過ESB彼此交互,但問題是如何使Web Service A可用的本地應用程序信息?

回答

3

有兩種類型的解決方案

中的第一個:有原始的客戶端應用程序添加一個參數與Web服務的地址,並使用這個地址來調用服務。

第二種:從客戶端傳遞更抽象的用戶標識符(實際上,在服務中有很好的機會)。並使用翻譯服務來檢索與此ID相對應的物理地址。 要允許這樣的翻譯,作爲服務器的桌面應用程序需要在啓動時向翻譯服務「註冊」。

如果您正在使用ESB或其他SOA基礎結構(如服務目錄,消息隊列服務),它將包含構建翻譯服務所需的大部分功能。

關於服務在客戶機中的實際託管。

最簡單的解決方案是使用與實際應用程序不同的進程,並只訪問應用程序使用的文件或數據庫。 在這種情況下,您可以使用任何基礎設施來開發服務。

更復雜的情況是當您需要實際應用程序來提供服務時。在這種情況下,您將需要在應用程序中偵聽服務請求的線程。 如果您正在使用WCF,請參閱Hosting Services以瞭解如何在您的應用程序中託管Web服務。

編輯

一些補充關於你澄清。

據我所知,桌面應用程序公開了一個C \ C++ API,可用於同一臺機器上的外部進程。

您可以編寫將使用此API的Web服務。谷歌搜索「C++ Web服務Windows」將給出幾個相關的實現這些指針的指針。

另一個不錯的選擇是使用消息傳遞基礎結構。大多數JMS提供者都使用Java以外的語言提供API,包括C++。 您的應用程序將是一個C++的Windows服務,它偵聽並向您的JMS提供程序發送消息。

+0

謝謝您的輸入。我更新了我的問題,使其更加清晰。我對基於ESB的解決方案感興趣。您能否詳細介紹一下如何使用ESB來解決這類問題?對我來說,看起來我必須開發一個小型Windows客戶端,通過提供的API與桌面應用程序連接,並獲取這些信息,並以某種方式爲其提供Web服務A.通常,Web服務從網絡上的數據庫獲取其信息,但這種情況不同。 – ace 2011-05-08 19:00:51

+0

情景是這樣的:人類演員登錄到一個網站,並點擊一個按鈕,請求Web服務B提供的服務提供他的ID。 Web服務B使用此ID向Web服務A發送請求。 Web服務A使用此ID並知道該地址與哪個特定的Windows客戶端通信以獲取信息。這部分是如何工作的? – ace 2011-05-08 19:32:29

相關問題