【问题标题】:ASP Membership Odd ProblemASP 会员资格奇怪的问题
【发布时间】:2010-10-13 16:14:31
【问题描述】:

我在 ASP .NET 中使用 Membership API,但在我的登台服务器上遇到了以下问题。该应用程序在我的本地机器上运行良好。数据表存储在 SQL Server 上。我的本地服务器和登台服务器都指向同一个数据库服务器。当我部署到我的登台服务器时,我收到以下错误:

 Parser Error Message: The connection name 'OraAspNetConString' was not 
 found in the applications configuration or the connection string is empty. 

    Line 135:    <roleManager>
    Line 136:      <providers>
    Line 137:        <add name="OracleRoleProvider" 

type="Oracle.Web.Security.OracleRoleProvider, Oracle.Web, Version=2.111.6.20,
Culture=neutral, PublicKeyToken=89b483f429c47342" 
connectionStringName="OraAspNetConString" applicationName="" />
    Line 138:        <add name="AspNetSqlRoleProvider"   
connectionStringName="LocalSqlServer" applicationName="/" 
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    Line 139:        <add name="AspNetWindowsTokenRoleProvider" 
applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, 
System.Web, Version=2.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a" />


Source File: 
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Config\machine.config
    Line: 137 

我不知道为什么它甚至试图对 Oracle 做任何事情,我的 web.config 不包含任何与 Oracle 相关的内容。

有人知道为什么会这样吗?

[编辑] 在我的本地机器的 machine.config 上,我没有 OracleRoleProvider 键。但是我的登台服务器可以。如果有帮助的话。

【问题讨论】:

    标签: asp.net sql oracle membership


    【解决方案1】:

    这个错误是说你在 machine.conf 而不是 web.config 中有那个。

    【讨论】:

    • 最简单的解决方案是找出那个 oracle 连接字符串为什么在 machine.config 中。如果您无法删除它,那么您需要覆盖它。你确定你的 web.config 中有 Josh 提到的 吗?我认为这应该清除提供者。
    【解决方案2】:

    你需要在你的配置文件中定义你自己的提供者,例如这里是一个会员提供者:

        <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
            <providers>
                <clear/>
                <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MyConnection" applicationName="MyApp"/>
            </providers>
        </membership>
    

    基本上这将删除在系统级别定义的所有提供程序,这就是我们要清除的原因,然后您定义新的提供程序。如果您需要系统级别的提供程序,您可以将自己的提供程序定义为默认值,或者在您的应用代码中专门请求您的提供程序。

    【讨论】:

    • 只需添加一个名为 OraAspNetConString 的虚拟连接字符串。如果您确定已将其删除,则它不应运行。但这可能会让您继续前进。还要确保您为 RoleProvier 和 Membership 这样做
    【解决方案3】:

    这里是老问题,但我刚刚遇到它并想分享更多细节。

    首先,如果您需要在 connectionStrings 块中执行 &lt;clear/&gt;,最简单的解决方案是将空白 OraAspNetConString 连接字符串条目添加回您的 web.config:

    <connectionStrings>
        <clear />
          <add name="OraAspNetConString" connectionString=" "/>    
    </connectionStrings>
    

    当您在任何一台机器上install the Oracle .NET package 时会发生什么,它会在您的 machine.config 中安装大量不同的提供程序以及作为机器级连接字符串的 OraAspNetConString。 &lt;clear/&gt; 元素摆脱了那个 OraAspNetConString 并且由于 Oracle 的 machine.config 添加,所有其他默认加载的 Oracle 提供程序在找不到连接字符串时都会崩溃。

    您在这里探索使用成员资格提供者元素的另一个答案不起作用,因为添加到 machine.config 中的大多数其他 oracle 提供者仍在寻找那个 OraAspNetConString 所以仅清除一个提供商对您没有帮助。

    这些是他们安装到我的 machine.config 中的所有提供程序:

    <membership><providers>
        <add name="OracleMembershipProvider" type="Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName="" />
    </providers></membership>
    <profile><providers>
        <add name="OracleProfileProvider" type="Oracle.Web.Profile.OracleProfileProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
    </providers></profile>
    <roleManager><providers>
        <add name="OracleRoleProvider" type="Oracle.Web.Security.OracleRoleProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
    </providers></roleManager>
    <siteMap><providers>
        <add name="OracleSiteMapProvider" type="Oracle.Web.SiteMap.OracleSiteMapProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName="" securityTrimmingEnabled="true"/>
    </providers></siteMap>
    <webParts>
      <personalization>
        <providers>
          <add name="OraclePersonalizationProvider" type="Oracle.Web.Personalization.OraclePersonalizationProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
        </providers>
      </personalization>
    </webParts>
    <healthMonitoring><providers>
        <add name="OracleWebEventProvider" type="Oracle.Web.Management.OracleWebEventProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" buffer="true" bufferMode="OracleNotification"/>
    </providers></healthMonitoring>
    

    因此,如果您不想添加空白的 OraAspNetConString,则必须确保您要么 &lt;clear/&gt; 以下每个 Oracle 提供程序,要么进入并向每个提供程序类添加 &lt;remove name=x /&gt; 元素,例如这个:

    <membership><providers>
        <remove name="OracleMembershipProvider" />
    </providers></membership>
    <profile><providers>
        <remove name="OracleProfileProvider" />
    </providers></profile>
    <roleManager><providers>
        <remove name="OracleRoleProvider" />
    </providers></roleManager>
    <siteMap><providers>
        <remove name="OracleSiteMapProvider" />
    </providers></siteMap>
    <healthMonitoring><providers>
        <remove name="OracleWebEventProvider" />
    </providers></healthMonitoring>
    

    我从未在我的网络应用程序中处理过任何站点地图或健康监测代码,但我仍然必须在我的 web.config 中为不同的提供者手动添加这些 &lt;remove/&gt; 元素,否则在寻找 OraAspNetConString 连接字符串时会崩溃不在那里。

    【讨论】:

      【解决方案4】:

      为我工作的“OraAspNetConString”添加一个空的 ConnectionString

      <connectionStrings>
          <clear />
          <add name="OraAspNetConString" connectionString=" "/>
          .................. your other connectionstrings goes here .....
      </connectionStrings>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多