免责声明这不是我的想法,我从来没有这样做过,可能离题:
经过初步审查,我认为您在下面讨论了 3 个备选方案:
- 合并到一个应用程序中,
- 将一个应用程序作为根应用程序,将另一个应用程序作为“子”应用程序
- 构建后将合并复制到一个应用程序中(这可能是不可能的)
1) 合并到 1 个应用程序给您带来以下好处,相对简单,您需要修改 global.asax - 设置您的 mvc 路由、IOC 等 – HttpApplication、Session 和 Security(假设表单基于)将正常工作。
有一个有点“小”的问题,那就是共享 tempData,如果您可以在页面上实例化 SessionStateTempDataProvider(初始化加载,卸载以保存类似于视图状态),您应该能够创建它,我似乎无法找到博客,但认为它是几个月前的Steve Sanderson。
您的单元测试/代码覆盖率将难以跟踪,您可能需要想办法管理它,这是一个完全不同的讨论。
2) 使用此选项,您将完全分离具有一系列新继承问题的应用程序。如果您的应用程序使用 HttpApplication.* 可能会导致问题,因为它们会引用不同的文件夹、上下文等,但忽略说明您很高兴它们是不同的应用程序
下一个大问题是让 Sessions 工作,现在这可能会非常棘手,如果 session 是 inproc 则每个应用程序都不会看到其他应用程序会话,但是如果您使用 SQL 或自定义缓存服务器来获取会话状态您应该能够“破解”程序或引用/配置并在应用程序之间共享会话状态 - 最坏的情况是您需要编写自己的会话提供程序,(我从未编写过,所以不知道这会有多难是或者如果它甚至实用)。
下一个问题是表单身份验证,您可以进行标准单点登录,并确保配置中的 MachineKey 验证和解密密钥相同。临时数据将与选项 1 相同。对我来说,这听起来像是要更改的东西太多,要可行...
3) 假设您使用您的 asp.net 站点并添加对 mvc 的引用并添加您的默认全局 asax 路由等,应用程序仍应构建干净,但在查找时会引发路由错误/controller/action/id 类型的路由,所以你可能需要检查这个。
假设可行,您可以“潜在地”对两个应用程序进行 xcopy 合并(即将 mvc 应用程序中的所有文件复制到 asp.net 应用程序预部署中)。我知道你可以通过创建一个已经合并两个应用程序的大项目来做到这一点,但是这样代码在构建过程的更晚阶段合并。 (签名的程序集,我觉得很麻烦)。再次,您将需要处理临时数据问题...
我还没有谈到 url 重写和您可能需要考虑的许多其他方面,请注意您可能需要考虑的每种方法都有明显的缺点。
总结一下,我认为你最大的问题将是来自 mvc 端的 HttpApplication、Session 和 TempData,从 asp.net 端查看状态。 Url重写,认证应该更容易。
正如阿甘正传所说,“这就是我的想法”。