2013-07-29 3 views
1

Я уже несколько дней борюсь с этим - я не могу правильно настроить эту службу WCF для использования пользовательского поставщика членства. Когда я запустим тестовый клиент, я получаю эту ошибку:Конфигурация WCF - Пользовательская аутентификация на хосте

The username/password Membership provider MidlandsCoop.MembersWcfService.Business.UserAuthentication specified in the configuration is invalid. No such provider was found registered under system.web/membership/providers.

Я после этой MSDN link не увенчались успехом. Может ли кто-нибудь сказать мне, где я ошибаюсь?

Вот мой web.config:

<?xml version="1.0"?> 
<configuration> 
    <connectionStrings> 
<add name="MyCS" connectionString="Data Source=my server;Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <system.web> 
<compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpBinding"> 
     <security> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 
<services> 
    <service name="MidlandsCoop.MembersWcfService.MembersService" behaviorConfiguration="Service_Behaviour"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" 
     name="basicHttpBinding" contract="MidlandsCoop.MembersWcfService.IMembersService" /> 
    <endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" 
     name="wsHttpBinding" contract="MidlandsCoop.MembersWcfService.IMembersService" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="Service_Behaviour"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     <serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="Custom" 
      membershipProviderName="MidlandsCoop.MembersWcfService.Business.UserAuthentication" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"  aspNetCompatibilityEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer> 
</configuration> 

Мой класс аутентификации пользователя выглядит следующим образом:

public class UserAuthentication : UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
     if (null == userName || null == password) 
     { 
      throw new ArgumentNullException(); 
     } 

     var db = new PetaPoco.Database("MyDB"); 

     db.Fetch<dynamic>("SELECT Username, Password FROM MyTable WHERE [email protected] AND Password [email protected]", 
          userName, password); 
    } 
} 

Любые предложения будут с благодарностью.

ответ

2

ссылка, которую вы указали, указывает customUserNamePasswordValidatorType, чтобы указать собственный тип аутентификации, UserAuthentication в вашем случае. Я думаю, что MembershipProviderName должен быть классом, производным от класса MembershipProvider.

+0

попытаться изменить membershipProviderName = "MidlandsCoop.MembersWcfService.Business.UserAuthentication" в customUserNamePasswordValidatorType = "MidlandsCoop.MembersWcfService.Business.UserAuthentication" – vibhu

+0

ссылку http://msdn.microsoft.com/en-us/library/ms731315. aspx упоминает атрибуты элемента . Смотрите, если вы еще этого не сделали. – vibhu

+0

Спасибо за ответ. Теперь я получаю эту ошибку: не удалось загрузить тип «MidlandsCoop.MembersWcfService.Business.UserAuthentication» из сборки «System.ServiceModel, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089». – Brett