Класс хранилища состояний Oracle Session в ASP.Net C # - PullRequest
0 голосов
/ 15 марта 2011

Я внедряю в проект разработки Oracle Session State Store Class, который находится в Oracle 11g Client для хранения пользовательских сессий, когда приложение выполняется в веб-ферме.

Хотя я могу заставить Oracle Session State Store работать через web.config, мне нужно, чтобы хранилище работало в коде, потому что наши соединения с базой данных, то есть пароли зашифрованы и дешифруются только после установления соединения. К сожалению, я не могу сделать это в файле web.config.

Я попытался реализовать класс хранилища состояний Oracle Session в Global.asax в методе Session_Start, используя метод Initialise. Проблема в том, что выдает ошибку. Исключением, которое он вызывает, является «Атрибут connectionStringName пуст или не существует в файле конфигурации, или в файле конфигурации найден недопустимый атрибут».

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

Кто-нибудь знает, что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 13 декабря 2011

Сначала убедитесь, что ваш web.config или machine.config настроен правильно. Вы можете взглянуть на документацию Oracle Session State Store или ниже:

<?xml version="1.0"?>
<configuration xmlns=
  "http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <connectionStrings>
    <add name="my_sessionstate_app_con_string" connectionString=
      "User Id=scott;Password=tiger;Data Source=Oracle"/>
  </connectionStrings>
  <system.web>
    <!-- Enable and customize OracleSessionStateProvider -->
    <sessionState mode="Custom" customProvider="MyOracleSessionStateStore">
      <providers>
        <add name="MyOracleSessionStateStore" 
             type="Oracle.Web.SessionState.OracleSessionStateStore, 
             Oracle.Web, Version=2.111.6.20, Culture=neutral, 
             PublicKeyToken=89b483f429c47342" 
             connectionStringName="my_sessionstate_app_con_string"/>
      </providers>
    </sessionState>
  </system.web>
</configuration>

Во-вторых, вы НЕ ДОЛЖНЫ шифровать строку подключения к хранилищу состояний сеанса Oracle во время разработки. Вы можете использовать aspnet_regiis для шифрования при развертывании, как показано ниже.

aspnet_regiis -pef connectionStrings "c:\inetpub\wwwroot\myapp\"

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

aspnet_regiis -pc "NetFrameworkConfigurationKey" -exp
aspnet_regiis -pa "NetFrameworkConfigurationKey" "ASPNET"
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NETWORK SERVICE"
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

Кстати, мне не пришлось реализовывать OracleSessionStateStore в Global.ascx. Я просто ссылаюсь на Session["key"] = value; и var value = Session["key"]; Также убедитесь, что ваш администратор БД настроил задание для очистки таблицы состояний сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...