使用Oracle托管驱动程序时的成员身份和角色提供程序

时间:2016-07-25 14:07:55

标签: asp.net web-config oracle12c

在将数据库升级到64位12C之后,我的一个Web应用程序中出现了一些32位/ 64位问题,在研究了我遇到的问题之后,几乎通用的答案是“使用托管驱动程序而不用担心32/64位问题“。所以我做了。我

  • here下载并安装了“ODAC 12c第4版和Visual Studio的Oracle开发人员工具(12.1.0.2.4)”,
  • 删除了对Oracle.Web和Oracle.DataAccess的引用(非托管 我的应用程序中的驱动程序,并添加了对新托管驱动程序“Oracle.ManagedDataAccess”
  • 的引用
  • 更改了所有“使用Oracle.Web”,“使用Oracle.DataAccess.Client” “使用Oracle.ManagedDataAccess.Client”

但我找不到一个文档告诉我如何修改Web配置文件以使用托管驱动程序。

我是否需要对< connectionStrings>进行任何更改?部?

我是否需要添加其他部分才能使用托管驱动程序?

我需要在会员和角色提供程序部分更改哪些内容?现有的提供程序引用Oracle.Web.Security.OracleRoleProvider,一旦升级到托管版本,就必须删除对Oracle.Web和Oracle.DataAccess的所有引用。

如果有人经历过这些痛苦,请分享您对这些问题的解决方案,以及解决后可能遇到的任何其他问题。

这是我认为需要更改/删除的当前Web配置文件的示例:

<connectionStrings>
    <clear/>
    <add name="MSAConnectionString" connectionString="User Id=Some_User;Password=SomePwd;Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.30.40)(PORT = 1521)))(CONNECT_DATA =(SID = MSA))); Min Pool Size=10;Max Pool Size=300;Incr Pool Size=5;Decr Pool Size=2;"/>
</connectionStrings>

<compilation defaultLanguage="c#" debug="true" targetFramework="4.0">
    <assemblies>// next two line will have to be removed, since DLLs no longer referenced
        <add assembly="Oracle.DataAccess, Version=2.121.2.0, Culture=neutral, PublicKeyToken=89B483F429C47342"/>
        <add assembly="Oracle.Web, Version=2.121.2.0, Culture=neutral, PublicKeyToken=89B483F429C47342"/>
        <add assembly="System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    </assemblies>
</compilation>

<membership defaultProvider="DSSOracleMembershipProvider">
    <providers>
        <add name="DSSOracleMembershipProvider" type="Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=2.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="MSAConnectionString" applicationName="/" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="4" minRequiredPasswordLength="9" passwordAttemptWindow="8"/>
    </providers>
</membership>
<roleManager enabled="true" defaultProvider="DSSOracleRoleProvider">
    <providers>
        <add name="DSSOracleRoleProvider" type="Oracle.Web.Security.OracleRoleProvider, Oracle.Web, Version=2.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="MSAConnectionString" applicationName="/"/>
    </providers>
</roleManager>

1 个答案:

答案 0 :(得分:1)

一些想法: 1)成员资格是Oracle.Web的一部分 - 所以你仍然需要这些引用 - 我喜欢将它添加到web.config中的运行时部分以获得良好的衡量标准:

 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Oracle.Web" publicKeyToken="89b483f429c47342" />
    <bindingRedirect oldVersion="0.0.0.0-4.121.2.1" newVersion="4.121.2.1" />
  </dependentAssembly>
</assemblyBinding>

2)VS2015 NuGet可以帮助您安装Oracle托管客户端;但是,它可以像为Oracle.DataAccess.Client取代Oracle.ManagedDataAccess.Client一样简单。 (不要单独留下Oracle.Web!)

3)可能需要对您的ADO.net池进行额外调整(在连接字符串中) - 请参阅此处:ODP.NET error in IIS: ORA-12357 Network Session End of file

2.x驱动程序也适用于ASP.NET 2.0 - 4.x是ASP.NET 4.0 - 看起来就像是指向错误的框架。