Asp.net 移动到Azure主机以及如何选择会话状态、数据库和服务器

Asp.net 移动到Azure主机以及如何选择会话状态、数据库和服务器,asp.net,azure,session,azure-web-app-service,session-state,Asp.net,Azure,Session,Azure Web App Service,Session State,我是Azure的新手,被要求将网站移动到Azure托管 迁移到Azure hosting do似乎是一个问题,但问题似乎在于asp.net会话状态,我们的网站是使用asp.net 4.0和MVC开发的,有些网站是在2013-2014年前后开发的 我最担心的是如何选择会话状态或第三部分会话缓存,这样我们就不需要对web.config文件以外的代码进行任何更改 我们围绕它写了这么多的文章,造成了混乱 我希望我们能够以最好的方式迁移到azure主机,而不必更改web.config文件以外的代码 我查看

我是Azure的新手,被要求将网站移动到Azure托管

迁移到Azure hosting do似乎是一个问题,但问题似乎在于asp.net会话状态,我们的网站是使用asp.net 4.0和MVC开发的,有些网站是在2013-2014年前后开发的

我最担心的是如何选择会话状态或第三部分会话缓存,这样我们就不需要对web.config文件以外的代码进行任何更改

我们围绕它写了这么多的文章,造成了混乱

我希望我们能够以最好的方式迁移到azure主机,而不必更改web.config文件以外的代码

我查看了Azure Redis缓存,但这也需要安装
Microsoft ASP.NET Universal Providers
并更改配置文件

Azure是否为MS SQL数据库提供了对SQL会话的内置支持,因此我们只需更改web.config文件,而无需使用nuget等安装包

微软博客的这个选项似乎是一个选项,如果这个方法正确且简单,可以进行一些配置。但在评论中,用户也对这种方法提出了一些问题

基于以上,让我给出更多细节

  • 我们使用基于windows的专用服务器进行托管
  • 我们使用MS SQL SERVER Windows 2012作为数据库
  • IIS 7.5
  • 以及其他管理网站的软件,如plesk
  • 我们的网站是在基于asp.net webform的网站上开发的,运行的是框架4.0或4.5
  • 在Framework4.5上运行的基于asp.NETMVC的网站也很少
  • 我们使用InProc默认会话状态
首先,我最关心的是会话状态,我想迁移到Azure,除了对web.config进行更改外,不做任何代码更改。这可能吗

第二,我们使用MS SQL SERVER 2012作为数据库,Azure中的哪些内容与某些页面中的相同?它将数据库引用为,以及某些位置引用为,这会造成此SQL数据库或Azure数据库的混淆,因为我用红色表示这是两个不同的东西

第三,假设我选择Meb+Mobile-->应用服务标准包(最多10个实例),这些实例是什么?单个会话是否总是连接到同一个实例

第四:数据库我有大约20个数据库,其中一个大约为6GB,其他数据库大约为200MB-700MB,我应该为数据库使用哪种服务

  • 单一数据库还是弹性数据库
  • 我可以在弹性模式下创建多个数据库吗
  • 假设我选择“100 eDTUs:每个池包含10 GB存储,每个池200 DBs,$0.20/小时”,那么弹性池中所有数据库的总空间为10GB,每个池的容量是多少,在这个选项中我将获得多少个池
Fith:磁盘空间,假设我选择应用程序服务“S2:2个内核,3.5 GB RAM,50 GB存储,$0.200”,50GB磁盘空间包括操作系统还是允许上传文件的空间


我问了太多的问题,因为我没有从MS chat中弄清楚,因为他们只是传递了一些链接,这些链接在当时可能会让人困惑

是的,Redis会话状态提供程序是一个Nuget包,尽管你可能会将其安装到另一个项目中,然后将DLL扔到应用程序的bin文件夹中。我还没有测试过这个,所以我不知道它是否真的有效

但遗留应用程序的另一个选项是在应用程序服务中保持ARR关联打开(如果您正在使用它们)。这将在客户端首次连接时有效地设置cookie,以便负载平衡器始终将它们连接到同一实例,从而使内存会话状态工作


当然,问题是如果实例因任何原因重新启动,您将丢失会话状态。自动缩放也是一个问题。

你的意思是说,如果激活,我们不需要做任何其他事情,它会自动再次连接到同一个实例,还是我们必须在web.config中使用machinekey?我记得几年前,我的网站托管在服务器场中&我一直丢失会话变量由于我不知道它是一个服务器场宿主,所以通过在webconfig中添加machinekey解决了这一问题,它始终将单个会话连接到同一个实例/machineMachine密钥解决了一个问题,因为跨实例的密钥必须相同,以便使用它们加密/签名的任何内容也适用于其他实例。但ARR亲和性解决了这个问题,因为它确保了浏览器中的用户会话至少会始终命中同一实例(如果该实例可用的话)。但它并不完美,正如我所说的,内存中的会话状态可能会丢失。这在on-prem web farms中也是如此。我想我可以尝试检查一些基本网站
ARR Affinity
的网站,因为我们不存储或使用会话变量作为关键内容。虽然redis可能会用于其他有流量且可能依赖会话性能的网站,但我对Azure完全是新手,因此,当他们通过be链接了解更多我为什么试图问技术问题以保持清晰性时,尝试说“作为Microsoft聊天”并没有多大帮助。