Реализация поставщика профилей

Обновлен: Ноябрь 2007

Функция профиля ASP.NET позволяет без проблем использовать разных поставщиков. Можно использовать класс SqlProfileProvider, включенный в платформу .NET Framework, или можно реализовать собственных поставщиков.

Случаи, когда необходимо создать настраиваемый поставщик профилей:

  • Необходимо хранить информацию профиля в источнике данных, например, в базе данных FoxPro или Oracle, которая не поддерживается поставщиками профилей, входящими в состав платформы .NET Framework.

  • Необходимо управлять информацией профиля с помощью схемы базы данных, которая отличается от той, которую применяют поставщики, включенные в состав платформы .NET Framework. В качестве типичного примера можно привести необходимость интегрировать информацию профилей с данными пользователя в существующей базе данных SQL Server.

Необходимые классы

Для реализации поставщика профилей необходимо создать класс, наследующий от абстрактного класса System.Web.Profile.ProfileProvider. Абстрактный класс ProfileProvider, в свою очередь, наследует от абстрактного класса System.Configuration.SettingsProvider, наследующего от абстрактного класса System.Configuration.Provider.ProviderBase. В виду этой цепочки наследования в дополнение к необходимым членам класса ProfileProvider требуется реализовать необходимые члены классов SettingsProvider и ProviderBase.

В следующих таблицах описываются свойства и методы, которые необходимо реализовать из абстрактных классов ProviderBase, SettingsProvider и ProfileProvider. Сведения о реализации каждого члена см. в разделе Практическое руководство. Построение и выполнение примера поставщика профиля.

Члены ProviderBase

Член

Описание

Метод Initialize

Принимает в качестве входных данных имя экземпляра поставщика и коллекцию NameValueCollection параметров конфигурации. Используется для задания параметров и значений свойств для экземпляра поставщика, включая зависимые от реализации значения и параметры, указанные в конфигурации компьютера или в файле Web.config.

Члены SettingsProvider

Член

Описание

Свойство ApplicationName

Имя приложения, хранимое с каждым профилем. Поставщик профилей использует имя приложения для хранения информации профиля отдельно для каждого приложения. Это позволяет нескольким приложениям ASP.NET использовать один и тот же источник данных без конфликтов, если в разных приложениях используется одно и то же имя пользователя. В качестве альтернативы несколько приложений ASP.NET могут совместно использовать источник данных профиля. Для этого нужно указать то же имя приложения.

Метод GetPropertyValues

Принимает в качестве входных данных объект SettingsContext и SettingsPropertyCollection.

Свойство SettingsContext предоставляет сведения о пользователе. Эти сведения могут использоваться в качестве первичного ключа для извлечения информации о свойствах профиля для пользователя. Объект SettingsContext используется для получения имени пользователя и информации о том, прошел ли пользователь проверку подлинности или является анонимным пользователем.

Свойство SettingsPropertyCollection содержит коллекцию объектов SettingsProperty. Каждый объект SettingsProperty предоставляет имя и тип свойства и дополнительную информацию, например, значение по умолчанию для свойства и то, является ли свойство доступным только для чтения. Метод GetPropertyValues заполняет SettingsPropertyValueCollection объектами SettingsPropertyValue, производными от объектов SettingsProperty, предоставленных в качестве входных данных. Значения из источника данных для указанного пользователя присваиваются свойствам PropertyValue каждого объекта SettingsPropertyValue и вся коллекция возвращается.

Вызов метода также обновляет значение LastActivityDate для указанного профиля пользователя на текущую дату и время.

Метод SetPropertyValues

Принимает в качестве входных данных объект SettingsContext и SettingsPropertyValueCollection.

Свойство SettingsContext предоставляет сведения о пользователе. Эти сведения могут использоваться в качестве первичного ключа для извлечения информации о свойствах профиля для пользователя. Объект SettingsContext используется для получения имени пользователя и информации о том, прошел ли пользователь проверку подлинности или является анонимным пользователем.

Свойство SettingsPropertyValueCollection содержит коллекцию объектов SettingsPropertyValue. Каждый объект SettingsPropertyValue предоставляет имя, тип и значение свойства, а также дополнительную информацию, например, значение по умолчанию для свойства и то, является ли свойство доступным только для чтения. Метод SetPropertyValues обновляет значения свойства профиля в источнике данных для указанного пользователя.

Вызов метода также обновляет значения LastActivityDate и LastUpdatedDate для указанного профиля пользователя на текущую дату и время.

Члены ProfileProvider

Член

Описание

Метод DeleteProfiles

Принимает в качестве входных данных массив строки имен пользователей и удаляет из источника данных всю информацию профиля и значения свойств для указанных имен, в которых имя приложения соответствует значению свойства ApplicationName.

Если источник данных поддерживает транзакции, рекомендуется включить все операции удаления в транзакцию и откатывать транзакцию, и создавать исключение, если какая-либо операция удаления заканчивается с ошибкой.

Метод DeleteProfiles

Принимает в качестве входных данных коллекцию объектов ProfileInfo и удаляет из источника данных всю информацию профиля и значения свойств для каждого профиля, в котором имя приложения соответствует значению свойства ApplicationName.

Если источник данных поддерживает транзакции, рекомендуется включить все операции удаления в транзакцию и откатывать транзакцию, и создавать исключение, если какая-либо операция удаления заканчивается с ошибкой.

Метод DeleteInactiveProfiles

Принимает в качестве входных данных значение ProfileAuthenticationOption и объект DateTime, и удаляет из источника данных всю информацию профиля и значения свойств, в которых дата последних действий меньше или равна указанной дате и времени и в которых имя приложения соответствует значению свойства ApplicationName. Параметр ProfileAuthenticationOption указывает, должны ли удаляться только анонимные профили, только профили, прошедшие проверку подлинности, или все профили.

Если источник данных поддерживает транзакции, рекомендуется включить все операции удаления в транзакцию и откатывать транзакцию, и создавать исключение, если какая-либо операция удаления заканчивается с ошибкой.

Метод GetAllProfiles

Принимает в качестве входных данных значение ProfileAuthenticationOption, целое число, указывающее индекс страницы, целое число, указывающее размер страницы и ссылку на целое число, указывающее общее количество профилей. Возвращает коллекцию ProfileInfoCollection, содержащую объекты ProfileInfo для всех профилей в источнике данных, в которых имя приложения соответствует значению свойства ApplicationName. Параметр ProfileAuthenticationOption указывает, должны ли возвращаться только анонимные профили, только профили, прошедшие проверку подлинности, или все профили.

Результаты, возвращаемые методом GetAllProfiles, ограничиваются значениями индекса страницы и размера страницы. Значение размера страницы указывает максимальное количество объектов ProfileInfo, возвращаемых коллекцией ProfileInfoCollection. Значение индекса страницы указывает возвращаемые страницы результатов, причем 1 указывает на первую страницу. Параметр общего количества записей является выходным параметром (в Visual Basic можно использовать ByRef), значение которого равно общему количеству профилей. Например, если хранилище данных содержит 13 профилей для приложения и значение индекса страницы равно 6, а размер страницы равен 5, то возвращенная коллекция ProfileInfoCollection будет содержать профили с шестого по десятый. Значению общего количества записей присваивается значение 13 при возврате метода.

Метод GetAllInactiveProfiles

Принимает в качестве входных данных значение ProfileAuthenticationOption, объект DateTime, целое число, указывающее индекс страницы, целое число, указывающее размер страницы и ссылку на целое число, указывающее общее количество профилей. Возвращает значение ProfileInfoCollection, содержащее объекты ProfileInfo для всех профилей в источнике данных, в которых дата последних действий меньше или равна указанному значению DateTime, и в которых имя приложения соответствует значению свойства ApplicationName. Параметр ProfileAuthenticationOption указывает, должны ли возвращаться только анонимные профили, только профили, прошедшие проверку подлинности, или все профили.

Результаты, возвращаемые методом GetAllInactiveProfiles, ограничиваются значениями индекса страницы и размера страницы. Значение размера страницы указывает максимальное количество объектов ProfileInfo, возвращаемых коллекцией ProfileInfoCollection. Значение индекса страницы указывает возвращаемые страницы результатов, причем 1 указывает на первую страницу. Параметр общего количества записей является выходным параметром (в Visual Basic можно использовать ByRef), значение которого равно общему количеству профилей. Например, если хранилище данных содержит 13 профилей для приложения и значение индекса страницы равно 2, а размер страницы равен 5, то возвращенная коллекция ProfileInfoCollection будет содержать профили с шестого по десятый. Значению общего количества записей присваивается значение 13 при возврате метода.

Метод FindProfilesByUserName

Принимает в качестве входных данных значение ProfileAuthenticationOption, строку, содержащую имя пользователя, целое число, указывающее индекс страницы, целое число, указывающее размер страницы и ссылку на целое число, указывающее общее количество профилей. Возвращает значение ProfileInfoCollection, содержащее объекты ProfileInfo для всех профилей в источнике данных, в которых имя пользователя соответствует указанному имени пользователя и в которых имя приложения соответствует значению свойства ApplicationName. Параметр ProfileAuthenticationOption указывает, должны ли возвращаться только анонимные профили, только профили, прошедшие проверку подлинности, или все профили.

Если применяемый пользователем источник данных поддерживает дополнительные возможности поиска, например, подстановочные знаки, то можно предоставить расширенные возможности поиска имен пользователей.

Результаты, возвращаемые методом FindProfilesByUserName, ограничиваются значениями индекса страницы и размера страницы. Значение размера страницы указывает максимальное количество объектов ProfileInfo, возвращаемых коллекцией ProfileInfoCollection. Значение индекса страницы указывает возвращаемые страницы результатов, причем 1 указывает на первую страницу. Параметр общего количества записей является выходным параметром (в Visual Basic можно использовать ByRef), значение которого равно общему количеству профилей. Например, если хранилище данных содержит 13 профилей для приложения и значение индекса страницы равно 2, а размер страницы равен 5, то возвращенная коллекция ProfileInfoCollection будет содержать профили с шестого по десятый. Значению общего количества записей присваивается значение 13 при возврате метода.

Метод FindInactiveProfilesByUserName

Принимает в качестве входных данных значение ProfileAuthenticationOption, строку, содержащую имя пользователя, объект DateTime, целое число, указывающее индекс страницы, целое число, указывающее размер страницы и ссылку на целое число, указывающее общее количество профилей. Возвращает значение ProfileInfoCollection, содержащее объекты ProfileInfo для всех профилей в источнике данных, в которых имя пользователя соответствует указанному имени пользователя, в которых последняя дата действий меньше или равна указанному значению DateTime и в которых имя приложения соответствует значению свойства ApplicationName. Параметр ProfileAuthenticationOption указывает, должны ли возвращаться только анонимные профили, только профили, прошедшие проверку подлинности, или все профили.

Если применяемый пользователем источник данных поддерживает дополнительные возможности поиска, например, подстановочные знаки, то можно предоставить расширенные возможности поиска имен пользователей.

Результаты, возвращаемые методом FindInactiveProfilesByUserName, ограничиваются значениями индекса страницы и размера страницы. Значение размера страницы указывает максимальное количество объектов ProfileInfo, возвращаемых коллекцией ProfileInfoCollection. Значение индекса страницы указывает возвращаемые страницы результатов, причем 1 указывает на первую страницу. Параметр общего количества записей является выходным параметром (в Visual Basic можно использовать ByRef), значение которого равно общему количеству профилей. Например, если хранилище данных содержит 13 профилей для приложения и значение индекса страницы равно 2, а размер страницы равен 5, то возвращенная коллекция ProfileInfoCollection будет содержать профили с шестого по десятый. Значению общего количества записей присваивается значение 13 при возврате метода.

Метод GetNumberOfInactiveProfiles

Принимает в качестве входных данных значение ProfileAuthenticationOption и объект DateTime и возвращает общее количество всех профилей в источнике данных, в которых последняя дата действий меньше или равна указанному значению DateTime и в которых имя приложения соответствует значению свойства ApplicationName. Параметр ProfileAuthenticationOption указывает, должны ли учитываться только анонимные профили, только профили, прошедшие проверку подлинности, или все профили.

Свойство ApplicationName

Поскольку поставщики профилей хранят информацию о профилях отдельно для каждого приложения, убедитесь, что имя приложения включено в используемую схему данных, используемые запросы и обновления данных. Например, следующая команда используется для извлечения значения свойства из базы данных, используя имя пользователя и статус анонимности профиля, и обеспечивает включение значения ApplicationName в запрос.

SELECT Property FROM PropertyTable 
  WHERE Username = 'user1' AND IsAnonymous = False 
  AND ApplicationName = 'MyApplication'

См. также

Задачи

Практическое руководство. Построение и выполнение примера поставщика профиля

Основные понятия

Общие сведения о свойствах профилей ASP.NET

Поставщики профилей ASP.NET