2010-12-01 3 views
1

사용자 지정 멤버 자격 사용자 개체를 만들 때 오류가 발생합니다. 세부 오류 메시지는 다음과 같습니다.ASP.NET 사용자 지정 멤버십 사용자에게 사용자 지정 멤버 자격 문제가 있습니다.이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니다.

오류 :

System.Configuration.ConfigurationErrorsException was caught 
    Message=No parameterless constructor defined for this object. (D:\Projects\Sample\SampleMembership\web.config line 23) 
    Source=System.Web 
    BareMessage=No parameterless constructor defined for this object. 
    Filename=D:\Projects\Sample\SampleMembership\web.config 
    Line=23 
    StackTrace: 
     at System.Web.Configuration.ProvidersHelper.InstantiateProvider(ProviderSettings providerSettings, Type providerType) 
     at System.Web.Configuration.ProvidersHelper.InstantiateProviders(ProviderSettingsCollection configProviders, ProviderCollection providers, Type providerType) 
     at System.Web.Security.Membership.InitializeSettings(Boolean initializeGeneralSettings, RuntimeConfig appConfig, MembershipSection settings) 
     at System.Web.Security.Membership.Initialize() 
     at System.Web.Security.MembershipAdapter.get_Providers() 
     at System.Web.Security.MembershipUser..ctor(String providerName, String name, Object providerUserKey, String email, String passwordQuestion, String comment, Boolean isApproved, Boolean isLockedOut, DateTime creationDate, DateTime lastLoginDate, DateTime lastActivityDate, DateTime lastPasswordChangedDate, DateTime lastLockoutDate) 
     at Asys.CatalogueViewer.Membership.CustomMembershipUser..ctor(String providername, String username, Object providerUserKey, String email, String passwordQuestion, String comment, Boolean isApproved, Boolean 

내 사용자 정의 membershipUser 클래스 코드는 다음과 같습니다. 나는이 다음과 같습니다에 대한 (다음과 같습니다 객체 생성 코드) 사용자 정의 사용자 클래스 이상 사용

CustomMembershipUser membershipUser = new CustomMembershipUser(this.Name, 
       username, 
      Guid.Parse(userID.ToString()), 
       email, 
       passwordQuestion, 
       comment, 
       isApproved, 
       isLockedOut, 
       creationDate, 
       lastLoginDate, 
       lastActivityDate, 
       lastPasswordChangedDate, 
       lastLockedOutDate, "ss"); 

웹 설정 구성을 개체를 만들려고 할 때

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web.Security; 
public class CustomMembershipUser : MembershipUser 
{  
    private string _webSite; 
    public string WebSite 
    { 
     get { return _webSite; } 
     set { _webSite = value; } 
    } 
     public CustomMembershipUser() 
      { 
      } 
    public CustomMembershipUser(string providername, 
           string username, 
           object providerUserKey, 
           string email, 
           string passwordQuestion, 
           string comment, 
           bool isApproved, 
           bool isLockedOut, 
           DateTime creationDate, 
           DateTime lastLoginDate, 
           DateTime lastActivityDate, 
           DateTime lastPasswordChangedDate, 
           DateTime lastLockedOutDate, 
           string webSite) : 
     base(providername, 
            username, 
            providerUserKey, 
            email, 
            passwordQuestion, 
            comment, 
            isApproved, 
            isLockedOut, 
            creationDate, 
            lastLoginDate, 
            lastActivityDate, 
            lastPasswordChangedDate, 
            lastLockedOutDate) 
    { 
     this.WebSite =webSite; 
    } 
} 

오류가 발생합니다.

<configuration> 
    <connectionStrings> 
    <add name="ModelContainer" connectionString="metadata=res://*/Data.Model.csdl|res://*/Data.Model.ssdl|res://*/Data.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=GET2CODE\GET2CODE;Initial Catalog=CatalogueViewer;User Id=sa;Password=hammer;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <system.web> 
     <machineKey validationKey= "23729FFE7E16B1DD03D3BC8B45280254DA09CE2ABF5C1AC2FFD5DA04AB2521DBD7E6A8EFBE49C63DA2DA55708545A4562C75E8495415CB7B0456720652A9F160" 
decryptionKey= "D643C94989E6D3A76E265AA4A565108FA727DBC7AB87EDE85F578DC78A8E407C" validation="SHA1" decryption="AES"/> 

     <compilation debug="true" targetFramework="4.0"> 
      <assemblies> 
       <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation> 
     <authentication mode="Forms" > 
      <forms loginUrl="~/Account/Login.aspx" timeout="2880"/> 
     </authentication> 
     <membership defaultProvider="CustomMembershipProvider" userIsOnlineTimeWindow="15"> 
      <providers > 
       <clear/>     
       <add name="CustomMembershipProvider" type="ASys.Membership.CustomMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" passwordFormat="Encrypted" connectionStringName="ModelContainer" />    
      </providers>    
     </membership> 

     <profile> 
      <providers> 
       <clear/> 
       <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/> 
      </providers> 
     </profile> 
     <roleManager enabled="false"> 
      <providers> 
       <clear/> 
       <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/> 
       <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/> 
      </providers> 
     </roleManager> 
    </system.web> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

것은 나에게이 문제를 당신은 그것이의 Web.config의 회원 섹션에 선언 된대로 CustomMembersipUser의 인스턴스를 만들 때 공급자의 이름을 전달해야

+0

web.config의 설정이 표시되지 않습니다.이 설정을 보려면 매우 유용합니다. CustomMembershipUser 외에도 맞춤 멤버십 공급자를 사용하고 있습니까? CustomMembershipUser 생성자를 호출 할 때 "this.Name"값이 무엇인지 말할 수 있습니까? –

+0

ASys.Membership.CustomMembershipProvider 유형이 공용 및 매개 변수없는 생성자를 갖고 있으며 CustomMembershipUser의 생성자를 호출 할 때 this.Name이 "CustomMembershipProvider"와 같은지 확인할 수 있습니까? –

+0

답장을 보내 주셔서 감사합니다. CustomMembershipProvider에는 매개 변수없는 생성자가 없습니다. 이 값은 값입니다. 빈 web.config 파일의 빈 문자열에 대한 업데이트입니다. – Ajith

답변

2

를 해결하는 데 도움이 바랍니다. CustomMembershipProvider의 값을 하드 코딩하는 대신에 CustomMembershipProvider.Initialize 메서드가 호출 될 때이 값을받는 private 필드를 사용할 수 있습니다. 예를

를 들어

public class CustomMembershipProvider: MembershipProvider 
{ 
    private providerName = null; 
    ... 

    public override void Initialize(string name, NameValueCollection config) 
    { 
     providerName = name; // The friendly name of the provider 
     ... 
    } 

    public override MembershipUser TestCreateUser(string username, bool userIsOnline) 
    { 
     CustomMembershipUser membershipUser = new CustomMembershipUser(providerName, 
       username, 
       Guid.Parse(userID.ToString()), 
       email, 
       passwordQuestion, 
       comment, 
       isApproved, 
       isLockedOut, 
       creationDate, 
       lastLoginDate, 
       lastActivityDate, 
       lastPasswordChangedDate, 
       lastLockedOutDate, "ss"); 
     ... 
    } 
} 

당신은 MSDN에 유사하지만 더 자세한 예를 볼 수 있습니다.

관련 문제