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

Visual Studio 2010

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

В подразделах данного раздела содержится код для примера поставщика профиля ASP.NET. В данном примере поставщика для подключения ODBC к источнику данных ODBC используется поставщик данных NET Framework. В данном примере используется база данных Access в качестве источника данных.

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

8zs47k7y.alert_note(ru-ru,VS.100).gifПримечание.

Поскольку в источниках данных используется различный синтаксис SQL, некоторые команды SQL будут работать с одним источником данных и не будут работать с другим. Таким образом, рекомендуется создавать поставщик профиля, соответствующий используемому источнику данных, даже в случае использования поставщика данных .NET Framework для ODBC или OLEDB для обращения к используемому источнику данных. Например, можно создать отдельные поставщики, такие как SybaseProfileProvider, OracleProfileProvider и т. д.

Код для данного примера см. в разделе Пример реализации поставщика профилей.

Данный поставщик предназначен для чтения и записи данных в три таблицы базы данных: Profiles, StockSymbols и ProfileData. Поставщик профиля в данном примере поддерживает два свойства профилей: список символов акций и почтовый индекс.

Каждый профиль пользователя имеет уникальный идентификатор в таблице Profiles базы данных. Эта таблица содержит сведения о профиле, такие как имя приложения и дата последней активности. Таблица Profiles содержит первичный ключ с автоматическим инкрементом, который используется, чтобы предоставить уникальный идентификатор для каждой строки и связать таблицу с другими таблицами базы данных, которая содержит значения свойств профилей.

Таблица StockSymbols содержит значения для списка символов акций, которые сохраняются и извлекаются с помощью свойства StockSymbols. Между таблицами StockSymbols и Profiles существует отношение типа "один ко многим", поскольку в профиле одного пользователя может быть отслежено любое число символов акций.

Значение свойства ZipCode сохраняется в таблице ProfileData. Между таблицами ProfileData и Profiles существует отношение типа "один к одному".

Создание таблиц базы данных для хранения профилей

  1. Создайте новую базу данных Microsoft Access или откройте существующую.

    8zs47k7y.alert_note(ru-ru,VS.100).gifПримечание.

    Если база данных хранится в файловых папках веб-приложения, рекомендуется хранить базу данных в папке приложения App_Data. Содержимое папки App_Data доступно для кода приложения, однако это содержимое не предоставляется веб-запросам. Кроме того, процесс ASP.NET имеет разрешения на чтение и запись в папку App_Data.

  2. В Access или другом средстве, с помощью которого можно создавать таблицы в базе данных Access, введите следующий запрос определения данных, чтобы создать таблицу Profiles:

    CREATE TABLE Profiles
    (
      UniqueID AutoIncrement NOT NULL PRIMARY KEY,
      Username Text (255) NOT NULL,
      ApplicationName Text (255) NOT NULL,
      IsAnonymous YesNo, 
      LastActivityDate DateTime,
      LastUpdatedDate DateTime,
        CONSTRAINT PKProfiles UNIQUE (Username, ApplicationName)
    )
    
  3. Введите следующий запрос определения данных, чтобы создать таблицу StockSymbols:

    CREATE TABLE StockSymbols
    (
      UniqueID Integer,
      StockSymbol Text (10),
        CONSTRAINT FKProfiles1 FOREIGN KEY (UniqueID)
          REFERENCES Profiles
    )
    
  4. Введите следующий запрос определения данных, чтобы создать таблицу ProfileData:

    CREATE TABLE ProfileData
    (
      UniqueID Integer,
      ZipCode Text (10),
        CONSTRAINT FKProfiles2 FOREIGN KEY (UniqueID)
          REFERENCES Profiles
    )
    

Если поставщик из данного примера сталкивается с исключением при работе с источником данных, поставщик выполняет запись подробностей исключения в журнал событий приложений Windows вместо возвращения исключения приложению ASP.NET. Это реализовано в качестве меры безопасности, чтобы предотвратить раскрытие в приложении ASP.NET закрытых сведений об источнике данных.

В поставщике из данного примера определено событие Source для поставщика OdbcProfileProvider. Чтобы для приложения ASP.NET была доступна запись в журнал событий приложений, необходимо предоставить доступ к журналу событий.

8zs47k7y.alert_note(ru-ru,VS.100).gifПримечание.

Чтобы в поставщике из данного примера не выполнялась запись исключений в журнал событий, можно задать атрибуту writeExceptionsToEventLog значение false в разделе настройки поставщика в файле Web.config.

Предоставление доступа к журналу событий

  • С помощью Regedit.exe или другого средства редактирования реестра Windows создайте следующий ключ реестра:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcProfileProvider
    

Чтобы использовать поставщик из данного примера, необходимо предоставить доступ к коду для веб-приложения. Для этого существует два способа:

  • Поместите исходный код поставщика из данного примера в папку приложения App_Code. В данном случае нет необходимости компилировать код данного примера вручную.

  • Скомпилируйте код и поместите результирующую сборку в папку приложения Bin или присвойте этой сборке строгое имя и поместите ее в глобальный кэш сборок.

Тестирование поставщика из примера без компилирования вручную

  1. Если приложение еще не имеет папки App_Code, создайте эту папку в корневом каталоге данного приложения.

  2. В папке App_Code создайте текстовый файл с именем OdbcProfileProvider.vb или OdbcProfileProvider.cs в зависимости от используемого языка программирования.

    8zs47k7y.alert_note(ru-ru,VS.100).gifПримечание.

    Если исходный код уже имеется в каталоге App_Code данного приложения, используйте ту версию поставщика из данного примера, которая реализована на таком же языке программирования, как и существующий код в каталоге. Компилирование поставщика будет выполнено ASP.NET при первом запросе страницы данного приложения ASP.NET.

  3. Скопируйте и вставьте исходный код примера (на соответствующем языке) в соответствующий текстовый файл и сохраните его.

Компилирование поставщика из данного примера

  1. Создайте папку для исходных файлов пользовательских элементов управления и связанных классов.

  2. В папке исходного кода создайте тестовый файл с именем OdbcProfileProvider.vb или OdbcProfileProvider.cs в зависимости от используемого языка программирования.

    8zs47k7y.alert_note(ru-ru,VS.100).gifПримечание.

    Не помещайте исходный код в папку App_Code, если также имеется намерение скомпилировать код примера вручную и добавить получившуюся в результате сборку в папку Bin. Если все-таки поместить исходный код в папку App_Code, то тип поставщика будет существовать и в скомпилированной сборке, и в динамически созданной сборке, построенной с помощью ASP.NET из папки App_Code. В результате при загрузке поставщика создается неоднозначная ссылка и выполнение любого кода со ссылкой на данный тип приводит к созданию ошибки компилятора.

  3. Скопируйте и вставьте исходный код для каждого примера в соответствующий текстовый файл и сохраните его.

  4. Выполните следующую команду из папки исходного кода для компиляции элементов управления и связанных классов в сборку:

    vbc /out:OdbcProfileProvider.dll /t:library OdbcProfileProvider.vb /r:System.Web.dll /r:System.Configuration.dll
    

    csc /out:OdbcProfileProvider.dll /t:library OdbcProfileProvider.cs /r:System.Web.dll /r:System.Configuration.dll
    

    Параметр компилятора /t:library указывает на то, что компилятором должна быть создана библиотека (а не исполняемая сборка). Параметр /out предоставляет имя для сборки, а параметр /r — список сборок, связанных с текущей сборкой.

    8zs47k7y.alert_note(ru-ru,VS.100).gifПримечание.

    Если не удается выполнить команду компилятора, то перед запуском команды необходимо добавить путь установки .NET Framework в переменную PATH. В Windows щелкните правой кнопкой мыши элемент Мой компьютер, выберите пункт Свойства, перейдите на вкладку Дополнительно, а затем нажмите кнопку Переменные среды. В списке Системные переменные дважды щелкните переменную Path. В поле Значение переменной добавьте точку с запятой (;) в конец существующих значений текстового поля и введите путь установки платформы .NET Framework. Обычно платформа .NET Framework устанавливается в папку установки Windows "\Microsoft.NET\Framework\versionNumber".

Чтобы использовать поставщик из данного примера с веб-приложением ASP.NET, необходимо настроить приложение, чтобы зарегистрировать поставщик.

В примере настройки предполагается, что данный веб-узел настроен так, чтобы использовать проверку подлинности с помощью форм, и содержит страницу ASP.NET с именем Login.aspx, которая позволяет пользователям входить в систему и устанавливать удостоверение пользователя. В примере также поддерживается анонимная проверка подлинности, таким образом, от пользователей не требуется выполнять вход в систему.

Настройка приложения на использование поставщика из данного примера

  1. Создайте страницу ASP.NET с именем Login.aspx и выполните одно из следующих действий:

    • Если приложение уже настроено на использование членства ASP.NET, добавьте элемент управления Login на эту страницу.

    • Создайте форму входа в систему и используйте аутентификацию с помощью форм для проверки подлинности пользователей. Дополнительные сведения см. в разделе Практическое руководство. Реализация простой проверки подлинности с помощью форм.

      8zs47k7y.alert_note(ru-ru,VS.100).gifПримечание.

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

  2. Создайте на компьютере имя DSN OdbcProfile и настройте его таким образом, чтобы в нем содержались сведения о подключении к созданной ранее базе данных Access.

  3. Если для данного приложения ASP.NET еще не имеется такого имени, создайте текстовый файл Web.config в корневой папке приложения.

  4. Добавьте следующие элементы в файл Web.config:

    <configuration>
      <connectionStrings>
        <add name="OdbcProfile" connectionString="DSN=OdbcProfile;" />
      </connectionStrings>
    
      <system.web>
        <authentication mode="Forms" >
          <forms loginUrl="login.aspx"
            name=".ASPXFORMSAUTH" />
        </authentication>
    
        <anonymousIdentification enabled="true" />
    
        <profile defaultProvider="OdbcProvider">
          <providers>
            <add
              name="OdbcProvider"
              type="Samples.AspNet.Profile.OdbcProfileProvider" 
              connectionStringName="OdbcProfile" /> 
          </providers>
    
          <properties>
            <add name="ZipCode" 
              allowAnonymous="true" />
            <add name="CityAndState" 
              provider="AspNetSqlProfileProvider" 
              allowAnonymous="true" />
            <add name="StockSymbols" 
              type="System.Collections.ArrayList" 
              allowAnonymous="true" />
          </properties>
        </profile>
      </system.web>
    </configuration>
    
Показ: