ролевый провайдер настроен следующим образом с использованием DataContext. На мой взгляд, у меня есть следующий пользовательский элемент управления ...
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
if (Request.IsAuthenticated) {
%>
Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
<%= Html.ActionLink("Logout", "Logout", "Membership") %> | (
<%
var roles = System.Web.Security.Roles.GetRolesForUser(Page.User.Identity.Name);
foreach (string role in roles)
Html.Encode(role);
%>
)
Теперь, если я запустил это на своем локальном компьютере, он работает нормально. Имейте в виду, подключен к той же базе данных, что и мой удаленный ящик. Он регистрируется и показывает роли, в которых участвует участник.
если я запускаю на удаленном компьютере, с той же базой данных, он войдет в систему и покажет имя участника - НО ... он не отображает роли. Есть идеи, почему это может происходить? Мой поставщик ролей вычерчен ниже.
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
namespace Providers
{
public partial class RoleProvider : System.Web.Security.RoleProvider
{
private readonly Models.Contexts.DatabaseDataContext dataContext;
protected Models.Contexts.DatabaseDataContext DataContext
{
get { return dataContext; }
}
public RoleProvider()
: base()
{
if (dataContext == null)
dataContext = new DataContextProvider().GetDataContext<Models.Contexts.DatabaseDataContext>("contextProvider");
}
public RoleProvider(IDataContextProvider dataContextProvider)
: this()
{
dataContext = dataContextProvider.GetDataContext<Models.Contexts.DatabaseDataContext>("contextProvider");
}
public override string[] GetRolesForUser(string email)
{
DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
var member = (
from m in DataContext.Users
where m.Email == email
select m).Single();
List<string> roleList = new List<string>();
foreach (Models.Group group in member.Groups)
roleList.Add(group.Role.RoleName);
return roleList.ToArray<string>();
}
}