Java和.NET互操作:放棄Web Service

iDotNetSpace發表於2009-10-27
Web Service是一個基於標準的、混合.NET和Java技術的服務,常用於互操作性的實現。那麼,Web Service真的是用於實現.NET和Java互操作性的萬能答案麼?本文作者認為不是,並建議開發人員準備多種Java和.NET互操作解決方案。

  通過Web Service混合.NET和Java技術往往很容易,但Web Service並非是.NET和Java互操作的萬靈丹。Web Service在整合獨立的跨網路通訊的元件時非常有用,在簡單的呼叫/返回情景中,涉及的資料型別數量非常有限,且Web Service是基於標準的,混合.NET和Java技術通常顯得很簡單,因此有人認為Web Service是實現.NET和Java互操作的萬能答案,但事實卻並非如此。

  在搜尋引擎中搜尋一下“Java .NET互操作”將會返回很多搜尋結果,但聽過今年6月JavaOne會議上微軟主題演講的人應該還有印象(違規廣告編者注:互操作性在近年來成為了微軟的關注重點之一,不僅僅是Java,還有PHP互操作性等等),微軟說放棄Web Service可能是最好的辦法。這是很不幸的訊息,因為對於很多工,Web Service並不是Java和.NET互操作的理想解決方案,而且對於部分任務,根本不可能使用Web Service。在這篇文章中,我會列舉三個Java和.NET互操作情景,如果使用Web Service實現會被認為是愚蠢的行為。

  首先,我先說一下我認為的Java和.NET互操作的含義,真正的Java和.NET互操作機制應允許你在任何地方使用.NET語言編寫的程式碼代替用Java語言編寫的程式碼,換句話說,它應該允許你從.NET程式碼中訪問任何基於Java的實體(如物件,類或方法),反之亦如此。

  情景1 在Java應用程式中嵌入.NET UI控制元件

  假設你要在基於AWT的Java應用程式中使用一個Windows窗體控制元件,標準的做法是獲得與AWT容器對等的控制程式碼,然後使用該控制程式碼設定Windows窗體控制元件的父物件為AWT容器,你可以使用一個Web Service實現這類互操作。

  Web Service是鬆散耦合的,服務和客戶端執行在獨立的程式中,因為是獨立的程式,你就不能交換視窗控制程式碼,控制程式碼只在同一個程式中才有效,有意義,換句話說,這是一個必須緊密結合才能互通的情況,這種情況Web Service不能適應,想在基於Java的GUI應用程式中嵌入基於.NET的控制元件,開發人員必須想另外的辦法,反之亦如此。

  情景2 從Java應用程式中呼叫.NET程式庫

  如果你想在Java程式中呼叫.NET程式庫,那你可能正處於以下環境:

  1)已經在.NET開發中使用過這個庫,你想在Java環境中繼續使用;

  2)已經花錢購買過.NET程式庫,不想再花錢購買Java程式庫;

  3)不考慮平臺差異的話,這個程式庫可能是最好使用的了。

  在這種情況下,你可以使用Web Service從Java訪問.NET程式碼,但這種用法似乎有點小題大做,Web Service更適合兩個更大的獨立元件之間的通訊,而不是將一個庫整合到一個更大的系統中去。如果程式庫就在同一臺機器上,非要建立一個Web Service來訪問這個庫顯得有點過分,在這種情況下,在Java程式程式內執行基於.NET的程式庫意義更大,但採用Web Service是做不到的。

  情景3 使用Java API註冊.NET監聽器

  假設你使用了JMS(Java訊息服務),想建立一個.NET元件來向它傳送訊息,以及從它那裡接收訊息。向JMS傳送訊息一般使用JMS API中的各種傳送函式,通過在JMS基礎架構上註冊監聽器來接收訊息。

  你也可以使用Web Service來實現,但它並不擅長處理非同步通訊,如果你真要使用Web Service實現非同步通訊,你有兩個選擇:

  1)實現一個輪詢機制,客戶端反覆輪詢服務獲得結果,當得到結果後,服務將其放在一個預定的地方,輪詢操作就會發現它。

  2)實現一個回撥機制,客戶端留下回復地址,當獲得結果後,服務將結果發往該地址。

  不幸的是,這兩個機制都需要實現重大的基礎架構,使用輪詢機制時,需要實現輪詢機制,還需要為服務提供一個機制放置結果,以便輪詢機制可以找到它,使用回撥時,必須在客戶端嵌入一個全新的“反向”Web Service,以便原始服務可以聯絡到它,並返回非同步結果。

  這兩個方法都不完美,如果你想一個應用程式簡單地呼叫一個程式庫,Web Service需要實現超乎任務需要的機制,必須要有更好的方式來做到這一點。

  Java和.NET互操作需要的附件工具

  對於複雜的Java和.NET互操作需求(如在Java程式中呼叫.NET庫,或使用Java API註冊一個.NET監聽器),Web Service強迫你另起爐灶,你必須建立複雜的基礎架構——通過套接字交換XML——完成本應該很簡單的任務,可以說這麼做顯得很愚蠢,對於其它任務,如在Java程式中嵌入.NET UI控制元件,使用Web Service根本是不可能的。

  開發人員和架構師工具箱應該擁有很多Java和.NET互操作解決方案,對有些情況可能有用,但對於許多互操作任務,你需要不同的工具,當Web Service滿足不了要求時,Java和.NET橋接器可能會有用,甚至在那些可以使用Web Service的情景中,使用Java和.NET橋接器可能效率更好,並且更易於使用。

  如果你理解了Web Service在互操作性方面的限制,並熟悉其它解決方案,你就可以在你的應用程式中同時充分利用Java和.NET技術。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-617536/,如需轉載,請註明出處,否則將追究法律責任。

相關文章