許多人視 Web Service 為 .NET 與 Java 互操作的萬靈丹,但微軟在 JavaOne 大會上直言:放棄 Web Service 可能是更好選擇。本文剖析三種 Web Service 無法勝任或極不適合的互操作場景,並介紹 Java/.NET Bridge 等替代方案。
真正的互操作定義
允許在任何地方用 .NET 程式碼替代 Java 程式碼:從 .NET 存取任意 Java 實體(物件、類別、方法),反之亦然。
三大 Web Service 失效場景
場景一:在 Java 應用內嵌入 .NET UI 控制項
- 需共用視窗控制代碼,必須在同一進程
- Web Service 為鬆散耦合、獨立進程,無法交換視窗控制代碼
- 結果:Web Service 根本無法實現
場景二:從 Java 呼叫 .NET 程式庫
- 常見原因:既有 .NET 元件、授權成本、功能優勢
- Web Service 適用於大型獨立組件通訊,非進程內程式庫整合
- 同機器跨進程呼叫顯得「殺雞用牛刀」,且效能損耗大
場景三:使用 Java API 註冊 .NET 監聽器(非同步事件)
- 例:JMS 發送/接收訊息,需註冊監聽器
- Web Service 不擅長非同步,需自行實作輪詢或回調機制
- 輪詢:Client 持續詢問、Server 儲存結果
- 回調:Client 內嵌反向 Web Service
- 兩者皆需大量基礎建設,極不划算
替代方案:Java/.NET Bridge
- 進程內互操作:共享記憶體、直接呼叫、低延遲
- 支援 UI 控制項嵌入、程式庫直接呼叫、事件/監聽器註冊
- 甚至適用於 Web Service 能處理的場景,效能更好、開發更簡單
- 代表工具:JNBridge、IKVM、Javonet 等
決策矩陣