我正在一个开发项目中实现Oracle会话状态存储类,它可以在Oracle 11g客户端中找到,以便在应用程序通过Web场运行时保存我的用户会话。
虽然我可以通过web.config使Oracle会话状态存储工作,但我需要让存储在代码中工作,因为我们的数据库连接,即密码是加密的,只有在建立连接时才会被解密。不幸的是,我无法在web.config中执行此操作。
我尝试使用Initialise方法在Session_Start方法中的Global.asax中实现Oracle会话状态存储类。问题是它抛出了一个错误。它调用的例外是“connectionStringName属性为空或配置文件中不存在,或者在配置文件中找到无效属性。”
在Session_Start方法中,我创建了一个名称值集合,并添加了两个变量,其中一个是数据库连接字符串,另一个是自定义会话存储的类型。
有谁知道我做错了什么?
由于
答案 0 :(得分:0)
首先,确保正确配置了web.config
或machine.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"
顺便说一句,我没有必要在OracleSessionStateStore
中实施Global.ascx
。我只是引用了Session["key"] = value;
和var value = Session["key"];
另外,请确保您的DBA设置了一个工作来清理会话状态表。