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 を使用して、新しいコードを記述してこれをテストできます。
私の希望は、このエラーにつながる根本的な条件を見つけて、原因を修正することです.
ありがとうございました。