【问题标题】:Oracle Session State Store Class in ASP.Net C#ASP.Net C# 中的 Oracle 会话状态存储类
【发布时间】:2011-12-14 02:11:50
【问题描述】:

我正在一个开发项目中实现 Oracle 会话状态存储类,它位于 Oracle 11g 客户端中,用于在应用程序在网络场上运行时保存我的用户会话。

虽然我可以通过 web.config 使 Oracle 会话状态存储工作,但我需要在后面的代码中使存储工作,因为我们的数据库连接,即密码是加密的,只有在建立连接时才会解密。不幸的是,我无法在 web.config 中执行此操作。

我尝试使用 Initialise 方法在 Session_Start 方法中的 Global.asax 中实现 Oracle 会话状态存储类。问题是它抛出了一个错误。它正在调用的异常是“连接字符串名称属性为空或配置文件中不存在,或在配置文件中发现无效属性。”

在 Session_Start 方法中,我创建了一个名称值集合并添加了两个变量,一个是数据库连接字符串,另一个是自定义会话存储的类型。

有谁知道我做错了什么?

谢谢

【问题讨论】:

    标签: oracle


    【解决方案1】:

    首先,确保您的web.configmachine.config 配置正确。你可以看看Oracle Session State Store documentation,或者下面:

    <?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\"
    

    如果上面的命令行运行正常,但您的 Web 应用程序产生 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"
    

    顺便说一句,我不必在Global.ascx 中实现OracleSessionStateStore。我只是参考Session["key"] = value;var value = Session["key"]; 此外,请确保您的 DBA 设置了一个作业来清理会话状态表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 2012-12-13
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2010-11-02
      相关资源
      最近更新 更多