【问题标题】:Membership and Role Providers when using Oracle Managed Driver使用 Oracle 托管驱动程序时的成员资格和角色提供者
【发布时间】:2017-02-28 07:39:26
【问题描述】:

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

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

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

我需要对 部分进行任何更改吗?

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

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

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

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

<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>

【问题讨论】:

  • 我确信有人开发了一个使用表单身份验证(使用角色和成员资格提供程序)并且还使用 Oracle 托管驱动程序 (Oracle.ManagedDataAccess) 的 Web 应用程序。如果在添加对 Oracle.ManagedDataAccess 的引用后从应用程序中删除了对 Oracle.DataAccess 和 Oracle.Web 的引用,我只需要知道如何修改 web.config 的提供程序部分。
  • 显然不可能!刚刚看到此链接community.oracle.com/thread/3589539?start=0&tstart=0,其中有人发布了“4. 提供商不支持 Oracle.ManagedDataAccess.Client”作为他的问题之一,Oracle 团队的回应是:“目前,托管 ODP.NET 不支持提供商”。

标签: asp.net web-config oracle12c


【解决方案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.ManagedDataAccess.Client 全局替换 Oracle.DataAccess.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 - 看起来您指向错误的框架。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2011-01-03
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多