2012-04-30 50 views
2

我是一个Web开发人员,他与一个桌面背景的开发人员一起在一家新店中工作 - 因此他们在组织他们的代码时有一定的特质/最佳实践 - 其中之一是单独的UI视图被分离到不同的项目中。多个应用程序在单个AppDomain

所以,关于房子的Web端,我有不同的项目建设在不同的应用程序域的一个问题:

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

2)我有一个“浏览器”项目与default.aspx - 这是最初在门户网站项目为“Viewer.aspx”,它被覆盖在同一登录方案和认证正常,但我们决定它会善于站在自己的项目上,因为它是一个单独的视图。

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

我建在两个不同的时尚观察者项目:

1 TRY(它自己的网址):

http://localhost/Viewer

第二尝试(门户网站URL下一个子域):

http://localhost/Portal/Viewer

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

是否有最佳做法/是否可以在一个应用程序域中运行多个项目?查看器是否应该成为门户应用程序的一部分,因为它需要相同的会话?查看器是否应该是一个单独的项目,需要它自己单独登录到业务层?这种情况下是否有最佳做法/指导方针?

回答

4

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

在实践中,大多数项目不以这种方式分开。根据我的经验,大多数情况下都使用某种n层体系结构。基本上你有一个asp.net项目中的所有“视图”代码,另一个dll项目中的任何buisness逻辑/数据对象,以及第三个dll项目中的数据访问。该网站然后只是引用其他两个DLL。

为了解决您的问题,这个答案可能会给你想要的东西:Sharing sessions across applications using the ASP.NET Session State Service

+0

对 - 这就是我遵循的方法。他们(桌面/ winform开发者)想要我在单独的项目中构建viewer.aspx页面,然后通过xcopy将其部署到门户应用程序域。我希望他们有一个非常具体的理由,为什么这被认为是不好的做法。 –

+0

编程的乐趣是你可以构建一个“可怕的”系统,但它仍然可能工作。在你的情况下,你有一个“可怕”的架构,但有办法让它工作。为每个视图创建一个完全不同的项目将成为维护噩梦!我建议看看一些开源项目,看看他们是如何做到的。 –

+0

他们可以通过使用xcopy手动复制文件来部署到相同的应用程序域 - 这在他们之前手动完成的Web项目中得到了验证。最大的问题是如果我们 - 如果不是 - 为什么不呢? –

相关问题