1

我有 3 层(UI、BLL、DAL),那些 BLL 和 DAL 驻留在外部 WS 上,显然我的会员用户在 UI 层上工作。

所以...我试图在我的业务表中存储不同任务的用户名(如 CRUD)

  • 插入注册表(用户名:nicolas)
  • 删除注册表(用户名:peter)等...

最简单的方法是在所有方法上发送用户名并存储在不同的表中。但是如果你有很多业务表,这个想法是不可扩展的并且非常肮脏。

有人知道另一种方法吗?我阅读了有关编写自定义成员资格提供程序以将不同用户存储在缓存中并从中检索的信息。但我不知道这是否是最好的解决方法。

有任何想法吗?

4

2 回答 2

1

除非您在 BLL 和 DLL 中使用服务,否则有什么意义,除非通过 UI 访问这些服务。

于 2011-05-13T19:19:43.090 回答
1

ASP.NET 的自定义控件依赖于 System.Web(更具体地说,System.Web.Security)中的 Membership 库。只要您使用这些控件(例如,<asp:Login>控件),您就已经依赖于 System.Web。在这种情况下,应用程序的任何层都可以执行以下操作来检索当前用户:

using System.Web.Security;
...
MembershipUser user = Membership.GetUser();

然后用于user.UserName检索用户的用户名。


更新以反映对图层托管在不同服务器上的理解。

我将向 BLL 添加一个 StartSession() 方法,该方法将用户名作为参数,并返回一个字符串会话 ID。服务器上的 BLL 生成会话 ID(可能使用 Guid)并使用 BLL 端缓存来保存用户名。然后在客户端,设置一个包含会话 ID 的 cookie。它将与 Web 请求一起提交。(根据您提交网络请求的方式,您可能需要使用 javascript 设置 cookie 值。)

这样您就不必修改方法的签名,但仍然可以通过使用缓存从 BLL 中获取用户名。您必须确保您的登录页面调用 GetSession() 方法,并在提交更多请求之前设置会话 cookie。

于 2011-05-13T21:15:19.370 回答