亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3142 | 回復: 0
打印 上一主題 下一主題

深度解析:微軟云計算平臺的通信技術與應用開發(fā) [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-05-26 10:22 |只看該作者 |倒序瀏覽
云計算近年來非常火熱,已經成為目前繼SOA、Web2.0之后又一個熱門的話題。Amazon.com、Google和Microsoft都相繼推出了自己的云計算平臺。Microsoft的云計算平臺叫做Azure,最初發(fā)布的開發(fā)包支持Visual Studio 2008,最新推出的Visual Studio 2010更是集成了Azure開發(fā)工具,讓Azure云計算開發(fā)變得更加方便容易。 微軟云技術平臺不但可以對微軟WCF等技術的支持外,而且還可以對第三方通信技術強有力的支持,從而擴大了微軟云計算技術在企業(yè)中的普及與應用。Hprose(High Performance Remote Object Service Engine)既是一種新型的通信技術,它是一款第三方高性能跨語言跨平臺的遠程對象服務引擎,并支持眾多語言和平臺,包括主流的.NET、Java、PHP、Python、Ruby、JavaScript、ActionScript、Delphi、FreePascal、Objective-C、ASP、Perl、C++等。在這些支持的語言之間可以實現方便且高效的互通,能夠有效的取代WebService實現跨語言跨平臺高幾倍效率的分布式電信級的解決方案。 在云計算開發(fā)應用中網絡通信速度效率尤為重要。支持上面提到的所有云計算平臺,但通過筆者的測試,本文將對第三方通信方法(Hprose)在微軟云計算平臺上,通過使用Microsoft Visual Studio 2008/2010構建一個應用,從而能使您能高效便捷的創(chuàng)建功能強大的跨平臺、跨語言、分布式的云體驗。 準備 開始之前需要首先安裝以下環(huán)境: Windows操作系統(推薦Windows7) Visual Studio 2008/2010 Windows Azure Tools for Microsoft Visual Studio 1.1 Hprose開發(fā)包(無需安裝) 試用下載地址: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這三種規(guī)則進行部署,所以這里我們選擇這三種規(guī)則,并分別取名為HproseServiceWebRole、HproseServiceWorkerRole和HproseServiceWebCgiRole。然后點擊OK。項目就建好了。 下面我們來看一下在這三種不同的規(guī)則下,如何開發(fā)部署Hprose服務。 Hprose在ASP.NET Web Role下的服務發(fā)布 先看第一種規(guī)則——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所示。 然后我們?yōu)楣こ烫砑右粋新建C#的Class文件,名字任意,這里我們取名為Example.cs。如圖5所示。 然后編輯其代碼如下: 這個類用于定義我們要發(fā)布的服務,你會發(fā)現我們定義的類不需要繼承任何接口。這里限于篇幅我們發(fā)布的方法都比較簡單,實際上除了可以返回簡單類型、容器類型以外,還可以返回復雜的可序列化對象類型,關于Hprose支持類型的詳細介紹請參見Hprose for C#手冊。 接下來我們修改Default.aspx.cs文件: 這樣,一個Hprose服務器就完成。 默認情況下,服務端口號是80,但80通常被IIS所占據,所以Azure會自動選擇81端口,為了使用固定端口,我們這里手動將端口號改為8001。如圖6所示。

當然,上面這一步是可選的,你也可以省略這一步。


接下來選擇按F5,服務會自動進行部署。瀏覽器會自動打開,并顯示一下內容: 這說明服務已經成功發(fā)布了。接下來我們就可以用Hprose客戶端來調用它了。 Hprose提供了專業(yè)的服務調試工具——Nepenthes(忘憂草),通過它,你不需要編寫一行代碼,就可以直接調試服務器。 只需要輸入服務器網址,然后點擊Get Functions就可以得到所有的服務方法。 每個方法都可以直接輸入參數進行調用,多個參數之間使用逗號分隔,參數格式以JSON方式輸入。 另外,該工具是多國語言的,目前支持英文、簡體中文和繁體中文。 下面是使用該工具調試剛剛發(fā)布的服務的截圖,如圖7、圖8和圖9所示。 這里的Hprose服務是使用C#編寫的,但是你可以在任何Hprose支持的語言中進行調用,因為本文重點是介紹Hprose服務在微軟云平臺上的開發(fā)與部署,因此這里就不再為客戶端舉例了,如果讀者有興趣,可以參考Hprose手冊。

Hprose服務在ASP.NET Web Role下發(fā)布從靈活性上來說比較強大,雖然上面我們的例子是按照請求模式發(fā)布的服務,但實際上你還可以按照全局模式或者會話模式來發(fā)布服務,對服務的發(fā)布也可以細化到每一個方法,甚至可以在發(fā)布的方法中存取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下的服務發(fā)布 跟ASP.NET Web Role下類似,首先要添加Hprose引用,這一步操作相同,這里不再重復。 之后添加一個Example.cs,內容也與ASP.NET Web Role下的Example.cs類似,僅僅是名稱空間有點變化(從HproseServiceWebRole變?yōu)镠proseServiceWorkerRole)。這里也就不再重復列出代碼了。 下面我們看重點,那就是對WorkerRole.cs的修改,主要修改的是它的Run方法,其它方法無需改動,修改后的代碼如下:
using System.Diagnostics;using System.Linq;using System.Net;using System.Threading;using Microsoft.WindowsAzure.Diagnostics;using Microsoft.WindowsAzure.ServiceRuntime;using Hprose.Server;namespace HproseServiceWorkerRole {    public class WorkerRole : RoleEntryPoint {        public override void Run() {            // This is a sample worker implementation. Replace with your logic.            Trace.WriteLine("HproseServiceWorkerRole entry point called", "Information");            HproseHttpListenerServer server = new HproseHttpListenerServer("http://127.0.0.1:8010/");            server.Methods.AddInstanceMethods(new Example());            server.Start();            Trace.WriteLine("Hprose Server Started", "Information");            while (true) Thread.Sleep(0);        }        public override bool OnStart() {            // Set the maximum number of concurrent connections             ServicePointManager.DefaultConnectionLimit = 12;            DiagnosticMonitor.Start("DiagnosticsConnectionString");            // For information on handling configuration changes            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.            RoleEnvironment.Changing += RoleEnvironmentChanging;            return base.OnStart();        }        private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e) {            // If a configuration setting is changing            if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) {                // Set e.Cancel to true to restart this role instance                e.Cancel = true;            }        }    }}
從上面的代碼中我們可以看出,在Worker Role方式下,我們是通過創(chuàng)建一個Hprose獨立服務器來發(fā)布服務的。下面按下F5就可以調試了。因為在Worker Role方式下,瀏覽器不會自動打開,我們可以自己打開瀏覽器并鍵入:http://127.0.0.1:8010/,然后回車,我們會看到跟ASP.NET Web Role方式下同樣的內容。使用Nepenthes調試效果也是完全相同的。但這種方式下發(fā)布的服務性能是相當高效的。 在Worker Role下除了可以發(fā)布C#編寫的Hprose服務之外,你還可以通過運行Jetty服務器來發(fā)布Java編寫的Hprose服務,但運行Jetty較為復雜,網上也有相應介紹,這里就不做介紹了。

上面介紹的兩種方式發(fā)布的服務都是C#編寫的,而下面的CGI Web Role方式下則可以發(fā)布PHP的Hprose服務。



Hprose在CGI Web Role下的服務發(fā)布 首先將下載的PHP解壓縮后,連同php目錄一起放入HproseServiceWebCgiRole目錄下,并將php.ini-production(或php.ini-development)復制一份改名為php.ini,然后將hprose for PHP也復制到該目錄下的hprose目錄下。之后將這些文件連同目錄一同添加到工程當中,如圖10所示。 然后編輯Web.roleconfig文件: 接下來編輯Web.config中system.webServer段,添加如下內容: 最后,創(chuàng)建一個index.php文件,內容如下: 這段代碼發(fā)布的是PHP的內置函數md5。 注意,index.php保存時一定要選擇UTF-8 without signature編碼,否則服務將不能被調用,如圖11所示。 之后,按F5,服務就發(fā)布了,之后你會看到瀏覽器中顯示如下內容:

我們可以用Nepenthes(忘憂草)來調試該服務,如圖12所示。 也可以自己通過Hprose客戶端來調用該服務,下面我們創(chuàng)建一個.NET客戶端來調用一下該服務看一下,我們創(chuàng)建一個新的項目。如圖13所示。 為了方便,我們這里使用控制臺程序作為演示。之后先添加Hprose.Client.dll的引用,然后修改Program.cs內容如下:
using System;using Hprose.Client;namespace MD5Client {    public interface I_MD5 {        string MD5(string s);    }    class Program {        static void Main(string[] args) {            I_MD5 serviceClient = new HproseHttpClient("http://127.0.0.1:8080/index.php").UseService<I_MD5>();            Console.WriteLine(serviceClient.MD5("你好中國"));        }    }}
然后運行該程序,就可以看到以下結果了。 總結

微軟的云計算平臺無疑是.net技術的最好體現,可以通過微軟Microsoft Visual Studio 2008/2010進行云計算應用程序的開發(fā),而且可以有效的支持第三方通信技術的應用。如果剛接觸網絡編程的開發(fā)人員,他們將會發(fā)現用Hprose來實現分布式系統,也是一個功能強大的通訊協議和開發(fā)包。有了它,在任何情況下,都能在更短的時間內完成更多的工作。通過結合在微軟windows Azure云計算平臺進行通訊開發(fā)與應用,可以能夠有效的取代Web Service實現跨語言跨平臺高幾倍效率的分布式電信級的又一種全新的通信解決方案。

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP