.NET Framework 4 - ASP.NET Implementing a Profile Provider The ASP.NET profile feature enables you to easily use different providers. You can use the SqlProfileProvider class that is included with the .NET Framework or you can implement your own provider. You create a custom profile provider when: You need to store profile information in a data source, such as in a FoxPro database or in an Oracle database, that is not supported by the profile providers included with the .NET Framework. You need to manage profile information using a database schema that is different from the database schema used by the providers included with the .NET Framework. A common example is that you want to integrate profile information with user data in an existing SQL Server database.

Required Classes
To implement a profile provider, you create a class that inherits the System.Web.Profile..::.ProfileProvider abstract class. The ProfileProvider abstract class in turn inherits the System.Configuration..::.SettingsProvider abstract class, which inherits the System.Configuration.Provider..::.ProviderBase abstract class. Because of this inheritance chain, in addition to the required members of the ProfileProvider class, you must implement the required members of the SettingsProvider and ProviderBase classes. The following tables describe the properties and methods that you must implement from the ProviderBase, SettingsProvider, and ProfileProvider abstract classes. To review an implementation of each member, see the How to: Build and Run the Profile Provider Example. ProviderBase MembersMember | Description |
|---|
Initialize method | Takes as input the name of the provider instance and a NameValueCollection of configuration settings. Used to set options and property values for the provider instance, including implementation-specific values and options specified in the machine configuration or Web.config file. |
SettingsProvider MembersProfileProvider MembersMember | Description |
|---|
DeleteProfiles method | Takes as input a string array of user names and deletes from the data source all profile information and property values for the specified names where the application name matches the ApplicationName property value. If your data source supports transactions, it is recommended that you include all delete operations in a transaction and that you roll back the transaction and throw an exception if any delete operation fails. | DeleteProfiles method | Takes as input a collection of ProfileInfo objects and deletes from the data source all profile information and property values for each profile where the application name matches the ApplicationName property value. If your data source supports transactions, it is recommended that you include all delete operations in a transaction and roll back the transaction and throw an exception if any delete operation fails. | DeleteInactiveProfiles method | Takes as input a ProfileAuthenticationOption value and a DateTime object and deletes from the data source all profile information and property values where the last activity date is less than or equal to the specified date and time and where the application name matches the ApplicationName property value. The ProfileAuthenticationOption parameter specifies whether only anonymous profiles, only authenticated profiles, or all profiles are to be deleted. If your data source supports transactions, it is recommended that you include all delete operations in a transaction and roll back the transaction and throw an exception if any delete operation fails. | GetAllProfiles method | Takes as input a ProfileAuthenticationOption value, an integer that specifies the page index, an integer that specifies the page size, and a reference to an integer that will be set to the total count of profiles. Returns a ProfileInfoCollection that contains ProfileInfo objects for all profiles in the data source where the application name matches the ApplicationName property value. The ProfileAuthenticationOption parameter specifies whether only anonymous profiles, only authenticated profiles, or all profiles are to be returned. The results returned by the GetAllProfiles method are constrained by the page index and page size values. The page size value specifies the maximum number of ProfileInfo objects to return in the ProfileInfoCollection. The page index value specifies which page of results to return, where 1 identifies the first page. The parameter for total records is an out parameter (you can use ByRef in Visual Basic) that is set to the total number of profiles. For example, if the data store contains 13 profiles for the application and the page index value is 6 with a page size of 5, the ProfileInfoCollection returned contains the sixth through the tenth profiles. The total records value is set to 13 when the method returns. | GetAllInactiveProfiles method | Takes as input a ProfileAuthenticationOption value, a DateTime object, an integer that specifies the page index, an integer that specifies the page size, and a reference to an integer that will be set to the total count of profiles. Returns a ProfileInfoCollection that contains ProfileInfo objects for all profiles in the data source where the last activity date is less than or equal to the specified DateTime and where the application name matches the ApplicationName property value. The ProfileAuthenticationOption parameter specifies whether only anonymous profiles, only authenticated profiles, or all profiles are to be returned. The results returned by the GetAllInactiveProfiles method are constrained by the page index and page size values. The page size value specifies the maximum number of ProfileInfo objects to return in the ProfileInfoCollection. The page index value specifies which page of results to return, where 1 identifies the first page. The parameter for total records is an out parameter (you can use ByRef in Visual Basic) that is set to the total number of profiles. For example, if the data store contains 13 profiles for the application and the page index value is 2 with a page size of 5, the ProfileInfoCollection returned contains the sixth through the tenth profiles. The total records value is set to 13 when the method returns. | FindProfilesByUserName method | Takes as input a ProfileAuthenticationOption value, a string containing a user name, an integer that specifies the page index, an integer that specifies the page size, and a reference to an integer that will be set to the total count of profiles. Returns a ProfileInfoCollection that contains ProfileInfo objects for all profiles in the data source where the user name matches the specified user name and where the application name matches the ApplicationName property value. The ProfileAuthenticationOption parameter specifies whether only anonymous profiles, only authenticated profiles, or all profiles are to be returned. If your data source supports additional search capabilities, such as wildcard characters, you can provide more extensive search capabilities for user names. The results returned by the FindProfilesByUserName method are constrained by the page index and page size values. The page size value specifies the maximum number of ProfileInfo objects to return in the ProfileInfoCollection. The page index value specifies which page of results to return, where 1 identifies the first page. The parameter for total records is an out parameter (you can use ByRef in Visual Basic) that is set to the total number of profiles. For example, if the data store contains 13 profiles for the application and the page index value is 2 with a page size of 5, the ProfileInfoCollection returned contains the sixth through the tenth profiles. The total records value is set to 13 when the method returns. | FindInactiveProfilesByUserName method | Takes as input a ProfileAuthenticationOption value, a string containing a user name, a DateTime object, an integer that specifies the page index, an integer that specifies the page size, and a reference to an integer that will be set to the total count of profiles. Returns a ProfileInfoCollection that contains ProfileInfo objects for all profiles in the data source where the user name matches the specified user name, where the last activity date is less than or equal to the specified DateTime, and where the application name matches the ApplicationName property value. The ProfileAuthenticationOption parameter specifies whether only anonymous profiles, only authenticated profiles, or all profiles are to be returned. If your data source supports additional search capabilities, such as wildcard characters, you can provide more extensive search capabilities for user names. The results returned by the FindInactiveProfilesByUserName method are constrained by the page index and page size values. The page size value specifies the maximum number of ProfileInfo objects to return in the ProfileInfoCollection. The page index value specifies which page of results to return, where 1 identifies the first page. The parameter for total records is an out parameter (you can use ByRef in Visual Basic) that is set to the total number of profiles. For example, if the data store contains 13 profiles for the application and the page index value is 2 with a page size of 5, the ProfileInfoCollection returned contains the sixth through the tenth profiles. The total records value is set to 13 when the method returns. | GetNumberOfInactiveProfiles method | Takes as input a ProfileAuthenticationOption value and a DateTime object and returns a count of all profiles in the data source where the last activity date is less than or equal to the specified DateTime and where the application name matches the ApplicationName property value. The ProfileAuthenticationOption parameter specifies whether only anonymous profiles, only authenticated profiles, or all profiles are to be counted. |

ApplicationName
Because profile providers store profile information separately for each application, you must ensure that your data schema includes the application name and that queries and updates also include the application name. For example, the following command is used to retrieve a property value from a database based on the user name and whether the profile is anonymous, and ensures that the ApplicationName value is included in the query.
SELECT Property FROM PropertyTable
WHERE Username = 'user1' AND IsAnonymous = False
AND ApplicationName = 'MyApplication'

See Also
|
.NET Framework 4 - ASP.NET Implementar un proveedor de perfiles La característica de perfiles de ASP.NET permite utilizar fácilmente distintos proveedores. Puede utilizar la clase SqlProfileProvider incluida con .NET Framework o puede implementar su propio proveedor. Cree un proveedor de perfiles personalizado cuando: Necesite almacenar información de perfil en un origen de datos, como una base de datos de FoxPro o de Oracle, que no sea compatible con los proveedores de perfiles incluidos en .NET Framework. Necesite administrar la información de perfil mediante un esquema de base de datos distinto del que utilizan los proveedores que se distribuyen con .NET Framework. Un ejemplo común es la integración de la información de perfil con los datos de usuario en una base de datos de SQL Server existente.

Clases requeridas
Para implementar un proveedor de perfiles, es necesario crear una clase que herede la clase abstracta System.Web.Profile..::.ProfileProvider. A su vez, la clase abstracta ProfileProvider hereda la clase abstracta System.Configuration..::.SettingsProvider, que, a su vez, hereda la clase abstracta System.Configuration.Provider..::.ProviderBase. Debido a esta cadena de herencia, además de los miembros requeridos de la clase ProfileProvider, es necesario implementar también los miembros requeridos de las clases SettingsProvider y ProviderBase. En las tablas siguientes se describen las propiedades y los métodos que se deben implementar de las clases abstractas ProviderBase, SettingsProvider y ProfileProvider. Para revisar la implementación de cada uno de los miembros, vea Cómo: Generar y ejecutar el ejemplo de proveedor de perfiles. Miembros de ProviderBaseMiembro | Descripción |
|---|
Método Initialize | Toma como entrada el nombre de la instancia del proveedor y un objeto NameValueCollection de parámetros de configuración. Se utiliza para establecer las opciones y los valores de las propiedades en la instancia del proveedor, entre los que se incluyen los valores específicos de la implementación y las opciones especificadas en la configuración del equipo o en el archivo Web.config. |
Miembros de SettingsProviderMiembro | Descripción |
|---|
Propiedad ApplicationName | El nombre de aplicación que se almacena con cada perfil. El proveedor de perfiles utiliza el nombre de aplicación para almacenar independientemente la información del perfil de cada aplicación. Esto permite a varias aplicaciones ASP.NET utilizar el mismo origen de datos sin que se produzca un conflicto si se crea el mismo nombre de usuario en aplicaciones diferentes. Opcionalmente, varias aplicaciones ASP.NET pueden compartir un origen de datos de perfil si se especifica el mismo nombre de aplicación. | Método GetPropertyValues | Toma como entrada los objetos SettingsContext y SettingsPropertyCollection. El objeto SettingsContext proporciona información sobre el usuario. Puede utilizar dicha información como clave principal para recuperar información sobre las propiedades de perfil correspondientes al usuario. Utilice el objeto SettingsContext para obtener el nombre de usuario y comprobar si éste se ha autenticado o es anónimo. El objeto SettingsPropertyCollection contiene una colección de objetos SettingsProperty. Cada objeto SettingsProperty proporciona el nombre y tipo de la propiedad, junto con información adicional, como el valor predeterminado de la propiedad y si ésta es de sólo lectura. El método GetPropertyValues rellena un objeto SettingsPropertyValueCollection con objetos SettingsPropertyValue basados en los objetos SettingsProperty proporcionados como entrada. Los valores del origen de datos para el usuario especificado se asignan a las propiedades PropertyValue de cada objeto SettingsPropertyValue y se devuelve la colección completa. La llamada al método también actualiza a la fecha y hora actuales el valor de LastActivityDate correspondiente al perfil de usuario especificado. | Método SetPropertyValues | Toma como entrada los objetos SettingsContext y SettingsPropertyValueCollection. El objeto SettingsContext proporciona información sobre el usuario. Puede utilizar dicha información como clave principal para recuperar información sobre las propiedades de perfil correspondientes al usuario. Utilice el objeto SettingsContext para obtener el nombre de usuario y comprobar si éste se ha autenticado o es anónimo. El objeto SettingsPropertyValueCollection contiene una colección de objetos SettingsPropertyValue. Cada objeto SettingsPropertyValue proporciona el nombre, tipo y valor de la propiedad, junto con información adicional, como el valor predeterminado de la propiedad y si ésta es de sólo lectura. El método SetPropertyValues actualiza los valores de la propiedad de perfil en el origen de datos para el usuario especificado. La llamada al método también actualiza a la fecha y hora actuales los valores de LastActivityDate y LastUpdatedDate correspondientes al perfil de usuario especificado. |
Miembros de ProfileProviderMiembro | Descripción |
|---|
Método DeleteProfiles | Toma como entrada una matriz de cadenas de nombres de usuario y elimina del origen de datos toda la información del perfil y los valores de las propiedades correspondientes a los nombres especificados cuyo nombre de aplicación coincida con el valor de la propiedad ApplicationName. Si su origen de datos admite transacciones, se recomienda que incluya todas las operaciones de eliminación en una transacción y que revierta ésta y produzca una excepción cuando se produzca un error en una de esas operaciones. | Método DeleteProfiles | Toma como entrada una colección de objetos ProfileInfo y elimina del origen de datos toda la información del perfil y los valores de las propiedades correspondientes a los perfiles cuyo nombre de aplicación coincida con el valor de la propiedad ApplicationName. Si su origen de datos admite transacciones, se recomienda que incluya todas las operaciones de eliminación en una transacción y que revierta ésta y produzca una excepción cuando se produzca un error en una de esas operaciones. | Método DeleteInactiveProfiles | Toma como entrada un valor ProfileAuthenticationOption y un objeto DateTime, y elimina del origen de datos toda la información del perfil y los valores de las propiedades cuya fecha de última actividad es anterior o igual a la fecha y hora especificadas, y cuyo nombre de aplicación coincide con el valor de la propiedad ApplicationName. El parámetro ProfileAuthenticationOption especifica si se eliminarán sólo perfiles anónimos, sólo perfiles autenticados o todos los perfiles. Si su origen de datos admite transacciones, se recomienda que incluya todas las operaciones de eliminación en una transacción y que revierta ésta y produzca una excepción cuando se produzca un error en una de esas operaciones. | Método GetAllProfiles | Toma como entrada un valor ProfileAuthenticationOption, un entero que especifica el índice de página, un entero que especifica el tamaño de página y una referencia a un entero que se establecerá en el número total de perfiles. Devuelve una colección ProfileInfoCollection que contiene objetos ProfileInfo para todos los perfiles del origen de datos cuyo nombre de aplicación coincida con el valor de la propiedad ApplicationName. El parámetro ProfileAuthenticationOption especifica si se devolverán sólo perfiles anónimos, sólo perfiles autenticados o todos los perfiles. Los resultados devueltos por el método GetAllProfiles están restringidos por los valores de índice de página y de tamaño de página. El valor de tamaño de página especifica el número máximo de objetos ProfileInfo que se van a devolver en ProfileInfoCollection. El valor de índice de página especifica la página de resultados que se va a devolver, teniendo en cuenta que 1 identifica la primera página. El parámetro correspondiente al número total de registros es un parámetro out (se puede utilizar ByRef en Visual Basic) que se establece en el número total de perfiles. Por ejemplo, si el almacén de datos contiene 13 perfiles de la aplicación y el valor de índice de página es 6 con un tamaño de página de 5, el resultado devuelto por ProfileInfoCollection contendrá del sexto al décimo perfil. Cuando el método devuelve el resultado, el valor del número total de registros se establece en 13. | Método GetAllInactiveProfiles | Toma como entrada un valor ProfileAuthenticationOption, un objeto DateTime, un entero que especifica el índice de página, un entero que especifica el tamaño de página y una referencia a un entero que se establecerá en el número total de perfiles. Devuelve una colección ProfileInfoCollection que contiene objetos ProfileInfo para todos los perfiles del origen de datos cuya última fecha de actividad es anterior o igual al valor de DateTime especificado y cuyo nombre de aplicación coincide con el valor de la propiedad ApplicationName. El parámetro ProfileAuthenticationOption especifica si se devolverán sólo perfiles anónimos, sólo perfiles autenticados o todos los perfiles. Los resultados devueltos por el método GetAllInactiveProfiles están restringidos por los valores de índice de página y de tamaño de página. El valor de tamaño de página especifica el número máximo de objetos ProfileInfo que se van a devolver en ProfileInfoCollection. El valor de índice de página especifica la página de resultados que se va a devolver, teniendo en cuenta que 1 identifica la primera página. El parámetro correspondiente al número total de registros es un parámetro out (se puede utilizar ByRef en Visual Basic) que se establece en el número total de perfiles. Por ejemplo, si el almacén de datos contiene 13 perfiles de la aplicación y el valor de índice de página es 2 con un tamaño de página de 5, el resultado devuelto por ProfileInfoCollection contendrá del sexto al décimo perfil. Cuando el método devuelve el resultado, el valor del número total de registros se establece en 13. | Método FindProfilesByUserName | Toma como entrada un valor ProfileAuthenticationOption, una cadena que contiene un nombre de usuario, un entero que especifica el índice de página, un entero que especifica el tamaño de página y una referencia a un entero que se establecerá en el número total de perfiles. Devuelve una colección ProfileInfoCollection que contiene objetos ProfileInfo para todos los perfiles del origen de datos cuyo nombre de usuario coincide con el nombre de usuario especificado y cuyo nombre de la aplicación coincide con el valor de la propiedad ApplicationName. El parámetro ProfileAuthenticationOption especifica si se devolverán sólo perfiles anónimos, sólo perfiles autenticados o todos los perfiles. Si el origen de datos admite funciones de búsqueda adicionales, como caracteres comodín, puede incluir funciones de búsqueda más avanzadas para los nombres de usuario. Los resultados devueltos por el método FindProfilesByUserName están restringidos por los valores de índice de página y de tamaño de página. El valor de tamaño de página especifica el número máximo de objetos ProfileInfo que se van a devolver en ProfileInfoCollection. El valor de índice de página especifica la página de resultados que se va a devolver, teniendo en cuenta que 1 identifica la primera página. El parámetro correspondiente al número total de registros es un parámetro out (se puede utilizar ByRef en Visual Basic) que se establece en el número total de perfiles. Por ejemplo, si el almacén de datos contiene 13 perfiles de la aplicación y el valor de índice de página es 2 con un tamaño de página de 5, el resultado devuelto por ProfileInfoCollection contendrá del sexto al décimo perfil. Cuando el método devuelve el resultado, el valor del número total de registros se establece en 13. | Método FindInactiveProfilesByUserName | Toma como entrada un valor ProfileAuthenticationOption, una cadena que contiene un nombre de usuario, un objeto DateTime, un entero que especifica el índice de página, un entero que especifica el tamaño de página y una referencia a un entero que se establecerá en el número total de perfiles. Devuelve una colección ProfileInfoCollection que contiene objetos ProfileInfo para todos los perfiles del origen de datos cuyo nombre de usuario coincide con el nombre de usuario especificado, cuya última fecha de actividad es anterior o igual al valor de DateTime especificado y cuyo nombre de aplicación coincide con el valor de la propiedad ApplicationName. El parámetro ProfileAuthenticationOption especifica si se devolverán sólo perfiles anónimos, sólo perfiles autenticados o todos los perfiles. Si el origen de datos admite funciones de búsqueda adicionales, como caracteres comodín, puede incluir funciones de búsqueda más avanzadas para los nombres de usuario. Los resultados devueltos por el método FindInactiveProfilesByUserName están restringidos por los valores de índice de página y de tamaño de página. El valor de tamaño de página especifica el número máximo de objetos ProfileInfo que se van a devolver en ProfileInfoCollection. El valor de índice de página especifica la página de resultados que se va a devolver, teniendo en cuenta que 1 identifica la primera página. El parámetro correspondiente al número total de registros es un parámetro out (se puede utilizar ByRef en Visual Basic) que se establece en el número total de perfiles. Por ejemplo, si el almacén de datos contiene 13 perfiles de la aplicación y el valor de índice de página es 2 con un tamaño de página de 5, el resultado devuelto por ProfileInfoCollection contendrá del sexto al décimo perfil. Cuando el método devuelve el resultado, el valor del número total de registros se establece en 13. | Método GetNumberOfInactiveProfiles | Toma como entrada un valor ProfileAuthenticationOption y un objeto DateTime, y devuelve el número total de perfiles del origen de datos cuya última fecha de actividad es anterior o igual al igual al valor de DateTime especificado y cuyo nombre de aplicación coincide con el valor de la propiedad ApplicationName. El parámetro ProfileAuthenticationOption especifica si se deben contar sólo los perfiles anónimos, sólo los perfiles autenticados o todos los perfiles. |

ApplicationName
Dado que los proveedores de perfiles almacenan independientemente la información de perfil de cada aplicación, deberá comprobar que el esquema de datos incluye el nombre de la aplicación y que éste también se incluye en las consultas y las actualizaciones. Por ejemplo, el comando siguiente se utiliza para recuperar un valor de propiedad de una base de datos a partir del nombre de usuario y de la condición de anónimo del perfil, y garantiza que el valor ApplicationName esté incluido en la consulta.
SELECT Property FROM PropertyTable
WHERE Username = 'user1' AND IsAnonymous = False
AND ApplicationName = 'MyApplication'

Vea también
|