我可以通过WCF服务创建自定义角色提供者吗?

我有一个通过wcf服务访问数据库的Web应用程序。 我们的想法是使用wcf服务从Web应用程序中抽象数据。 一切正常,但我也使用内置的角色提供者使用SqlRoleManager直接访问aspnetdb数据库。 我想通过在wcf服务中创建自定义roleprovider然后通过wcf服务访问它来抽象roleprovider。

我已经创建了自定义角色提供程序,它工作正常,但现在我需要将它放在一个wcf服务中。

因此,在我开始尝试通过WCF服务实现此function之前,我在Web应用程序中创建了第二个类,该类访问了roleprovider类并更改了我的web config roleprovider参数以使用该类。 所以我的roleprovider类叫做“UcfCstRoleProvider”,我的web.config看起来像这样:

     

我的class级开头是这样的:

  public class UcfCstRoleProvider : RoleProvider { private readonly WindowsTokenRoleProvider _roleProxy = new WindowsTokenRoleProvider(); public override string ApplicationName { get { return _roleProxy.ApplicationName; } set { _roleProxy.ApplicationName = value; } } 

正如我所说,这很好。 因此第二个类称为BlRoleProvider,它具有与roleprovide相同的属性和参数,但不实现RoleProvider。 我将web.config更改为指向此类,如下所示:

       

但是我得到了这个错误。 “提供者必须实现类’System.Web.Security.RoleProvider’。”

我希望我已经解释得很好,以显示我想要做的事情。 如果我可以让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; } } 

不,您必须拥有必须实现RoleProvider的类。 那样不行。 如果您不能直接从RoleProviderinheritance此类,请考虑创建一个RoleProvider包装类,该类实现RoleProvider的props /方法,但是利用您对第二个类所需要做的任何事情。

此错误不是特定于WCF,而是特定于角色提供程序框架。

HTH。

查看代码,您似乎已经使用自定义角色提供程序进行了配置。

如果您希望能够通过Web服务对用户进行身份validation进行身份validation,则应实现一个自定义标头,以根据您配置的角色提供程序对每个请求进行身份validation。

在WCF中,事情的工作方式略有不同,它不像您可以访问会话和应用程序状态,因为每个调用被认为是无状态调用,但是自定义标头会通过在调用时处理这些内容来抵消它。