У меня есть веб-приложение, которое обращается к базе данных через службу wcf. Идея состоит в том, чтобы абстрагировать данные из веб-приложения с помощью сервиса wcf. Все это прекрасно работает, но я также использую встроенный ролевой провайдер с помощью SqlRoleManager, который напрямую обращается к базе данных aspnetdb. Я хотел бы абстрагировать ролевой провайдер, создав собственный ролевый провайдер в сервисе wcf и затем получив доступ к нему через сервис wcf.
Я создал пользовательский поставщик ролей, и он отлично работает, но теперь мне нужно поместить его в службу wcf.
Поэтому, прежде чем я безрассудно пытался заставить это работать через службу WCF, я создал второй класс в веб-приложении, который получил доступ к классу roleprovider, и изменил параметры моей конфигурации configprovider для использования этого класса. Итак, мой класс roleprovider называется «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, который имеет свойства и параметры, идентичные роли roleprovide, но не реализует 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, но как мне преодолеть эту ошибку?
Или, может быть, я ошибся и есть лучший способ сделать то, что я хочу сделать?