《Windows Azure Platform 系列文章目录

  本文将简单介绍,如何将企业内现有的ASP.NET应用程序迁移到Azure PaaS平台。

  因为在迁移过程中,可能需要对现有的应用重新做架构设计,本文只是进行简单的介绍,开拓思路,具体的应用需要具体研究分析。

  1.首先需要下载Azure SDK。使用Visual Studio创建新的Cloud Service,将现有的ASP.NET应用程序页面包含在Cloud Project中。

  2.对于用户会话(Session)进行修改。

  Cloud Service的负载均衡器(Load Balancer)不能保留Session。我们需要将Session保存到SQL Server或者其他外置的存储介质上。

  具体可以参考我之前的博文:Windows Azure Cloud Service (13) 多个VM Instance场景下如何处理ASP.NET Session

  里面的内容有些过时了,总结下来可以有以下几种方式实现保持会话(Sticky-Session)

  (1)将Session保存在SQL Server Table中,后期对于数据表的维护,需要用户自己来实现相关的业务逻辑。

  (2)将Session保存在Cache中。比如Cloud Service的In-bound Cache,或者是海外Azure的Redis Cache

  3.将需要调用的dll包含在Cloud Project中,并且将属性中的"Copy to Output Directory"设置成"Copy always"。

  这样,需要被调用的dll会被直接打包到CSPKG中,在部署的时候上传到Azure云端进行调用。

  4.将需要安装的第三方软件,包含在Cloud Project中,并且将属性中的"Copy to Output Directory"设置成"Copy always"。

  在ServiceDefinition节点里添加Startup任务,CMD文件中执行"静默"安装。

  Azure PaaS平台是非持久化VM,任何通过远程桌面安装的软件都是无效的。我们需要将第三方软件包含在Cloud Project中,在部署的时候上传到Azure云端。

  Startup的功能是,在每次PaaS VM被重置的时候,执行CMD命令,将第三方软件在新创建的PaaS VM进行安装。

  "静默"安装的目的是,直接安装完毕,不需要进行任何的配置。

  具体可以参考之前的博文:Windows Azure Cloud Service (22) 使用Startup注册COM组件(上)

  5.将文件的上传下载保存在Azure Storage中

  一般情况下,客户端将文件从本地上传至服务器端后,文件是保存在服务器端的本地磁盘里的。

  但是Azure PaaS是非持久化的VM,任何保存在本地磁盘的文件都会有丢失的风险。我们需要将服务器的文件读写的API修改为对于Azure Storage的操作,将文件保存在Azure Storage中。

  6.服务器端系统时间的修改

  一般情况下,服务器端的时区是UTC+8时区,显示的时间是北京时间。

  Azure PaaS的时区是UTC时区,如果我们在PaaS层调用系统时间,会与北京时间有差距。

  一般性有两种解决方案:

  (1)在StartUp任务中的CMD命令中,将当前PaaS VM的时区设置为UTC+8时区

  (2)在Azure Cloud Project中,将获得当前系统时间的代码修改为,获得当前UTC+8时区的时间

  7.将Cloud Project的web.config配置修改到Azure CSCFG和CSDEF中

  在传统的ASP.NET应用程序里,我们读取的配置文件一般都是放在Web.config,并且通过

  System.Configuration.ConfigurationSettings.AppSettings["SettingName"]来读取配置文件。

  在Windows Azure里,我们也可以将配置文件写入Web.config里。但是因为我们的Web App其实是Azure VM远程托管运行的,如果需要修改配置文件的话我们不得不远程登录桌面,然后再修改IIS下的Web.config文件。管理起来非常复杂。

  所以在一般情况下,Windows Azure项目的配置文件是写到CSCFG文件里的。然后通过RoleEnvironment.GetConfigurationSettingValue("cscfgName")来读取。

  这样我们就可以直接通过配置部署窗口进行修改,而不需要远程桌面修改站点的Web.config或者重新发布Azure站点了。

  具体可以参考:Windows Azure Cloud Service (9) Configuration的变更和通知机制

  8.将Web应用的业务逻辑拆分到Web Role或Worker Role中

  在传统的ASP.NET的应用程序里,前端显示和复杂逻辑都是包含在一个Web Applicatio中的。

  我们可以针对实际的应用情况,将前端显示逻辑放在Web Role,后端的负载业务处理放在Worker Role中。实现前端显示和业务逻辑的拆分。

  本博-三石Blog(下文简称本博),在本博客文章结尾处右下脚未注明转载、来源、出处的作品(内容)均为本博原创,本站对于原创作品内容对其保留版权, 请勿随意转载,如若真有需要的朋友可以发Mail联系我;转载本博原创作品(内容)也必须遵循“署名-非商业用途-保持一致”的创作共用协议,请务必以文 字链接的形式标明或保留文章原始出处和博客作者(Lei Zhang)的信息,关于本博摄影作品请务必注意保留(www.cnblog.com/threestone)等相关水印版权信息,否则视为侵犯原创版权 行为;本博谢绝商业网站转载。版权所有,禁止一切有违中华人民共和国著作权保护法及相关法律和本博(法律)声明的非法及恶意抄袭。

Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台的更多相关文章

  1. Windows Azure Cloud Service (11) PaaS之Web Role, Worker Role(上)

    <Windows Azure Platform 系列文章目录> 本文是对Windows Azure Platform (六) Windows Azure应用程序运行环境内容的补充. 我们知 ...

  2. [SDK2.2]Windows Azure Cloud Service (35) 使用VS2013发布Azure Cloud Service

    <Windows Azure Platform 系列文章目录> 好久没有更新BLOG了,今天我们继续Windows Azure相关的内容. 笔者最近把Visual Studio升级到了20 ...

  3. Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书

    <Windows Azure Platform 系列文章目录> 在某些时候,我们需要在Azure PaaS Cloud Service配置HTTPS连接.本章将介绍如何在本地创建证书,然后 ...

  4. Windows Azure Cloud Service (37) 浅谈Cloud Service

    <Windows Azure Platform 系列文章目录> 最近在和一些客户聊天,常常被遇到这样的问题: 1.问题一:我在创建一个新的Windows Azure Virtual Mac ...

  5. Windows Azure Cloud Service (38) 微软IaaS与PaaS比较

    <Windows Azure Platform 系列文章目录> 最近一直想总结Azure IaaS和PaaS的区别与比较,写个博文详细说明一下.建议读者在阅读之前,先熟悉微软PaaS和Ia ...

  6. Windows Azure Cloud Service (42) 使用Azure In-Role Cache缓存(1)Co-located Role

    <Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...

  7. Windows Azure Cloud Service (43) 使用Azure In-Role Cache缓存(2)Dedicated Role

    <Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...

  8. Windows Azure Cloud Service (44) 将Cloud Service加入Virtual Network Subnet,并固定Virtual IP Address(VIP)

    <Windows Azure Platform 系列文章目录> 在之前的文章中,笔者已经详细介绍了如何将Virtual Machine加入Virtual Network,并且绑定固定的Pr ...

  9. Windows Azure Cloud Service (47) 修改Cloud Service时区

    <Windows Azure Platform 系列文章目录> 本文介绍内容适合于Azure Global和Azure China 我们在使用Cloud Service的时候,会发现默认的 ...

随机推荐

  1. SELECT TOP 100 PERCENT 不按后面的order by 排序

    项目中,由于需要把3个状态的任务合并显示,并且按照任务由近及远的顺序排序,类似于下面的语句 order by taskid desc )m union all order by taskid desc ...

  2. javascript position兼容性随笔

    一.Javascript源码 if (!window.jasen.core.Position) { window.jasen.core.Position = {}; } function Size(w ...

  3. log4net入门

    简介 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题. 经验表明,日志 ...

  4. (转)对SQLSERVER数据库事务日志的疑问

    本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLS ...

  5. ABP框架Web API跨域问题的解决方案

    ​1.在Web Api 项目下安装 Microsoft.AspNet.WebApi.Cors 包 Install-Package Microsoft.AspNet.WebApi.Cors 2.在Web ...

  6. 最少知识原则(Least Knowledge Principle)

    最少知识原则(Least Knowledge Principle),或者称迪米特法则(Law of Demeter),是一种面向对象程序设计的指导原则,它描述了一种保持代码松耦合的策略.其可简单的归纳 ...

  7. openwrt-智能路由器hack技术(1)---"DNS劫持"

    openwrt-智能路由器hack技术(1)---"DNS劫持" 1   导读 PS:之前写的一个文章,现在发现结构内容排版不是太好,导致阅读体验太差,影响传播和SEO,所以现在整 ...

  8. 《C#图解教程》读书笔记之四:类和继承

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.万物之宗:Object (1)除了特殊的Object类,其他所有类都是派生类,即使他们没有显示基类定义. ( ...

  9. 假如现在有一堆长度大于3小于9的电话号码,用座机呼叫,如果出现这样的号码【123和12345】那么12345将永远不会被拨出,因为拨到123的时候电话已经呼出了,试写一个函数输出所有不能被呼出的电话号码(java实现)

    解题: 假如现在有一堆长度大于3小于9的电话号码,用座机呼叫,如果出现这样的号码[123和12345]那么12345将永远不会被拨出,因为拨到123的时候电话已经呼出了,试写一个函数输出所有不能被呼出 ...

  10. 用 C 扩展 python

    本文介绍如何用 C 语言来扩展 python.所举的例子是,为 python 添加一个设置字符串到 windows 的剪切板(Clipboard)的功能.我在写以下代码的时候用到的环境是:window ...