9

Creé un proveedor de membresía personalizado y recibo el siguiente error al intentar crear un nuevo "MembershipUser".No se puede crear MembershipUser para MembershipProvider personalizado

No se pudo cargar el tipo 'MyTestApp.Membership.TestMembershipProvider' del ensamblado 'System.Web, versión = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

Ejecuto esto desde un proyecto de prueba de unidad, por lo que no estoy seguro de si eso está causando el problema, pero si incluí System.Web, System.Web.ApplicationServices y una referencia a MyApp.Membership y MyApp.DataModels (objetos de entidad).

El error ocurre dentro de mi función "GetUser" que está debajo, mi configuración también está debajo.

public override MembershipUser GetUser(object providerUserKey, bool userIsOnline) 
{ 
    try 
    { 
     AccountEntities db = new AccountEntities(); 

     if ((providerUserKey is Guid) == false) 
     { 
      return null; 
     } 

     User user = (from u in db.Users 
        where u.UserId == (Guid)providerUserKey 
        && u.Application.LoweredApplicationName == this.ApplicationName.ToLower() 
        select u).FirstOrDefault(); 

     if (user != null) 
     { // ERROR: Starts here, user object is correct, data is all there. 
      return new MembershipUser(this.ProviderName, user.UserName, (object)user.UserId, user.Email, user.PasswordQuestion, user.Comment, user.IsApproved, user.IsLockedOut, user.CreateDate, user.LastLoginDate, user.LastActivityDate, user.LastPasswordChangedDate, user.LastLockoutDate); 
     } 
     else 
      return null; 
    } 
    catch (Exception ex) 
    { 
     this.WriteToEventLog(ex, "Unable to get user from object '{" + ((Guid)providerUserKey).ToString() + "}'.", "Get User"); 
     return null; 
    } 
} 
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
    <add name="AccountEntities" connectionString="metadata=res://*/Account.AccountDataModel.csdl|res://*/Account.AccountDataModel.ssdl|res://*/Account.AccountDataModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=&quotEDITED&quot;;Initial Catalog=CustomAuthentication;Persist Security Info=True;User ID=EDITED;Password=EDITED;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <system.web> 
    <membership defaultProvider="TestMembershipProvider" userIsOnlineTimeWindow="15"> 
     <providers> 
     <clear/> 
     <add name="TestMembershipProvider" type="MyTestApp.Membership.TestMembershipProvider" 
       applicationName="/" 
       description="Membership Test" 
       enablePasswordReset="true" 
       enablePasswordRetrieval="true" 
       maxInvalidPasswordAttempts="3" 
       minRequiredNonAlphanumericCharacters="8" 
       minRequiredPasswordLength="8" 
       passwordAttemptWindow="30" 
       requiresQuestionAndAnswer="true" 
       requiresUniqueEmail="true" /> 
     </providers> 
    </membership> 
    </system.web> 
</configuration> 

Respuesta

21

me he dado cuenta de que me perdí la parte de abajo en la configuración

type="MyTestApp.Membership.TestMembershipProvider, MyTestApp.Membership" 

Obras ahora!

+4

Upvote from the future. ¡Me acabas de ahorrar aproximadamente 4 horas de vueltas locas sobre por qué mi ensamblado de seguridad funcionó bien para un proyecto MVC pero no para un proyecto de Windows Forms! – Tommy

+2

Esto me ayudó a resolver un problema después de 10 minutos de investigación. Hubiera sido mucho peor si no fuera por esto, así que, ¡gracias! – jason

Cuestiones relacionadas