Creazione di un Membership Provider personalizzato

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>

In questo esempio sono stati inclusi solo i due metodi ValidateUser e CreateUser. Come si può notare, il secondo metodo presenta qualcosa di "strano": dopo la creazione dell'utente la funzione dovrebbe tornare un'istanza della classe MembershipUser. Se avessimo provato a passare come valore di ritorno una istanza di questa classe avremmo ottenuto l'errore seguente:

Figura 3

Con un reflector andiamo a leggere il codice di questa classe all'interno del Framework. Il mistero viene subito svelato...

[Serializable, AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public class MembershipUser
{
...
}

I programmatori Microsoft hanno protetto la serializzazione di questa classe impostando al minimo i livelli dei permessi. Per ovviare al problema possiamo creare una classe serializzabile simile a MembershipUser oppure, come nel caso di questo esempio, possiamo semplicemente ricreare la classe all'interno del provider che richiama il web service.

Ora dobbiamo configurare l'applicazione sul secondo server. Tutto rimane uguale, tranne il provider per la gestione della Membership. In entrambe le web application abbiamo lo stesso web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

  <connectionStrings>
    <remove name="LocalSqlServer"/>
    <add name="LocalSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|aspnetdb.mdf" />
  </connectionStrings>

  <system.web>
    <authentication mode="Forms" />
    <membership defaultProvider="SqlProvider">
      <providers>
        <add name="SqlProvider"
          type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
          connectionStringName="LocalSqlServer"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="false"
          applicationName="/"
          requiresUniqueEmail="false"
          passwordFormat="Hashed"
          minRequiredPasswordLength="1"
          minRequiredNonalphanumericCharacters="0"
          />
        <add name="AzMembership"
          url="http://localhost/mem1/validateuser.asmx"
          type="System.Web.Security.AzMembershipProvider"/>
      </providers>
    </membership>
  </system.web>

  <appSettings>
    <add key="localhost.validateuser" value="http://localhost/mem1/validateuser.asmx"/>
  </appSettings>

</configuration>

Nella sezione providers sono definiti due provider: SqlProvider e AzMembership. Il primo provider come fonte dei dati utilizza SQL Server Express Edition e viene impiegato nell'applicazione sul primo server. Il provider AzMembership accede ai dati dell'utenza grazie al web service visto in precedenza e viene impiegato nell'applicazione sul secondo server.

Nel nostro caso, per dichiarare quale di questi provider viene utilizzato, è sufficiente specificarne il nome nell'attributo defaultProvider nella sezione membership. Sul primo server specifichiamo "SqlProvider", sul secondo "AzMembership".

Per inserire nella lista altri provider personalizzati è necessario utilizzare il nodo <add /> all'interno della sezione providers nel modo seguente:

<add name="nome_provider" type="nome_classe[, nome_dll]" />

In aggiunta possiamo inserire tutti i parametri di nostra scelta per una configurazione adatta allo scopo. Nel nostro caso specifichiamo il parametro url per indicare il percorso del web service da richiamare (una necessità più didattica che di reale necessità, visto che il percorso del web service è inserito anche all'interno della sezione appSettings).

3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC