经典的ASP和MVC并行,不同的项目?

问题描述:

我试过用几种不同的方式询问这个问题,但让我们再来看看它(因为我还没有收到答案,这使我疯狂!)经典的ASP和MVC并行,不同的项目?

我有一个非常大的经典ASP 3.0应用程序(〜350K行),我想开始迁移到ASP.NET MVC。我希望将旧的ASP文件保存在与MVC内容不同的项目中。

想法如何调试这些?我应该只将文件转储到同一个文件夹中,并创建两个不同的项目(一个WAP和一个MVC应用程序),它们引用每个项目所需的相关文件和文件夹?这应该可以,但是有没有人有更好的主意?我需要能够单独迁移小部分应用程序,因为这可能需要一年或两年才能完成。

+0

你试图将应用程序转换集体到ASP.NET MVC或只是在时间MVC将一块“拥抱和扩展”的旧的应用程序? – 2010-05-06 16:12:03

+0

“拥抱与延伸”可能最能描述我所追求的。例如,我们在/ forum文件夹中有一个ASP论坛。我想在MVC项目中创建一个名为“forum”的区域,并从ASP网站中删除相同的文件夹,并让MVC论坛接管。有了这样大小的网站,一次只能做到这一点。 – 2010-05-06 16:15:08

免责声明这是从我的头顶,我从来没有这样做,可能是没谱的方式:

的初步审查之后,我想你已经3个交替讨论如下:

  1. 合并成一个应用程序,
  2. 有一个应用程序,应用程序根,另一个为“子”应用
  3. 复制合并成编译后一个应用程序(这可能不是正锡布尔赫丁)

1)合并成1个应用程序为您提供了以下好处,比较简单,你需要修改的Global.asax - 设置你的MVC路线,国际奥委会等 - 的HttpApplication,会话和安全(假设形式基于)将会正常工作。

有一个有点“轻微”的问题,那就是共享tempData,如果你可以在你的页面上实例化一个SessionStateTempDataProvider(Init加载,卸载以保存类似于视图状态),那么你应该能够创建,似乎找到了博客,但几个月前认为它是Steve Sanderson

您的单元测试/代码覆盖率将很难跟踪,您可能需要考虑如何管理它,这是一个完全不同的讨论。

2)使用此选项,您可以将应用程序与新的继承问题完全分开。如果您的应用程序使用它,HttpApplication。*可能会导致问题,因为它们会引用不同的文件夹,上下文等,但忽略那些说明您很高兴它们是不同的应用程序

下一个大问题是让Sessions正常工作,现在这可能证明是非常棘手的,如果session处于正常状态,那么每个应用程序将不会看到其他应用程序会话,但是如果您使用SQL或自定义缓存服务器进行会话状态,则应该能够“破解”过程或引用/配置,并在应用程序之间共享会话状态 - 最糟糕的情况是,您需要编写自己的会话提供程序,(我从来没有写过一个,所以不知道这将是多么困难,或者它是否可行)。

下一个问题是表单身份验证,您可以执行标准单一登录并确保MachineKey验证和解密密钥在配置中相同。临时数据将与选项1相同。对我来说,这听起来像太多的事情要改变,可行... ...

3)假设你把你的asp.net网站,并添加引用MVC和在默认的全球ASAX添加路由等应用程序仍然应该建立干净,但扔路由错误寻找/控制器/动作时/ id类型的路由,所以你可能需要检查这个。

假设工作的,你可以“潜在”做两个应用程序的XCOPY合并(即从MVC应用程序中的所有文件复制到asp.net应用程序前展开)。我知道你可以通过创建一个合并了两个应用程序的大项目来实现这一点,但这种方式在构建过程的后期阶段将代码合并在一起。 (签字的议会,想起来很麻烦)。再次,你需要在临时数据发布工作...

我还没有触及URL重写等许多方面,你可能需要考虑,并请注意,与每种方法明显的缺点您可能需要考虑。

综上所述我认为你最大的问题将是一个HttpApplication,从MVC端会话和TempData的,观看来自asp.net端的状态。网址重写,认证应该更容易。

而正如阿甘正在说的那样,“那是我的想法”。

+0

感谢您的详细回复。实际上,我将一个经典的ASP应用程序(而不是.net)与MVC结合起来,但我认为在这里提到的所有内容仍然适用。 – 2010-05-07 15:49:38

+0

我们正在尝试使用ASP.NET MVC4做同样的事情,但是到目前为止还没有运气,这些想法并没有为我们工作。我们需要让他们进入同一个应用程序域,以便他们可以看到相同的Cookie。奖励积分可以指向我一些有用的信息的任何人。谢谢你,彼得 – 2014-02-07 16:04:18

+0

看一看我回答了关于这里http://*.com/questions/2797412/single-sign-on-asp-net-mvc/2798169#2798169 – 2014-02-28 00:38:26

经过大量的研究,我发现保持这些项目从IIS的角度来看合并的一个好方法,但在Visual Studio中的单独项目中,是在同一个文件夹中创建项目,但保留每个文件在他们自己的.csproj文件中。

通过这种方式,它可以单独或作为一个解决方案发布他们,我可以很容易地通过查看解决方案资源管理器中哪些文件属于每个项目出来。当项目从传统的ASP(再次,不是.NET)转移到MVC时,我将ASP项目中的旧文件夹从name重命名为delete-me-name,并在MVC项目中创建相应的区域。

到目前为止,这工作得很好。其他唯一的变化是增加了一个路线忽略global.asx.cs文件规则忽略.asp文件:

   routes.IgnoreRoute("{resource}.asp/{*pathInfo}"); 

到目前为止,一切似乎合作得非常好。

+0

分享饼干的问题,你是如何办理交接/经典asp和asp.net mvc之间的Session分享? – 2011-05-19 17:22:44

+0

我们不使用会话。如果你有多台服务器,它永远不会结束。 – 2013-05-23 23:02:59