Share via


Ejemplo de implementación del proveedor de suscripciones

Actualización: noviembre 2007

Describe los proveedores de suscripciones de ejemplo y su esquema de origen de datos compatible.

Los temas siguientes incluyen un ejemplo del código de una implementación del proveedor de suscripciones. El proveedor de ejemplo utiliza el proveedor de datos de .NET Framework para ODBC para establecer conexión con un origen de datos de ODBC. En este ejemplo se utiliza una base de datos de Microsoft Access como origen de datos.

En este tema se describen los detalles de la implementación del proveedor de suscripciones de ejemplo. Asimismo, se describe la generación del ejemplo y la configuración de una aplicación ASP.NET para que utilice este proveedor.

Nota:

Puesto que los orígenes de datos contienen diferentes sintaxis SQL, algunos comandos funcionarán con un origen de datos, pero no con otro. Por consiguiente, debe crear un proveedor de suscripciones específico para su origen de datos aun cuando esté utilizando el proveedor de datos de .NET Framework para ODBC o el proveedor de datos de .NET Framework para OLEDB para obtener acceso a su origen de datos, por ejemplo, SybaseMembershipProvider, OracleMembershipProvider, etc.

Se incluyen dos versiones del proveedor de ejemplo: una en Visual Basic y otra en C#. Para obtener un código de ejemplo, vea Cómo: Ejemplo de implementación del proveedor de suscripciones.

Esquema de la base de datos

Para crear la tabla de Microsoft Access que utiliza el proveedor de ejemplo, ejecute la consulta de definición de datos siguiente en una base de datos nueva o en una base de datos existente de Microsoft Access.

CREATE TABLE Users
(
  PKID Guid NOT NULL PRIMARY KEY,
  Username Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
  Email Text (128) NOT NULL,
  Comment Text (255),
  Password Text (128) NOT NULL,
  PasswordQuestion Text (255),
  PasswordAnswer Text (255),
  IsApproved YesNo, 
  LastActivityDate DateTime,
  LastLoginDate DateTime,
  LastPasswordChangedDate DateTime,
  CreationDate DateTime, 
  IsOnLine YesNo,
  IsLockedOut YesNo,
  LastLockedOutDate DateTime,
  FailedPasswordAttemptCount Integer,
  FailedPasswordAttemptWindowStart DateTime,
  FailedPasswordAnswerAttemptCount Integer,
  FailedPasswordAnswerAttemptWindowStart DateTime
)

Acceso al Registro de eventos

Si el proveedor de ejemplo encuentra una excepción mientras trabaja con el origen de datos, escribe los detalles de la excepción en el Registro de eventos de la aplicación en lugar de devolver la excepción en la aplicación ASP.NET. Esto constituye una medida de seguridad para evitar que se exponga información confidencial sobre el origen de datos en la aplicación ASP.NET.

El proveedor de ejemplo especifica un evento Source de "OdbcMembershipProvider". Antes de que la aplicación ASP.NET pueda escribir las excepciones correctamente en el Registro de eventos de la aplicación, deberá crear la clave de Registro siguiente:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcMembershipProvider

Si no desea que el proveedor de ejemplo escriba las excepciones en el Registro de eventos, puede definir en false el atributo writeExceptionsToEventLog del archivo Web.config.

Creación del proveedor de ejemplo

Para utilizar el proveedor de ejemplo, puede colocar el código fuente en el directorio App_Code de la aplicación. Tenga en cuenta que si el directorio App_Code de la aplicación ya contiene código fuente, debe agregar la versión del proveedor de ejemplo que esté escrita en el mismo lenguaje que el código existente del directorio. ASP.NET lo compilará cuando se solicite la aplicación.

También puede compilar este proveedor como biblioteca y colocarlo en el directorio Bin de la aplicación Web o asignarle un nombre seguro y colocarlo en la GAC. El comando siguiente muestra cómo se compila el proveedor de ejemplo con el compilador de la línea de comandos.

vbc /out:OdbcMembershipProvider.dll /t:library OdbcMembershipProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcMembershipProvider.dll /t:library OdbcMembershipProvider.cs /r:System.Web.dll /r:System.Configuration.dll

Uso del proveedor de ejemplo en una aplicación ASP.NET

En el ejemplo siguiente se muestra el archivo Web.config de una aplicación ASP.NET configurada para que utilice el proveedor de ejemplo. El archivo de configuración presupone la existencia de dos archivos: CreateUser.aspx y RetrievePassword.aspx. Todos los usuarios pueden tener acceso a estos dos archivos, incluso aquellos que no hayan iniciado sesión.

El ejemplo utiliza un nombre de origen de datos (DSN) de ODBC denominado "MembershipUsers" para obtener información de conexión de la base de datos de Microsoft Access. Para utilizar el proveedor de ejemplo, necesitará crear el DSN del sistema "MembershipUsers" o proporcionar una cadena de conexión ODBC válida en la base de datos.

<configuration>

  <location path="CreateUser.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="RetrievePassword.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

  <connectionStrings>
    <add name="OdbcServices" connectionString="DSN=MembershipUsers;" />
  </connectionStrings>

  <system.web>

    <authentication mode="Forms" >
      <forms loginUrl="login.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

    <authorization>
      <deny users="?" />
    </authorization>

    <machineKey
      validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
      decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
      validation="SHA1" />

    <membership defaultProvider="OdbcProvider" userIsOnlineTimeWindow="15">

      <providers>

        <add 
          name="OdbcProvider" 
          type="Samples.AspNet.Membership.OdbcMembershipProvider" 
          connectionStringName="OdbcServices"
          enablePasswordRetrieval="true"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true" 
          writeExceptionsToEventLog="true" />

      </providers>
    </membership>

  </system.web>
</configuration>

Vea también

Conceptos

Implementar un proveedor de suscripciones

Otros recursos

Administrar usuarios mediante suscripciones