我有一个通过 wcf 服务访问数据库的 Web 应用程序。这个想法是使用 wcf 服务从 web 应用程序中抽象数据。一切正常,但我也使用内置的角色提供者使用 SqlRoleManager 直接访问 aspnetdb 数据库。我想通过在 wcf 服务中创建自定义角色提供者然后通过 wcf 服务访问它来抽象角色提供者。
我已经创建了自定义角色提供程序,它工作正常,但现在我需要将它放在 wcf 服务中。
因此,在我一头扎进尝试通过 WCF 服务让它工作之前,我在 Web 应用程序中创建了第二个类来访问角色提供程序类并更改我的 Web 配置角色提供程序参数以使用该类。所以我的角色提供者类称为“UcfCstRoleProvider”,我的 web.config 如下所示:
<roleManager
enabled="true"
defaultProvider="UcfCstRoleProvider">
<providers>
<add
name="UcfCstRoleProvider"
type="Ucf.Security.Wcf.WebTests.UcfCstRoleProvider, Ucf.Security.Wcf.WebTests"
connectionStringName="SqlRoleManagerConnection"
applicationName="SMTP" />
</providers>
</roleManager>
我的课是这样开始的:
public class UcfCstRoleProvider : RoleProvider
{
private readonly WindowsTokenRoleProvider _roleProxy = new WindowsTokenRoleProvider();
public override string ApplicationName
{
get
{
return _roleProxy.ApplicationName;
}
set
{
_roleProxy.ApplicationName = value;
}
}
正如我所说,这很好用。因此,第二个类称为 BlRoleProvider,它具有与角色提供者相同的属性和参数,但不实现 RoleProvider。我更改了 web.config 以指向此类,如下所示:
<roleManager
enabled="true"
defaultProvider="BlRoleProvider">
<providers>
<add
name="UcfCstRoleProvider"
type="Ucf.Security.Wcf.WebTests.BlRoleProvider, Ucf.Security.Wcf.WebTests"
connectionStringName="SqlRoleManagerConnection"
applicationName="SMTP" />
</providers>
</roleManager>
但是我得到了这个错误。 “提供者必须实现类‘System.Web.Security.RoleProvider’。”
我希望我已经解释得足够好,以表明我正在尝试做什么。如果我可以让角色提供者通过同一应用程序中的另一个类工作,我确信它可以通过 WCF 服务工作,但我如何克服这个错误?
或者也许我走错了路,有更好的方法来做我想做的事??
最佳答案
我认为最好的办法是创建一个自定义角色提供程序并实现每个方法。在每个方法的实现中,调用WCF服务进行数据访问。例如:
public class WcfRoleProvider: RoleProvider
{
public bool IsUserInRole(string username, roleName)
{
bool result = false;
using(WcfRoleService roleService = new WcfRoleService())
{
result = roleService.IsUserInRole(username, roleName);
}
return result;
}
}
关于c# - 我可以通过 WCF 服务创建自定义角色提供者吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2850374/