技术开发 频道

WCF与Hprose云计算平台Azure争锋对决

  【IT168技术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都提供支持。

public enum Sex {
        Unknown, Male, Female, InterSex
    }

    [Serializable]
    
public class User {
        
string name;
        
int age;
        DateTime birthday;
        Sex sex;
        bool married;
        List
<User> friends;

        
public string Name {
            
get {
                
return name;
            }
            
set {
                name
= value;
            }
        }

        
public int Age {
            
get {
                
return age;
            }
            
set {
                age
= value;
            }
        }

        
public DateTime Birthday {
            
get {
                
return birthday;
            }
            
set {
                birthday
= value;
            }
        }

        
public bool Married {
            
get {
                
return married;
            }
            
set {
                married
= value;
            }
        }

        
public Sex Sex {
            
get {
                
return sex;
            }
            
set {
                sex
= value;
            }
        }

        
public List<User> Friends {
            
get {
                
return friends;
            }
            
set {
                friends
= value;
            }
        }
    }

当服务方法为:
        
public List<User> GetUsers() {
            User user
= new User();
            user.Name
= "张三";
            user.Age
= 30;
            user.Birthday
= new DateTime(1980, 12, 1);
            user.Sex
= Sex.Male;
            user.Married
= true;
            User user2
= new User();
            user2.Name
= "李四";
            user2.Age
= 28;
            user2.Birthday
= new DateTime(1982, 2, 18);
            user2.Sex
= Sex.Male;
            user2.Married
= false;
            User user3
= new User();
            user3.Name
= "王五";
            user3.Age
= 38;
            user3.Birthday
= new DateTime(1972, 6, 14);
            user3.Sex
= Sex.Male;
            user3.Married
= true;
            User user4
= new User();
            user4.Name
= "赵六";
            user4.Age
= 1;
            user4.Birthday
= new DateTime(2008, 11, 23);
            user4.Sex
= Sex.Male;
            user4.Married
= false;

            
// 以下注释掉的代码 WCF 不支持,但 Hprose 支持
            
/*
            user.Friends
= new List<User>();
            user.Friends.Add(user2);
            user.Friends.Add(user4);

            user2.Friends
= new List<User>();
            user2.Friends.Add(user);
            user2.Friends.Add(user3);

            user3.Friends
= new List<User>();
            user3.Friends.Add(user2);

            user4.Friends
= new List<User>();
            user4.Friends.Add(user);
            
*/

            List
<User> users = new List<User>();
            users.Add(user);
            users.Add(user2);
            users.Add(user3);
            users.Add(user4);
            
return users;
        }
0
相关文章