将经典ASP和ASP.NET Webforms转换为ASP.NET MVC

3

我目前在一家公司工作,他们使用ASP.NET Webforms和传统的ASP页面进行Web开发的组合。这对于他们当前的项目来说效果还不错,但我想说服/建议他们转换到ASP.NET MVC,因为他们大部分的代码库都是将表单元素连接到存储过程参数上的。只使用ORM也是一种可能性,但我认为利用这个机会转换到MVC框架是一个好主意。

然而,我不确定在更新代码库的同时部署ASP.NET MVC应用程序和ASP.NET以及Classic ASP代码有多容易。首先,我想问一下这是否可能。我看到了一些关于运行ASP.NET与Classic ASP和ASP.NET MVC与Webforms的线程,但没有在同一应用程序中同时运行三者的情况。他们目前已经让Webforms和Classic ASP协同工作,因此与此相关的问题已经解决。其次,有哪些强有力的卖点可以帮助我说服团队其他成员学习新框架并将现有代码转换为MVC将在长期内值得吗?


请参见https://dev59.com/pHRB5IYBdhLWcg3wuZQ1,这可能不是重复问题,但可以帮助你。 - ChrisF
对我而言,关注点分离一直是MVC胜过WebForms的一个重要优势。 - Dan Atkinson
2个回答

8
我看到这是一个旧问题,但由于我也在同一条船上,所以我想试试。
我有一个由Classic ASP编写的100k+页面站点,历时12-15年。与许多拼凑在一起的代码不同,它结构良好、复杂且高效,并已经被精细化到错误非常少的程度。
在过去三四年中添加的许多新功能都是用ASP.NET实现的。这需要重新实现许多底层的DAL和业务逻辑,而且当然,新的东西从来没有像那些运行了近十年而没有任何问题的代码那样稳定。将源代码保存在服务器之外,远离窥探的眼睛和手指,这也是非常好的。
我一开始抵制MVC,但现在我喜欢它。它并不提供Webforms的所有功能——易于打包和分发的用户控件是我非常想念的东西——但它比Web开发更像传统的应用程序开发,这是我喜欢的。它也更容易编写测试——这对我来说是一个巨大的卖点。
因此,当前的Visual Studio解决方案如下:
- 一堆.NET类库(DAL等) - 包含所有旧代码和所有webforms内容的ASP Web应用程序项目 - 一个MVC Web应用程序项目。
IIS指向MVC项目文件夹,因此所有MVC内容都按预期工作。网站配置包括所有未迁移的ASP内容的虚拟文件夹(这将需要数年时间)。这些虚拟目录指向MVC文件夹结构之外的一个文件夹,其中存储了Webforms和Classic ASP代码/对象。当IIS接收到请求时,映射到虚拟文件夹的内容由经典ASP或Webforms处理,而其他所有内容都会路由到相应的MVC区域。
我有意保持这些项目分离;在同一文件夹结构中具有ASP、MVC和Webforms的单个解决方案是通往疯狂的必经之路。
它运行得非常好,但最初配置起来有点麻烦。
因此,是的,所有三种技术都可以在同一站点中愉快地存在,但您面临着一些组织上的挑战。

David,你对会话做了什么?这些应用程序之间的会话如何共享/传输? - CF_Maintainer
@CF_Maintainer 我自90年代末以来就没有使用过会话变量。你可以从session()转移到数据库,然后自己处理它(两个应用程序都将在数据库中存储所需的任何状态信息,因此任何人都可以访问它)。 - 3Dave
David,感谢您的回复。这个经典的ASP应用程序大量使用Session,因此我才会提出这个问题。我很少做网页开发,但是为了不闲置,我被分配了逐步迁移这个经典的ASP应用程序的任务。 - CF_Maintainer
David,那么您建议将当前用户凭据和GUID标识符存储在数据库中,并将GUID标识符传递给ASP.NET MVC应用程序以获取凭据并确认它们?这意味着在注销或会话过期时删除数据库条目。 - CF_Maintainer
不,只需在数据库中添加一个过期日期时间列,并在每次页面请求时将其更新为当前时间加上20分钟。无需删除它:实际上可以用来生成关于活跃用户及其频率的报告。 - 3Dave
David,谢谢,这正是我正在做的。另一个问题出现了,遗留的ASP代码从一开始就使用Session。因此,如果用户在MVC页面停留20多分钟,然后浏览到ASP页面,我认为ASP会话将已过期。不确定如何防止ASP会话在用户在MVC侧停留20分钟或更长时间时超时。 - CF_Maintainer

1

可以同时运行部分标准的Asp.net和Asp.net Mvc网站。至于经典ASP,我从未尝试过,但我想如果它可以与标准的Asp.NET一起运行,那么Mvc就不是问题。

至于为什么,提醒他们经典ASP不是市场上理想的技能。有些人会一直抵制变化和新技术(因为旧的东西仍然很好用,他们可能是正确的)。找到那些急于交换技能集的开发人员,并让他们联合起来。但要确保Mvc对该应用程序有意义。管理层可能会想知道为什么需要进行大量投资升级,而旧系统仍然很好用,这将更难推销。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接