雲計算近年來非常火熱,已經成為目前繼SOA、Web2.0之後又一個熱門的話題。Amazon.com、Google和Microsoft都相繼推出了自己的雲計算平台。Microsoft的雲計算平台叫做Azure,最初釋出的開發包支援Visual Studio 2008,最新推出的Visual Studio 2010更是內建了Azure開發工具,讓Azure雲計算開發變得更加友善容易。
微軟雲技術平台不但可以對微軟WCF等技術的支援外,而且還可以對第三方通信技術強有力的支援,進而擴大了微軟雲計算技術在企業中的普及與應用。Hprose(High Performance Remote Object Service Engine)既是一種新型的通信技術,它是一款第三方高性能跨語言跨平台的遠端對象服務引擎,并支援衆多語言和平台,包括主流的.NET、Java、PHP、Python、Ruby、JavaScript、ActionScript、Delphi、FreePascal、Objective-C、ASP、Perl、C++等。在這些支援的語言之間可以實作友善且高效的互通,能夠有效的取代WebService實作跨語言跨平台高幾倍效率的分布式電信級的解決方案。
在雲計算開發應用中網絡通信速度效率尤為重要。支援上面提到的所有雲計算平台,但通過筆者的測試,本文将對第三方通信方法(Hprose)在微軟雲計算平台上,通過使用Microsoft Visual Studio 2008/2010建構一個應用,進而能使您能高效便捷的建立功能強大的跨平台、跨語言、分布式的雲體驗。
準備
開始之前需要首先安裝以下環境:
Windows作業系統(推薦Windows7)
Visual Studio 2008/2010
Windows Azure Tools for Microsoft Visual Studio 1.1
Hprose開發包(無需安裝)
試用下載下傳位址:http://www.hprose.com/
PHP5(Non Thread Safe版本)
其中,PHP5僅用于Web CGI Role方式下。
開始
打開Microsoft Visual Studio 2008/2010,選擇“File->New->Project…”,然後選擇Cloud->Windows Azure Cloud Service,我們給該項目取名為HproseOnCloudService,然後點OK,如圖1所示。
Hprose支援在ASP.NET Web Role、Worker Role和CGI Web Role這三種規則進行部署,是以這裡我們選擇這三種規則,并分别取名為HproseServiceWebRole、HproseServiceWorkerRole和HproseServiceWebCgiRole。然後點選OK。項目就建好了。
下面我們來看一下在這三種不同的規則下,如何開發部署Hprose服務。
Hprose在ASP.NET Web Role下的服務釋出
先看第一種規則——ASP.NET Web Role。
HproseServiceWebRole項目建立後,會預設生成一個Default.aspx頁面。我們可以直接從修改它開始,但在修改之前,我們還需要做點小工作,那就是添加Hprose.dll引用。如圖3所示。
在項目的References上點選右鍵,選擇Add Reference…,然後選擇Hprose.dll即可。因為Azure目前隻支援.NET Framework 3.5,尚不支援.NET Framework 4(雖然Hprose支援)。是以Hprose.dll也要選擇相應的版本,另外System.Numerics.dll也需要一同添加。
接下來,将Default.aspx中多餘的HTML和空白全部删除,隻保留第一行的ASP.NET标簽。如圖4所示。
然後我們為工程添加一個建立C#的Class檔案,名字任意,這裡我們取名為Example.cs。如圖5所示。
然後編輯其代碼如下:
這個類用于定義我們要釋出的服務,你會發現我們定義的類不需要繼承任何接口。這裡限于篇幅我們釋出的方法都比較簡單,實際上除了可以傳回簡單類型、容器類型以外,還可以傳回複雜的可序列化對象類型,關于Hprose支援類型的詳細介紹請參見Hprose for C#手冊。
接下來我們修改Default.aspx.cs檔案:
這樣,一個Hprose伺服器就完成。
預設情況下,服務端口号是80,但80通常被IIS所占據,是以Azure會自動選擇81端口,為了使用固定端口,我們這裡手動将端口号改為8001。如圖6所示。
當然,上面這一步是可選的,你也可以省略這一步。
接下來選擇按F5,服務會自動進行部署。浏覽器會自動打開,并顯示一下内容:
這說明服務已經成功釋出了。接下來我們就可以用Hprose用戶端來調用它了。
Hprose提供了專業的服務調試工具——Nepenthes(忘憂草),通過它,你不需要編寫一行代碼,就可以直接調試伺服器。
隻需要輸入伺服器網址,然後點選Get Functions就可以得到所有的服務方法。
每個方法都可以直接輸入參數進行調用,多個參數之間使用逗号分隔,參數格式以JSON方式輸入。
另外,該工具是多國語言的,目前支援英文、簡體中文和繁體中文。
下面是使用該工具調試剛剛釋出的服務的截圖,如圖7、圖8和圖9所示。
這裡的Hprose服務是使用C#編寫的,但是你可以在任何Hprose支援的語言中進行調用,因為本文重點是介紹Hprose服務在微軟雲平台上的開發與部署,是以這裡就不再為用戶端舉例了,如果讀者有興趣,可以參考Hprose手冊。
Hprose服務在ASP.NET Web Role下釋出從靈活性上來說比較強大,雖然上面我們的例子是按照請求模式釋出的服務,但實際上你還可以按照全局模式或者會話模式來釋出服務,對服務的釋出也可以細化到每一個方法,甚至可以在釋出的方法中存取ASP.NET的上下文對象。但是從性能上來說,這種方式不夠高效,性能僅僅跟WCF Service Role的BasicHttpBinding的性能相當,比WSHttpBinding的性能高1倍。難道還可以比WCF Service Role更高效嗎?是的。完全可以。下面要介紹的Worker Role方式下的Hprose服務可以比的WCF Service Role的BasicHttpBinding的性能高3-5倍,比WSHttpBinding的性能高出7-9倍,幾乎可以高出一個數量級。
Hprose在Worker Role下的服務釋出
跟ASP.NET Web Role下類似,首先要添加Hprose引用,這一步操作相同,這裡不再重複。
之後添加一個Example.cs,内容也與ASP.NET Web Role下的Example.cs類似,僅僅是名稱空間有點變化(從HproseServiceWebRole變為HproseServiceWorkerRole)。這裡也就不再重複列出代碼了。
下面我們看重點,那就是對WorkerRole.cs的修改,主要修改的是它的Run方法,其它方法無需改動,修改後的代碼如下:
從上面的代碼中我們可以看出,在Worker Role方式下,我們是通過建立一個Hprose獨立伺服器來釋出服務的。下面按下F5就可以調試了。因為在Worker Role方式下,浏覽器不會自動打開,我們可以自己打開浏覽器并鍵入:http://127.0.0.1:8010/,然後回車,我們會看到跟ASP.NET Web Role方式下同樣的内容。使用Nepenthes調試效果也是完全相同的。但這種方式下釋出的服務性能是相當高效的。
在Worker Role下除了可以釋出C#編寫的Hprose服務之外,你還可以通過運作Jetty伺服器來釋出Java編寫的Hprose服務,但運作Jetty較為複雜,網上也有相應介紹,這裡就不做介紹了。
上面介紹的兩種方式釋出的服務都是C#編寫的,而下面的CGI Web Role方式下則可以釋出PHP的Hprose服務。
Hprose在CGI Web Role下的服務釋出
首先将下載下傳的PHP解壓縮後,連同php目錄一起放入HproseServiceWebCgiRole目錄下,并将php.ini-production(或php.ini-development)複制一份改名為php.ini,然後将hprose for PHP也複制到該目錄下的hprose目錄下。之後将這些檔案連同目錄一同添加到工程當中,如圖10所示。
然後編輯Web.roleconfig檔案:
接下來編輯Web.config中system.webServer段,添加如下内容:
最後,建立一個index.php檔案,内容如下:
這段代碼釋出的是PHP的内置函數md5。
注意,index.php儲存時一定要選擇UTF-8 without signature編碼,否則服務将不能被調用,如圖11所示。
之後,按F5,服務就釋出了,之後你會看到浏覽器中顯示如下内容:
我們可以用Nepenthes(忘憂草)來調試該服務,如圖12所示。
也可以自己通過Hprose用戶端來調用該服務,下面我們建立一個.NET用戶端來調用一下該服務看一下,我們建立一個新的項目。如圖13所示。
為了友善,我們這裡使用控制台程式作為示範。之後先添加Hprose.Client.dll的引用,然後修改Program.cs内容如下:
然後運作該程式,就可以看到以下結果了。
總結
微軟的雲計算平台無疑是.net技術的最好展現,可以通過微軟Microsoft Visual Studio 2008/2010進行雲計算應用程式的開發,而且可以有效的支援第三方通信技術的應用。如果剛接觸網絡程式設計的開發人員,他們将會發現用Hprose來實作分布式系統,也是一個功能強大的通訊協定和開發包。有了它,在任何情況下,都能在更短的時間内完成更多的工作。通過結合在微軟windows Azure雲計算平台進行通訊開發與應用,可以能夠有效的取代Web Service實作跨語言跨平台高幾倍效率的分布式電信級的又一種全新的通信解決方案。
———————————————————————
任何美好的事物隻有觸動了人們的心靈才變的美好;
孤獨的時候看看天空裡的雨,其實流淚的不隻是你。