是否能将应用程序几乎原封不动地部署到 Azure 取决于您的应用程序如何工作。Azure 几乎要求您的应用程序是无状态的。如果它是一个只在会话或应用程序缓存中存储数据并仅将数据保存到数据库的普通网络应用程序,那么您可以将其部署到 Azure。
如果您正在运行有状态服务(这本身就很糟糕),或者如果您将数据保存到文件系统(除了临时缓存之外),则可能会出现问题。实际上,移动到 Azure 的问题与移动到任何多服务器负载平衡解决方案的问题基本相同。其中一个注意点是永久存储。
如果您需要将数据存储在数据库以外的地方,则最好使用 Azure 的存储解决方案,该方案具有用于存储二进制数据、键值数据(称为表,但实际上并不是表)和队列的 API 和客户端库。他们还提供透明的 blob 作为文件系统选项以实现兼容性。如果您希望在应用程序中使用它们,并且该应用程序也在 Azure 外部使用,则需要在您的代码和支持 Azure 服务和标准本地服务的 Azure 客户端库之间编写额外的层。Azure SDK 包括 Azure 服务的仿真器,但它们肯定不适用于生产环境。
至于 Azure 特定项目的机制,实际上并不那么困难。是的,您需要在解决方案中创建一个 Azure 特定的项目,定义 Web 角色和部署内容,但它将引用您现有的 Web 应用程序,而不是反过来。您可以将 Azure Web 角色部署到 Azure 或者继续以常规方式将现有应用程序部署到 IIS 并行进行部署。
Web 站点、Web 应用程序、MVC 实际上并没有太大的区别。实际上也不必是 .NET。可以是 PHP 或 Java 或任何你想放在 VM 上的语言。就 Azure 而言,它们都可以正常工作。
微软喜欢将 Azure 推销为平台即服务(PaaS)解决方案,在该解决方案中,他们提供了大量服务,您可以在其标准平台上运行应用程序,并将其与称为基础设施即服务(IaaS)的 Amazon AWS 相对比,后者“只是”虚拟机。然而,微软实际上与 AWS 一样是 IaaS 解决方案,甚至可能更多。AWS 和 Azure 的唯一区别是 AWS 允许您选择要安装在 VM 上的内容,而 Azure 必须使用 Windows Server 2008 R2 作为 VM 的基础(但您可以自定义 VM 映像以安装在 Windows 之上的自定义软件)。在 Azure 和 AWS 上,主机提供了额外的 PaaS 服务,您可以利用这些服务进行数据存储和消息路由。AWS 还提供了大量额外的服务,如视频流。
请注意,使用Azure(以及我认为的AWS)可以在非托管应用程序中使用它们提供的服务。如果您想从非Azure应用程序中使用Azure的数据存储,您可以这样做,只需进行HTTP REST调用即可获取/放置数据。唯一的区别在于数据中心和您的非数据中心托管应用程序之间的数据输入/输出费用,如果应用程序也在数据中心内,则免费(仅数据中心内的数据输入/输出是免费的,您仍需要支付存储和交易费用)。