我正在使用 ASP.NET 2.0 在 Community Server 2008 SP2(这是 2008-2011 年间的博客软件)上运行博客。评论目前不起作用,我正在研究为什么它不起作用。
当我查看异常日志时,我看到:
Exception Type: RoleNotFound
User Agent:
Path: as HTTP
Referrer:
Message: Error while trying to find a role for the user 'chuacw'. Possible cause is a invalid client cookie or a user rename.
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.Security.Roles.GetRolesForUser(String username)
at CommunityServer.ASPNet20MemberRole.CSRoles.GetRolesForUser(String userName)
at CommunityServer.Components.Roles.UserRoleIDsCollection.LoadFromDatabase(String username)
为了对此进行调查,我创建了 testrole.aspx,其内容如下:
<%@ Page %>
<%@ Register TagPrefix="CSM" Namespace="CommunityServer.ASPNet20MemberRole"
Assembly= "CommunityServer.ASPNet20MemberRole" %>
<%@ Register TagPrefix="Custom2" Namespace="CommunityServer.Components"
Assembly= "CommunityServer.Components" %>
<%
String username = "chuacw";
CommunityServer.ASPNet20MemberRole.CSRoles role = new
CommunityServer.ASPNet20MemberRole.CSRoles();
CommunityServer.Components.Role[] lRoles = role.GetRoles();
foreach (CommunityServer.Components.Role lRole in lRoles) {
Response.Write("Role: " + lRole.Name + "<br />");
}
Response.Write("<br/>");
Response.Write("Username is: " + username + "<br />");
String[] roles = role.GetRolesForUser(username);
foreach (string lSrole in roles) {
Response.Write(lSrole + "<br/>");
}
%>
我直接在浏览器中打开了这个页面,从我的站点,即 http://mysite/testrole.aspx 没有登录到我的站点。
此代码有效,我能够看到角色列表和用户名。
鉴于我的代码名为CommunityServer.ASPNet20MemberRole.CSRoles.GetRolesForUser,这与本问题开头引发异常的代码调用的方法相同,我无法理解为什么会引发此异常。
我是这个数据库的管理员,我是用户“chuacw”。我可以使用这个用户登录这个博客软件。
有谁知道我该如何进一步调查?我没有源代码,但是,我可以使用 ILSpy 和 Reflector,并编写新代码来测试它。
我希望找到导致此错误的潜在条件,并解决原因。
谢谢你。