1

私はこれに数日間苦労してきました-カスタムメンバーシッププロバイダーを使用するようにこのWCFサービスを正しく構成できません。テスト クライアントを起動すると、次のエラーが表示されます。

構成で指定されたユーザー名/パスワード メンバーシップ プロバイダー MidlandsCoop.MembersWcfService.Business.UserAuthentication が無効です。system.web/membership/providers に登録されているプロバイダーは見つかりませんでした。

私はこのMSDNリンクをたどっていますが、役に立ちませんでした。誰が私が間違っているのか教えてもらえますか?

これが私の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 Username=@0 AND Password =@1",
                             userName, password);
    }
}

どんな提案でも大歓迎です。

4

1 に答える 1

2

あなたが提供したリンクは、 customUserNamePasswordValidatorType に言及して、カスタム認証タイプ、あなたの場合は UserAuthentication を指定します。MembershipProviderName は MembershipProvider クラスから派生したクラスであるべきだと思います。

于 2013-07-29T15:04:46.877 に答える