我在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密钥。但我的登台服务器呢。如果这有帮助。
答案 0 :(得分:6)
这里有一个老问题,但我刚刚遇到它并希望分享更多细节。
首先,如果您需要在connectionStrings块中执行<clear/>
,最简单的解决方案是将空白的OraAspNetConString connectionstring条目添加回web.config:
<connectionStrings>
<clear />
<add name="OraAspNetConString" connectionString=" "/>
</connectionStrings>
当你在任何一台机器上install the Oracle .NET package时,会在你的machine.config中安装大量不同的提供程序,并将OraAspNetConString作为机器级connectionString安装。 <clear/>
元素摆脱了OraAspNetConString,并且由于Oracle的machine.config添加,默认情况下加载的所有其他Oracle提供程序在找不到connectionString时都会崩溃。
这里你探讨使用元素作为成员资格提供者的另一个答案是行不通的,因为在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,则必须确保<clear/>
以下每个Oracle提供程序或进入并添加<remove name=x />
元素每个提供者类都是这样的:
<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>
我从未在我的网络应用程序中处理过任何siteMap或Health Monitoring代码,但我仍然需要在web.config中为不同的提供程序手动添加这些<remove/>
元素,否则会崩溃以寻找OraAspNetConString连接字符串那不存在。
答案 1 :(得分:4)
您需要在配置文件中定义自己的提供程序,例如,这是一个成员资格提供程序:
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MyConnection" applicationName="MyApp"/>
</providers>
</membership>
基本上这将删除系统级别定义的所有提供程序,这就是我们清理的原因,然后定义新的提供程序。如果您需要系统级别的提供程序,则可以将自己定义为默认提供程序,或者在应用程序代码中专门请求提供程序。
答案 2 :(得分:0)
这个错误说你在machine.conf中没有web.config。
答案 3 :(得分:0)
只需为我工作的“OraAspNetConString”添加一个空的ConnectionString
<connectionStrings>
<clear />
<add name="OraAspNetConString" connectionString=" "/>
.................. your other connectionstrings goes here .....
</connectionStrings>