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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:
    云计算近年来非常火热,已经成为目前继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 changing
            if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) {
                // Set e.Cancel to true to restart this role instance
                e.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博客,原文链接:http://blog.51cto.com/xiaoyinnet/321304 ,如需转载请自行联系原作者

相关文章
|
12天前
|
监控 安全 开发工具
鸿蒙HarmonyOS应用开发 | HarmonyOS Next-从应用开发到上架全流程解析
HarmonyOS Next是华为推出的最新版本鸿蒙操作系统,强调多设备协同和分布式技术,提供丰富的开发工具和API接口。本文详细解析了从应用开发到上架的全流程,包括环境搭建、应用设计与开发、多设备适配、测试调试、应用上架及推广等环节,并介绍了鸿蒙原生应用开发者激励计划,帮助开发者更好地融入鸿蒙生态。通过DevEco Studio集成开发环境和华为提供的多种支持工具,开发者可以轻松创建并发布高质量的鸿蒙应用,享受技术和市场推广的双重支持。
169 11
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
85 10
|
3天前
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
69 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
12天前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
173 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
11天前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
98 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
3天前
|
域名解析 负载均衡 安全
DNS技术标准趋势和安全研究
本文探讨了互联网域名基础设施的结构性安全风险,由清华大学段教授团队多年研究总结。文章指出,DNS系统的安全性不仅受代码实现影响,更源于其设计、实现、运营及治理中的固有缺陷。主要风险包括协议设计缺陷(如明文传输)、生态演进隐患(如单点故障增加)和薄弱的信任关系(如威胁情报被操纵)。团队通过多项研究揭示了这些深层次问题,并呼吁构建更加可信的DNS基础设施,以保障全球互联网的安全稳定运行。
|
3天前
|
缓存 网络协议 安全
融合DNS技术产品和生态
本文介绍了阿里云在互联网基础资源领域的最新进展和解决方案,重点围绕共筑韧性寻址、赋能新质生产展开。随着应用规模的增长,基础服务的韧性变得尤为重要。阿里云作为互联网资源的践行者,致力于推动互联网基础资源技术研究和自主创新,打造更韧性的寻址基础服务。文章还详细介绍了浙江省IPv6创新实验室的成立背景与工作进展,以及阿里云在IPv6规模化部署、DNS产品能力升级等方面的成果。此外,阿里云通过端云融合场景下的企业级DNS服务,帮助企业构建稳定安全的DNS系统,确保企业在数字世界中的稳定运行。最后,文章强调了全链路极致高可用的企业DNS解决方案,为全球互联网基础资源的创新提供了中国标准和数字化解决方案。
|
4天前
|
缓存 边缘计算 网络协议
深入解析CDN技术:加速互联网内容分发的幕后英雄
内容分发网络(CDN)是现代互联网架构的重要组成部分,通过全球分布的服务器节点,加速网站、应用和多媒体内容的传递。它不仅提升了访问速度和用户体验,还减轻了源站服务器的负担。CDN的核心技术包括缓存机制、动态加速、流媒体加速和安全防护,广泛应用于静态资源、动态内容、视频直播及大文件下载等场景,具有低延迟、高带宽、稳定性强等优势,有效降低成本并保障安全。
23 3
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
|
21天前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。

推荐镜像

更多