云计算近年来非常火热,已经成为目前继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方法,其它方法无需改动,修改后的代码如下:

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 changingif (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) {// Set e.Cancel to true to restart this role instancee.Cancel = true;}}}
}
从上面的代码中我们可以看出,在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内容如下:

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进行云计算应用程序的开发,而且可以有效的支持第三方通信技术的应用。如果刚接触网络编程的开发人员,他们将会发现用Hprose来实现分布式系统,也是一个功能强大的通讯协议和开发包。有了它,在任何情况下,都能在更短的时间内完成更多的工作。通过结合在微软windows Azure云计算平台进行通讯开发与应用,可以能够有效的取代Web Service实现跨语言跨平台高几倍效率的分布式电信级的又一种全新的通信解决方案。
 
 
———————————————————————
任何美好的事物只有触动了人们的心灵才变的美好;
孤独的时候看看天空里的雨,其实流泪的不只是你。
———————————————————————
 

©著作权归作者所有:来自51CTO博客作者高阳的原创作品,如需转载,请注明出处,否则将追究法律责任
微软 应用 平台

0

分享

微博 QQ 微信

收藏

上一篇:Visual Studio 20... 下一篇:你不是一个人在战斗——VS201...
高阳

45篇文章,17W+人气,4粉丝

关注

Ctrl+Enter 发布

发布

取消

1条评论

按时间倒序 按时间正序

推荐专栏

最近更新

网工2.0晋级攻略 ——零基础入门Python/Ansible

网络工程师2.0进阶指南

共30章 | 姜汁啤酒

¥51.00 1168人订阅

订   阅

VMware vSAN中小企业应用案例

掌握VMware超融合技术

共41章 | 王春海

¥51.00 254人订阅

订   阅

猜你喜欢

我的友情链接 私有云的时代将给企业管理带来质的飞跃 通通透透看无服务器计算:由来、场景和问题 Nginx中AWStats日志分离的详细部署 数据中心:一个支点,撬动全世界 Squid 传统代理 和 透明代理 (内附软件包) 配置多mesos-master环境实战 TCP三次握手四次挥手

扫一扫,领取大礼包

0

1

分享

关注

高阳

深度解析:微软云计算平台的通信技术与应用开发相关推荐

  1. 实战Windows Azure:微软云计算平台技术详解

    实战Windows Azure:微软云计算平台技术详解  徐子岩 编著 ISBN978-7-121-14547-6   2011年10月出版 定价:69.00 元 16开 440页 宣传语:什么是真正 ...

  2. 限时团购,6.9折:《微信开发深度解析:公众号、小程序高效开发秘籍》推荐序

    全书由目 Senparc.Weixin SDK 作者苏震巍历时 2 年完成,涵盖了开发微信公众号及小程序需要用的的各项后端开发技能.技巧.避坑提示,以及 Senparc.Weixin SDK 微信公众 ...

  3. 微软云计算平台AppFabric即将上市

    继Windows Azure和SQL Azure开始收费后,微软近日宣布,Windows Azure云计算平台AppFabric也将投入商用.预计从2010年4月9日开始,全球用户都可以购买AppFa ...

  4. 深度解析:云计算三种服务模式

    IaaS:是 Infrastructure as a Service 的首字母缩写,意思是基础设施即服务,即把IT系统的基础设施层作为服务出租出去.由云服务提供商把IT系统的基础设施建设好,并对计算设 ...

  5. 谷歌、亚马逊、IBM和微软的云计算平台

    Google的云计算平台与应用 Google的云计算技术实际上是针对Google特定的网络应用程序而定制的.针对内部网络数据规模超大的特点,Google提出了一整套基于分布式并行集群方式的基础架构,利 ...

  6. 详解微软Windows Azure云计算平台

    详解微软Windows Azure云计算平台  方国伟 等主编 ISBN 978-7-121-14620-6 2011年11月出版 定价:59.00元 16开 280页 宣传语:微软官方权威解读 深入 ...

  7. 微软云计算操作系统Windows Azure 平台——云+端全面攻略

    微软云计算操作系统Windows Azure 平台--云+端全面攻略 Windows Azure Platform 开发入门 在云计算时代,有三个平台非常重要,即开发平台.部署平台和运营平台.Wind ...

  8. 深度解析两大应用内测分发工具Pre.im与TestFlight

    说起移动应用的内测分发平台,众多开发者首要想到的就是国外的TestFlight.不过最近国内的一家测试平台Testin也针对内测分发这一环节推出了平台Pre.im,受到了开发者的追捧.这里,我们就来深 ...

  9. 云计算 第四章 微软云计算 Windows Azure

    文章目录 第四章 微软云计算 Windows Azure 4.1 微软云计算平台 1.传统的企业和用户在开发和部署自己的应用程序主要有两种方式 2.微软的云计算技术 3.Windows Azure平台 ...

最新文章

  1. 负载均衡算法-最少连接数均衡
  2. ASP.NET 框架 之HttpHandler
  3. 精准扶贫谋定产业化-农业大健康·万祥军:东平农业品牌化
  4. 选择大公司还是小公司
  5. linux 脚本 语法错误,从windows拷贝到linux的脚本报错:未找到命令 or 语法错误
  6. Java IdentityHashMap values()方法与示例
  7. python3.8爬虫_python爬虫系列(3.8-正则的使用)
  8. php之前代码,PHP语法检查源代码前控制
  9. Oracle 学习笔记二 Create table
  10. R语言快速学习第一部分(有其他语言基础)
  11. B/S、C/S双客户类型系统研究
  12. JAVA基础知识(四):final关键字
  13. 轻松掌握shell编程中数组的常见用法及示例
  14. (转载)Sybase:bcp命令参考
  15. ImageLoader的简单解析(六)
  16. 面试突击41:notify是随机唤醒吗?
  17. buf.readInt8函数详解
  18. js读取excel表格
  19. navicat8 for mysql注册码
  20. 集合涉及到的排序方式

热门文章

  1. 初探image-set及如何适配移动端高清屏图片
  2. 如果你在aws ec2上安装php7x 的时候提示 libwebp 错误,可以试一下下面这个代码...
  3. MySQL 资源大全
  4. 不懂得使用工具的测试不是好测试
  5. [转]SQL2000修改表创建日期
  6. MyEclipse:新导入一个项目时中文乱码
  7. 危险,几条可致命的Linux命令!
  8. 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求的架构细节【转】
  9. 金蝶EAS BOS开发常用的代码说明及常见问题
  10. Android--多选自动搜索提示