ASP.NET:如何在 Web 应用程序之间共享资源(成员资格、库)

Posted

技术标签:

【中文标题】ASP.NET:如何在 Web 应用程序之间共享资源(成员资格、库)【英文标题】:ASP.NET: How-to share resources (membership, libraries) between web applications 【发布时间】:2009-05-04 11:50:54 【问题描述】:

我正在尝试创建一个小型 Intranet。为此,我在本地电脑上有一个网络服务器。该网站的根目录将是一个仪表板,它将包含登录/注册功能(默认 ASP.NET 成员资格)。

http://localhost http://localhost/帐户

Intranet 的其余部分将由以下子应用程序组成:

http://localhost/ApplicationName

根网站和大多数子应用程序都需要对用户进行身份验证,我将为其使用默认的 ASP.NET 成员资格提供程序。

所有项目(根项目和子项目)都是 Visual Studio 中的单独项目, 每个项目都有自己的 用于部署的 WebSetup 项目。

1.) 如何在子应用程序中使用 ASP.NET Membership?

此外,大多数应用程序(根和子)将使用第 3 方库(数据框架)。

2.) 如何在根项目中引用库并在子应用程序中“使用”引用的库?

感谢您的任何建议!

【问题讨论】:

【参考方案1】:

在可用于多个 Web 项目的类库项目中创建您的通用代码。至于会员提供者,我认为您需要将会员数据存储在外部 SQL 实例中(可能在同一台服务器上),然后在每个项目中简单地使用相同的连接字符串来访问它。

【讨论】:

你指的通用代码是第三方库。该库由多个 dll 文件组成,这些文件包含在我部署的每个项目的 /bin/ 文件夹中。我只想将它们部署到根项目的 /bin 文件夹中。子项目需要引用这些文件。这可能吗? 看来程序集需要在 GAC(全局程序集缓存)中注册。对于会员资格部分,您的答案是最好的解决方案。 @ropstah -- 我认为避免将库放入 GAC 的唯一方法是拥有自己的层来引用这些库并将其包含在您的项目中。对包装库的引用应该“带来”对外部库的引用。我不确定这是否值得。【参考方案2】:

Membership 设计用于一个或多个应用程序。您可以拥有一个数据库实例(与您的任何应用程序的任何数据库分开),该实例可以容纳您的每个应用程序成员资格数据。如果您希望所有应用程序使用相同的成员资格数据,请在 defining Membership in each application's web.config 时提供相同的应用程序名称(和连接字符串)。

至于您问题的第二部分,tvanfosson 发布的答案(连同 cmets)应该会引导您走上正确的道路。

编辑(@ropstah 评论):啊,我没有考虑到这一点。在这种情况下,您需要实现Single Sign-on (SSO)。 Masoud Tabatabaei 发布了 an article at ASPAlliance.com ,介绍了整个过程。此外,Keith Rull 至 this Stack Overflow question 提供的答案也可能有所帮助。

【讨论】:

我尝试将 web.config 条目中的 applicationName 设置为所有项目的同一个应用程序。但是,在登录根项目时,我仍然需要登录子项目(用户/密码可以工作,但是 cookie 不会在应用程序之间持久化)。

以上是关于ASP.NET:如何在 Web 应用程序之间共享资源(成员资格、库)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中的 2 个不同项目/应用程序之间共享母版页?

如何在 ASP.NET 中跨多个 Web 应用程序维护相同的会话 ID

使用 ASP.NET 会话状态服务跨应用程序共享会话

如何在 http 和 https 之间共享 asp.net 会话

如何在工作室中的多个 ASP.Net 项目之间共享内容文件夹?

IIS 在 ASP.NET Core 和 ASP.NET 应用程序之间共享 cookie