一起谈.NET技术,Azure和Bing Maps API示例经验分享

  头疼的Bug,糟糕的代码,崩溃的调试作为开发人员的你,遇到上述任何一种情况可能就会陷入抓狂。如果能直接获得需要的代码,编程的活儿就会轻松许多。

  微软最新推出的一站式示例代码库,让开发人员可以免费获得所需的示例代码或向微软工程师提出示例请求,轻松解决常见的编程问题,大大减轻工作负担。

  本文以一个名为AzureBingMaps的示例应用程序为例,分享了一些在开发该示例过程中积累的经验,以期对广大开发人员有所帮助。AzureBingMaps是一个旅游站点管理系统,演示了很多技术,可以认为是一个实际项目。

  写这个示例的初衷

  在Windows Azure论坛,我们常见到这样的开发人员:他们已经学习了很多开发技术,例如ASP、.NET、Silverlight等,并对这些技术有了较深入的了解。但当他们需要将学到的知识应用到实际项目中时,新的问题便产生了。

  • 针对特定场景该如何选择平台和技术?
  • 不同的技术怎样结合起来使用?
  • 如果在使用某项技术的过程中发现了局限性该如何解决?
  • 如果必须使用不熟悉的技术该怎么办?

  如今的网络技术资源绝大多数都只针对某一种特定的技术,指导人们如何使用一个特定的功能,对那些希望学以致用、开发实际项目的开发人员而言,这远远不够。

  鉴于此,我们开始尝试使用微软的各种技术开发一个相对完整的项目,体会大家可能遇上的问题,从而形成了本文。

  选择合适的平台与技术

  了解用户需求

  在项目开发前,必须了解客户的需求。这项工作的范围很广,但由开发人员负责的部分通常仅限于选择合适的平台与技术。因此作为一个示例,我们省略了与客户访谈以了解需求的过程,直接将非功能性需求定义如下。

  • 本系统在旅游旺季需要支持1,000,000个用户同时访问,在非旅游旺季只需要支持1,000个用户同时访问。
  • 公司没有自己的数据中心,IT部门最多只能提供3台中档服务器给我们的系统。
  • 我们团队对.NET和Visual Studio比较熟悉。
  • 本系统对操作系统及网络环境并没有特定的需求。
  • 第三方开发人员应该可以针对我们的服务自行开发客户端应用程序。

  这些需求也正是我们的客户—Windows Azure论坛上参与讨论的开发人员—常常需要解决的问题。

  选择合适的平台

  需求明确地指出可伸缩性是必须考虑的因素。为了满足旅游旺季时1,000,000个用户同时访问的需求,我们可能会考虑如下方案。

  • 使用一台高性能服务器,然而IT部门明确告诉我们他们只能提供3台中档服务器。
  • 采用负载平衡,然而3台中档服务器即使采用了负载平衡也很难保证满足我们的需求。
  • 寻找云计算供应商,将我们的系统部署在外部的数据中心,如果选择的供应商合适,支持多台服务器负载平衡,就能确保满足高并发访问的需求。

  于是,我们的需求引领我们考虑选择云计算。然而市场上也有很多云计算供应商,选择哪家最适合呢?这个问题还是要通过需求来解答。

  • 在非旅游旺季我们只需要支持1,000个用户同时访问,因此我们选择的供应商必须允许我们随时更改使用计划,例如,旅游旺季租用2,000台服务器,非旅游旺季只租用2台服务器。
  • 鉴于项目组对.NET和Visual Studio比较熟悉,我们希望应用现有的知识进行开发,这意味着我们选择的供应商必须支持.NET。
  • 既然我们的系统对操作系统和网络环境没有特定的需求,我们就不希望花太多的时间在这些环境配置上。例如,我们不希望手工配置操作系统和安装各种需要的软件;希望即使需要租用2,000台服务器,也可以让项目组致力于应用程序的开发,而不是基础设施的配置。

  综上所述,我们发现Windows Azure平台可以满足需求。在Windows Azure平台中,我们可以随时简单通过修改配置文件的方式来选择租用几台服务器,而且理论上可租用的服务器数量确实没有上限。它也完全支持.NET平台,而且操作系统以及常用的软件(例如数据库),也不需要手工配置。

  当然,我们承认如上定义正好符合WindowsAzure平台的需求,这也是出于我们是针对这个平台撰写示例的考虑。但在实际项目中,大家确实需要考虑上述因素。如果你不需要高度可伸缩性,Windows Azure平台可能就不适合你,毕竟它的价格相对于一般的Web供应商而言是比较高的。如果你对操作系统和网络环境有特定的需求,那么目前Windows Azure平台也不适合你。你应该根据实际需求,寻找合适的平台。

  选择合适的技术

  在选取技术的过程中,客户需求以及开发团队的经验也是非常重要的。

  需求指出第三方开发人员需要针对我们的服务自行开发客户端程序,因此开发服务时我们需要选择一个能让较多客户端平台都接受的技术,最好是一个国际标准。于是我们决定使用REST。此外,我们的服务需要暴露一些数据给客户端,因此将使用OData。OData是基于REST标准,定义了如何访问数据的一种拓扑,并且被广泛地使用着。我们的开发团队熟悉.NET,于是我们选择在.NET平台上能方便地实现OData的一项技术,也就是WCF Data Services。

  在数据存储方面,Windows Azure平台上有两种常见的数据存储服务:Table Storage和SQL Azure。考虑到Table Storage目前还有较多局限性(例如不支持排序),我们决定使用SQL Azure。不过SQL Azure也有自己的局限性,最重要的一点就是目前它不具备Table Storage所提供的自动伸缩功能,也就是说当数据量大的时候,如何确保高效访问数据,是一个问题。不过这个问题也不是特别难以解决,请参考本文设计可伸缩的数据库章节寻找解决方案。此外,SQL Azure还支持空间数据(Spatial Data),也就是存放地理信息的数据,我们示例的场景正需要地理信息,所以空间数据也是一个很自然的选择。

  至于数据访问,.NET平台提供了Entity Framework,这是一种O/R Mapping的框架,可以让开发人员在不需要考虑如何撰写SQL语句的情况下进行数据访问操作,而将精力专注于面向对象的设计。不过目前Entity Framework对空间数据的支持并不很完美,所以采用它将会给项目带来一定风险。

  另外一个选择是直接使用SqlConnection以及SqlCommand,但这种方式比较烦琐,而且代码也不易维护。综合考虑,我们决定先做一个简单的原型,尝试将Entity Framework和Spatial Data结合使用,如果在开发该原型的过程中遇上了太多困难,我们将采用SqlConnection的方式。当然最终证明困难并不是很大,于是我们的示例还是采用了Entity Framework。

  最后还有客户端,在客户端的技术选择上,我们首先考虑是选择Web还是Desktop。绝大多数情况下,Web应用程序都占据着得天独厚的优势,因为用户不需要安装,甚至不需要下载。当然Web应用程序在用户体验上可能略有不足,不过随着HTML5以及Silverlight的普及,差距也是越来越小了。如今Desktop程序最大的优势在于能够访问更多的系统资源,以及可以更好地支持离线使用。

  对于我们的场景而言,我们不需要访问特定的系统资源,而且可以暂时不考虑离线访问的状况,所以针对PC类的大型设备我们选择了Web。不过,手机类的设备则是另外一回事。大多数手机浏览器不仅相对而言屏幕较小,而且功能支持也比较少,例如Silverlight一类的插件不受支持,而且也缺乏PC浏览器常见的那种TabbedView一类的效果。所以如果针对手机设备开发,往往还需要选择该设备直接支持的技术。

  至于为何选择AJAX和Silverlight两个PC客户端,以及Windows Phone,就纯粹是出于示例的需要了。还是那句话,如果你的需求不同,你就应该根据需求选择适合于当前项目的技术,而不是生搬硬套...

时间: 2024-10-23 02:28:49

一起谈.NET技术,Azure和Bing Maps API示例经验分享的相关文章

Azure和Bing Maps API示例经验分“.NET研究”享

头疼的Bug,糟糕的代码,崩溃的调试作为开发人员的你,遇到上述任何一种情况可能就会陷入抓狂.如果能直接获得需要的代码,编程的活儿就会轻松许多. 微软最新推出的一站式示例代码库,让开发人员可以免费获得所需的示例代码或向微软工程师提出示例请求,轻松解决常见的编程问题,大大减轻工作负担. 本文以一个名为AzureBingMaps的示例应用程序为例,分享了一些在开发该示例过程中积累的经验,以期对广大开发人员有所帮助.AzureBingMaps是一个旅游站点管理系统,演示了很多技术,可以认为是一个实际项目

Azure和Bing Maps API示“.NET技术”例经验分享

头疼的Bug,糟糕的代码,崩溃的调试作为开发人员的你,遇到上述任何一种情况可能就会陷入抓狂.如果能直接获得需要的代码,编程的活儿就会轻松许多. 微软最新推出的一站式示例代码库,让开发人员可以免费获得所需的示例代码或向微软工程师提出示例请求,轻松解决常见的编程问题,大大减轻工作负担. 本文以一个名为Azure上海企业网站设计与制作BingMaps的示例应用程序为例,分享了一些在开发该示例过程中积累的经验,以期对广大开发人员有所帮助.AzureBingMaps是一个旅游站点管理系统,演示了很多技术,

一起谈.NET技术,ASP.NET MVC 2示例Tailspin Travel UI层分析

Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示了许多Visual Studio 2010, .NET Framework 4, 和Windows Server AppFabric的技术,参看ASP.NET MVC 2示例Tailspin Travel. Tailspin Travel设计的技术比较多,今天我们来看看界面(UI)上的技术,在UI层

通过Microsoft Azure服务设计网络架构的经验分享

本文从产品设计和架构角度分享了Microsoft Azure网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构. Microsoft Azure的网络架构特别针对企业私有云和混合云进行了设计,其中包含三个常用的服务: 虚拟网络(Virtual Network):连接本地网络与云端基础设施 流量管理器(Traffic Manager):将用户流量分配到不同的数据中心 名称解析服务(DNS):使用内部主机名作为云服务的解析 下面,我将着重介绍使用这三个服务时需要

谈淘宝客瀑布流的建站经验分享

美丽说蘑菇街火了,方维也火了,和团购市场一样,模版的诞生会引来一个新的电子商务市场的兴起,淘宝客乃这个市场的最大赢家,大小上千家网站竞相争夺电子商务社区的领地,并有知美 花瓣等兴趣图谱类网站的分支诞生,甚至包括人人网也推出了人人逛街,突然间这种瀑布流的网站传遍中华大地... 美丽说蘑菇街火了,方维也火了,和团购市场一样,模版的诞生会引来一个新的电子商务市场的兴起,淘宝客乃这个市场的最大赢家,大小上千家网站竞相争夺电子商务社区的领地,并有知美 花瓣等兴趣图谱类网站的分支诞生,甚至包括人人网也推出了

基于DeepZoom技术的Bing Maps客户端实现研究

目前基于Silverlight技术的Web GIS客户端实现,包括微软Bing Maps Silverlight Control,以及开源的Web GIS客户端组件DeepEarth 项目,核心都是采用Silverlight中的DeepZoom技术实现.可能您已经知道 DeepZoom技术以MultiScaleImage控件为核心,其内部有一个 MultiScaleTileSource类型的源属性,主要用于设置 MultiScaleImage控件所要呈现的数据源,可以通过学习Deep Zoom

SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储

原文:SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.具有使用 Microsoft Visual Studio 进行 Microsoft .NET Framework开发的经验. 4.具有

Bing Maps实现地理位置的定位

问题描述 Bing Maps实现地理位置的定位 一个电商平台,要根据用户的地理位置不同来显示不同的价格.h5可以实现获取经度和纬度,但是如何把经纬度变成地址信息. 编程语言:C# 地理范围是全球.请问如何实现 解决方案 http://blog.csdn.net/jcx5083761/article/details/40112631 解决方案二: 地理位置定位

Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图

Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图 Bing Maps Silverlight Control虽然为我们提供了简洁.方便的开发模型,但也有许多不足之处,比如我们想实现一个迷你小地图功能,对于Bing Map Silverlight Control就没有这样的内置控件.但不必费心费神的自己去开发一个这样的控件来实现这个功能,因为在DeepEarth中已经为我们提供了这样一个控件,首先看看在Bing Maps(http://cn