单个AppDomain中的多个应用程序

时间:2012-04-30 22:48:34

标签: asp.net authentication appdomain

我是一名网络开发人员,他在桌面背景下与开发人员一起在新店工作 - 因此他们在组织代码方面有一些特殊性/最佳实践 - 其中一个是单独的UI视图被隔离到不同的项目。

所以,在网络方面,我遇到了在不同应用领域构建不同项目的问题:

1)我有一个带有default.aspx的“门户”项目        在后面的代码中,有一个从Login_Authenticate事件内部调用的自定义身份验证方法,用于登录桌面应用程序的“业务层”。业务端在ASP.NET会话中存储会话数据。

2)我有一个带有default.aspx的“viewer”项目 - 这最初是在门户项目中作为“Viewer.aspx”,它在同一个登录方案下被覆盖并且经过验证很好,但我们认为它会是很高兴站在它自己的项目上,因为它是一个单独的视图。

我们在两个web.config文件中添加了相同的机器密钥,因此可以通过单点登录传递.NET表单身份验证。

我用两种不同的方式构建了查看器项目:

第一次尝试(它自己的URL):

http://localhost/Viewer

第二次尝试(门户网站URL下的子域名):

http://localhost/Portal/Viewer

我遇到的问题是Portal项目和Viewer项目之间没有传递会话。我知道这是因为IIS在不同的应用程序域中运行它们。遗憾的是,如果没有来自Portal的ASP.NET会话,则Viewer不会登录到业务应用程序。

是否有最佳实践/甚至可以在一个应用程序域中运行多个项目? Viewer是否应该成为Portal应用程序的一部分,因为它需要相同的会话? Viewer是否应该是一个单独的项目,需要它自己单独登录到业务层?这种情况是否有最佳实践/指南?

2 个答案:

答案 0 :(得分:4)

默认情况下,会话不能在不同的应用程序之间共享。

在实践中,大多数项目都不是这样分开的。根据我的经验,大多数人使用某种n层架构。基本上,您在一个asp.net项目中拥有所有“视图”代码,在另一个dll项目中拥有任何商业逻辑/数据对象,并在第三个dll项目中拥有数据访问权限。然后该网站只引用其他两个dll。

要解决您的问题,此答案可能会为您提供所需内容:Sharing sessions across applications using the ASP.NET Session State Service

答案 1 :(得分:0)

有一种方法可以multiple projects, but one site。这个例子有点陈旧,但仍然有效,这就是我们如何做我们的网站。