直接觀看文章

Hessian 經驗

26 十二月, 2006

Sigma 學長可說是 Spring 高手,某天在他 office 聊到關於 Project 的事,討論到最後,學長提到這個用來做 remoting 的玩意︰Hessian

基本上就是先定好服務的 Interface 名稱,接著在 Server 端實作出這些 Interface 並接受 client 來進行連線服務,於是一個基本的 Web Service 便形成了。

Hessian 的好處不只它是個 Binary Protocol,更重要的是支援跨平台!! 微軟的 .NET 平台也是有 C# 的實作版本。而故事便是從這個好處開始的…

我的 Project 是從 Windows Mobile 的行動裝置上透過網路來存取 Server 上的相關資訊,在跟 Sigma 學長討論後,發現 Hessian 相當符合我們的需求,學長在 Server 端是利用 Hessian 建立一系列的 Service,於是不管 client 是用什麼語言去實作都無所謂,只要是 Hessian 有支援的版本且雙方定義好 Service 的 Interface 就可以順利與 Service 做溝通。

整個測試原本都在 PC 上來做,後來 deploy 到手機時才發現會跑出 Exception,看一下訊息,是寫說︰

not supported in compact version.

喔喔,竟然沒有支援 Compact Framework,好奇之下跑去看 CHessianProxyFactory.cs 的原始碼,還真的有定義遇到是 Compact Framework 的環境就整個跳過…

只好再回頭去翻一下網站給的範例,這就是不認真看範例的下場,其實在 Compact Framework 上是不能直接用 factory 物件做 Create() 這個動作,得稍微繞一下路,先以 Reflection 的方式取得指定的 method 名稱,用 MethodInfo 物件接起來後,再建立 CHessianMethodCaller 的物件,最後把剛剛的 MethodInfo 物件丟到這個 CHessianMethodCaller 物件就差不多了︰

CHessianMethodCaller methodCaller = new CHessianMethodCaller(factory, new Uri(url));
MethodInfo mInfo = typeof(BioDoctorService).GetMethod("authenticate");
object result = methodCaller.DoHessianMethodCall(new object[] {}, mInfo);

回傳的 result 物件就是結果啦~~

No comments yet

發表留言