2

我是一名 Web 开发人员,在一家新商店与来自桌面背景的开发人员一起工作——因此,他们在组织代码时有某些特质/最佳实践——其中一个是将单独的 UI 视图隔离到不同的项目中。

所以,在房子的网页端,我在不同的应用程序域中构建不同的项目时遇到了问题:

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

2) 我有一个带有 default.aspx 的“查看器”项目——它最初在门户项目中为“Viewer.aspx”,它在相同的登录方案下被覆盖并经过良好的身份验证,但我们认为它会很好在它自己的项目上,因为它是一个单独的视图。

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

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

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

http://localhost/查看器

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

http://localhost/Portal/查看器

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

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

4

2 回答 2

4

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

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

要解决您的问题,此答案可能会为您提供所需的内容:使用 ASP.NET 会话状态服务在应用程序之间共享会话

于 2012-05-01T04:08:44.740 回答
0

有一种方法可以拥有多个项目,但只有一个站点。这个例子有点老了,但仍然有效,这就是我们做网站的方式。

于 2012-05-01T21:25:36.720 回答