Windows Azure Platform是一个运行在微软数据中心的云计算平台。它包括一个云计算操作系统和一个为开发者提供的服务集合。开发人员创建的应用既可以直接在该平台 中运行,也可以使用该云计算平台提供的服务。相比较而言,Windows Azure platform延续了微软传统软件平台的特点,能够为客户提供熟悉的开发体验,用户已有的许多应用程序都可以相对平滑地迁移到该平台上运行。另外 Windows Azure Platform还可以按照云计算的方式按需扩展,在商业开发时可以节省开发部署的时间和费用。

WCF(Windows Communication Foundation)是一个面向服务编程的综合分层架构。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。

Hprose(High Performance Remote Object Service Engine)是一款高性能跨语言跨平台的远程对象服务引擎,它支持众多语言和平台,包括主流的.NET、Java、PHP、Python、Ruby、 JavaScript、ActionScript、Delphi、FreePascal、Objective-C、ASP、Perl、C++等。通过 Hprose可以在这些支持的语言之间实现方便且高效的互通,能够有效的取代WebService实现跨语言跨平台的分布式电信级的解决方案。

WCF与Hprose都支持在Windows Azure Platform上运行。下面我们就来对它们在微软云计算平台上运行的各个方面做一个细致的比较。

语言支持

微软的Azure云平台上提供了直接发布WCF服务的Role,另外也可以通过创建ASP.NET Web Role方式自己添加WCF服务进行发布。但WCF服务只能使用.NET支持的语言(C#或VB.NET)来编写。

Hprose在微软的Azure云平台上则支持使用更多语言来发布服务。除了可以通过ASP.NET Web Role方式发布C#、VB.NET编写的Hprose服务,还可以通过CGI Web Role方式发布使用PHP编写的Hprose服务,甚至可以通过Worker Role方式来发布Java编写的服务。由此可见Hprose可以更充分的发挥微软的Azure云平台对多语言支持的功能。在通讯性能上的对比,如图1所 示。

性能

上面的图表是对三个不同服务各调用1000次的时间对比,花费的时间越少,性能越高。由此可见,Hprose在Azure云计算平台上,以 WebRole方式发布的服务,对比WCF来说没有明显的优势,甚至比WCF在Azure上以BasicHttpBinding方式发布的服务还要慢。但 是Hprose在Azure上以 WorkerRole方式发布的服务,效率则高出WCF数倍。另外,WCF的BasicHttpBinding方式比WsHttpBinding方式效率 高出一倍,这也是为何微软推荐大家采用BasicHttpBinding方式发布WCF服务的一个原因之一。

数据类型支持

在类型支持上WCF和Hprose各有千秋。对于基本类型、简单类型、简单对象,WCF和Hprose都提供支持。

但是对于DataSet这样的.NET特有类型,则WCF支持,Hprose不支持,因为DataSet在非.NET语言环境下无法使用。

而对于复杂的带有直接或间接自引用的对象数据,Hprose支持,而WCF不支持。例如下列类型:

  1. public enum Sex {
  2. Unknown, Male, Female, InterSex
  3. }
  4. [Serializable]
  5. public class User {
  6. string name;
  7. int age;
  8. DateTime birthday;
  9. Sex sex;
  10. bool married;
  11. List<User> friends;
  12. public string Name {
  13. get {
  14. return name;
  15. }
  16. set {
  17. name = value;
  18. }
  19. }
  20. public int Age {
  21. get {
  22. return age;
  23. }
  24. set {
  25. age = value;
  26. }
  27. }
  28. public DateTime Birthday {
  29. get {
  30. return birthday;
  31. }
  32. set {
  33. birthday = value;
  34. }
  35. }
  36. public bool Married {
  37. get {
  38. return married;
  39. }
  40. set {
  41. married = value;
  42. }
  43. }
  44. public Sex Sex {
  45. get {
  46. return sex;
  47. }
  48. set {
  49. sex = value;
  50. }
  51. }
  52. public List<User> Friends {
  53. get {
  54. return friends;
  55. }
  56. set {
  57. friends = value;
  58. }
  59. }
  60. }
  61. 当服务方法为:
  62. public List<User> GetUsers() {
  63. User user = new User();
  64. user.Name = "张三";
  65. user.Age = 30;
  66. user.Birthday = new DateTime(1980, 12, 1);
  67. user.Sex = Sex.Male;
  68. user.Married = true;
  69. User user2 = new User();
  70. user2.Name = "李四";
  71. user2.Age = 28;
  72. user2.Birthday = new DateTime(1982, 2, 18);
  73. user2.Sex = Sex.Male;
  74. user2.Married = false;
  75. User user3 = new User();
  76. user3.Name = "王五";
  77. user3.Age = 38;
  78. user3.Birthday = new DateTime(1972, 6, 14);
  79. user3.Sex = Sex.Male;
  80. user3.Married = true;
  81. User user4 = new User();
  82. user4.Name = "赵六";
  83. user4.Age = 1;
  84. user4.Birthday = new DateTime(2008, 11, 23);
  85. user4.Sex = Sex.Male;
  86. user4.Married = false;
  87. // 以下注释掉的代码 WCF 不支持,但 Hprose 支持
  88. /*
  89. user.Friends = new List<User>();
  90. user.Friends.Add(user2);
  91. user.Friends.Add(user4);
  92. user2.Friends = new List<User>();
  93. user2.Friends.Add(user);
  94. user2.Friends.Add(user3);
  95. user3.Friends = new List<User>();
  96. user3.Friends.Add(user2);
  97. user4.Friends = new List<User>();
  98. user4.Friends.Add(user);
  99. */
  100. List<User> users = new List<User>();
  101. users.Add(user);
  102. users.Add(user2);
  103. users.Add(user3);
  104. users.Add(user4);
  105. return users;
  106. }

如果将上面注释掉的代码取消注释,则Hprose可以正确发布该服务,并且所有语言的Hprose客户端都可以正常调用。但如果用WCF来发布它,在用WCF客户端调用时,服务会崩溃。

因此如果发布的服务仅限于.NET平台,又非常喜欢传输数据集,而且不会传输复杂对象的话,那么WCF是个不错的选择。而如果您发布的服务是跨语言跨平台的,而且会传输复杂对象(复杂对象在游戏中非常多见)的话,则Hprose将是首先。

Visual Studio集成

WCF和Visual Studio都是微软的,因此WCF跟Visual Studio有很密切的集成。但是WCF对于Azure平台来说目前支持的还不算完善,虽然在Visual Studio中可以很方便的开发在Azure运行的WCF服务,但是Azure因为有提供负载平衡的功能,这个功能反而会给WCF服务部署带来了一点小问 题,需要使用一个hotfix并且手动修改配置才能完成服务的正确发布。

Hprose没有提供任何跟Visual Studio的集成,但是因为其本身使用已足够简单,不像WCF那样对服务需要进行单独编写,Hprose可以直接发布现成的类、对象和方法,甚至 连.NET中内置的类和方法都可以直接发布为服务。在Visual Studio中发布Azure上的Hprose服务不会有负载平衡带来的问题。

客户端比较

WCF客户端采用代码生成方式工作,可以使用命令行来生成客户端代理类,也可以在Visual Studio提供的环境下采用图形界面来生成客户端代理类,尤其是在Vistual Studio下使用非常方便。

Hprose客户端采用动态调用方式工作,无需生成客户端代理类,但也可以通过自己编写服务接口方式来创建客户端服务代理对象。自己编写服务接口的 方式当然没有像WCF那样自动生成一样方便,但却提供了更多的灵活性,例如你可以在客户端定义跟服务器端服务不同的接口,只要类型相容,就可以正常调用, 而不像WCF那样对接口类型有严格的约束。

WCF和Hprose都支持同步调用和异步调用。WCF的异步调用采用Begin、End方式,从功能上来说比较强,可以异步调用转同步,但缺点是 使用比较繁琐,对于构建复杂应用来说比较困难。而Hprose的异步调用采用回调方式,从功能上来说不如WCF的异步调用那样强大,没有异步调用转同步的 功能,但是优点是使用比较方便,尤其是配合匿名函数或者Lambda表达式使用时,能够充分发挥必包的优势,可以轻松构建复杂应用。

在Azure平台上,不论是WCF客户端还是Hprose客户端都可以使用。尤其是Hprose客户端不但可以在Azure的.NET应用中使用, 也可以在Azure支持的其它语言中使用,例如直接在javascript中使用Hprose可以轻松实现跨域调用,配合jquery就可以实现很酷炫的 ajax应用了。

总结

Windows Azure Platform为我们提供了一个很棒的云计算平台,除了可以在上面部署微软自己的WCF服务以外,对其它语言和服务也提供了很好的支持,如果要基于微软的云计算平台开发跨语言跨平台服务的话,Hprose为我们增加了另一种选择。

源码下载:http://files.cnblogs.com/xiaoyin_net/Benchmark.rar

(转)Hprose与WCF在云计算平台Azure上的对决的更多相关文章

  1. (视频) 《快速创建网站》2.1 在Azure上创建网站及网站运行机制

    现在让我们开始一天的建站之旅. 本文是<快速创建网站>系列的第2篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http:// ...

  2. (视频)《快速创建网站》2.1 在Azure上创建网站及网站运行机制

    现在让我们开始一天的建站之旅. 本文是<快速创建网站>系列的第2篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 1. 网站管理平台WordPress和 ...

  3. [书目20140902]实战Windows Azure——微软云计算平台技术详解 --徐子岩

    目录第1章  云计算技术简介    1.1  云计算所要解决的问题    1.2  云计算平台的分类    1.3  微软云计算平台Windows Azure        1.3.1  高可用性   ...

  4. 【充分利用你的Azure】将Azure用作云计算平台(1)

    本文将围绕几个步骤来讲. 因为本人是MSP,微软送了150刀的额度给我随便使用.这篇文章是要讲将Azure用作云计算平台,对于我来说,我是做机器学习的,那么Azure就要有机器学习的平台. 本文的目的 ...

  5. 云计算平台简介(App Engine)

    云计算平台简介(App Engine)     1   简介 App Engine: 应用程序引擎,是托管网络应用程序的云计算平台. 1.1  什么是云 云计算通常简称为“云”,是一种通过 Inter ...

  6. 目前国际上所用云计算平台IaaS、PaaS、SaaS简介

    随着云计算这个概念越来越为人所熟知,企业对云计算的重视程度也在日趋加深.这不仅是一种潮流,更体现了一种需求——数字化.现代化.科技化的整体需求.如今市场上云计算的运营商更是风起云涌,服务种类更是丰富繁 ...

  7. APT攻击将向云计算平台聚焦

    APT攻击作为一种高效.精确的网络攻击方式,在近几年被频繁用于各种网络攻击事件之中,并迅速成为企业信息安全最大的威胁之一. 近日,飞塔中国首席技术顾问X在谈及APT攻击时表示,随着云计算的不断发展普及 ...

  8. 教程:使用 MongoDB、WCF、OData 和 PowerBI 构建 Azure 上的商业智能解决方案

     发布于 2014-05-20 作者 陈 忠岳 目录 概述 前提条件 创建 Windows Server 2012 Datacenter 虚拟机 通过 WCF(Windows Communicat ...

  9. 基于google earth engine 云计算平台的全国水体变化研究

    第一个博客密码忘记了,今天才来开通第二个博客,时间已经过去两年了,三年的硕士生涯,真的是感慨良多,最有收获的一段时光,莫过于在实验室一个人敲着代码了,研三来得到中科院深圳先进院,在这里开始了新的研究生 ...

随机推荐

  1. hdu 5428 The Factor 分解质因数

    The Factor  Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest ...

  2. C语言连接MySQL数据库(课程设计总结)

    刚结束课程设计,也预示着假期立即就要到来了.本次课程设计并不算难,无非就是让做一个XXX系统,实现用户的注冊.登录.菜单管理.超级用户等等一些功能,到如今为止已经做过好几个了,所以基本流程都熟悉了! ...

  3. 华为 真机当作测试机 打开log开关

    拨号界面输入*#*#2846579#*#*进入测试模式,点击"pyojectmeu"-点击第三个-"后台设置"-进入了之后-点击第2个-"log设置& ...

  4. TCP/IP协议知识科普

    简介 本文主要介绍了工作中常用的TCP/IP对应协议栈相关基础知识,科普文. 本博客所有文章:http://www.cnblogs.com/xuanku/p/index.html TCP/IP网络协议 ...

  5. apache 配置order allow deny讲解

    http://www.111cn.net/phper/apache/43025.htm

  6. python实现之极简stack和queue

    用python实现一个极简的stack和queue,那是so easy的事情了,简洁易懂,适合小白~ 直接上代码吧: node: class LinkNode: def __init__( self, ...

  7. 动态缓存技术之CSI,SSI,ESI

    平常我们谈到网络缓存技术,大多是以页面为单位的,比如,新闻网站中将执行后的结果,缓存为一个静态html文件,下次访问时就直接访问这个静态页面了! 减轻了服务器压力!但是,如果一个页面大部分是可静态的, ...

  8. 琐碎-关于hadoop2.X那些端口

    此文转载http://www.aboutyun.com/thread-7513-1-1.html Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访 ...

  9. 杂乱无章之javascript(二)

    1.浏览器与事件事件通常是由浏览器所产生,不同的浏览器会产生的事件也有所不同,即使同一浏览器不同版本所产生的事件也有不同.以下为HTML4.01中的事件 2.error事件:它可以调用一个错误处理函数 ...

  10. [改善Java代码]严格限定泛型类型采用多重界限

    从哲学上来说,很难描述一个具体的人,你可以描述它的长相,性格,工作等,但是人都是有多重身份的,估计只有使用多个And(与操作)将所有的描述串联起来才能描述一个完整的人,人在不同的环境中角色也在不断的更 ...