我正在对包含数千个屏幕的大型.NET Framework基于Web的(vb.net)ERP系统进行现代化改造,我正在考虑推荐从更传统的后端HTML生成过程中缓慢移动屏幕由.NET Core WebAPI提供的Angular UI。
我是否可以开发.NET Core WebAPI并为.NET Framework编译然后在与现有应用程序的其余部分相同的应用程序池中运行它?我假设我可以充分处理路由以分隔旧页面和新页面,但访问相同会话/应用程序池的好处将简化许多问题。
旧的'遗留'代码将继续按原样开发,但如果任何代码需要在两者之间共享,那么它将被移动到.NET Core项目,为.NET Framework编译并在遗留代码中引用。这是合法/可能的开发过程吗?
答案 0 :(得分:1)
因为会话,身份验证等内容涉及加密,如果应用程序可以某种方式配置为以相同方式加密和解密,则应用程序只能“共享”它。
对于较旧的ASP.NET应用程序,这是通过机器密钥处理的。您只需在Web.config中为每个应用程序设置相同的机器密钥,然后他们就可以互相理解。
但问题在于,ASP.NET和ASP.NET Core 从根本上处理会话甚至加密等事情。 ASP.NET通过机器密钥加密,而ASP.NET核心使用数据保护提供程序。它不知道或不关心机器钥匙;它甚至没有使用Web.config。然后,更糟糕的是,持久化会话状态的实际机制是不同的,所以即使你能够以某种方式让他们能够加密和解密彼此的东西,他们也无法了解实际的会话数据。
长和短,不,你不能在ASP.NET和ASP.NET核心应用程序之间共享会话。
此外,虽然您可以在同一个应用程序池中运行它们(您可以从技术上在同一个应用程序池中运行您想要的任何),但这并不能为您带来任何好处。在同一个应用程序池中不会赋予任何神奇的属性。相反,在同一个应用程序池中只需将应用程序的命运联系在一起。如果一个人崩溃,它可能会带走池中的其他所有东西。通常最好在自己的应用程序池中隔离应用程序。
答案 1 :(得分:0)
您确实可以在应用程序之间共享应用程序池,但是您在同一应用程序池的应用程序中访问Session是错误的。
每个应用程序的会话对象总是不同的。
除此之外,从长远来看,我没有看到共享应用池的好处。由于其中一个应用程序中的问题可能会影响在同一个应用程序池中运行的其他应用程序。