(同学的总结)
自己在做用asp.net(vb.net)访问Oracle的时候遇到这样的调试错误:
一直郁闷快一个星期了都没有解决。
“/OracleWeb”应用程序中的服务器错误。
--------------------------------------------------------------------------------
安全性异常
说明: 应用程序试图执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别。
异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权。
源错误:
行 29: Dim ConnStr As String
行 30: ConnStr = " Provider=OraOleDb.Oracle;Data Source=wei;User id=system;Password=manager "
行 31: Dim conn As New OleDbConnection(ConnStr)
行 32: conn.Open()
行 33: Dim da As New OleDbDataAdapter("select * from weishuang", conn)
源文件: C:/Inetpub/wwwroot/OracleWeb/WebForm1.aspx.vb 行: 31
堆栈跟踪:
[SecurityException: 不允许所请求的注册表访问权。]
Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) +473
System.Data.Common.ADP.ClassesRootRegistryValue(String subkey, String queryvalue)
System.Data.OleDb.OleDbConnectionString.ValidateParse()
System.Data.Common.DBConnectionString..ctor(String connectionString, UdlSupport checkForUdl)
System.Data.OleDb.OleDbConnectionString..ctor(String connectionString)
System.Data.OleDb.OleDbConnectionString.ParseString(String connectionString)
System.Data.OleDb.OleDbConnection.set_ConnectionString(String value)
System.Data.OleDb.OleDbConnection..ctor(String connectionString)
OracleWeb.WebForm1.Page_Load(Object sender, EventArgs e) in C:/Inetpub/wwwroot/OracleWeb/WebForm1.aspx.vb:31
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain()
System.Web.UI.Page.ProcessRequest()
System.Web.UI.Page.ProcessRequest(HttpContext context)
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute()
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +87
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.2032; ASP.NET 版本:1.1.4322.2032
然后试验了一下网上所说的几种方法:
1.微软提供的无人工介入的自动的机器翻译系统上提示说:
要解决此问题, 获取最新 ServicePack 用于 Microsoft.NETFramework 1.1。 要获取最新 ServicePack, 请访问以下 Microsoft 网站:
http://www.microsoft.com/downloads/details.aspx?familyid=A8F5654F-088E-40B2-BBDB-A83353618B38
结果没能解决我所遇到的问题。
2.蝈蝈俊.net的博客上有人提到如下方式:
“IIS虚拟目录的匿名访问选择框点掉再选中”大法:
首先,不让该站点虚拟目录启用匿名访问,这样在本机管理员身份下访问你的web应用,因为你当前的身份应该拥有对注册表的权限,所以肯定能做Enterprise Library要做的事情。然后,再让虚拟目录启用匿名访问,再次访问Web应用,一切恢复正常,不再报告“System.Security.SecurityException: 不允许所请求的注册表访问权。”了。
结果没能解决我所遇到的问题。
3.最后找到这样一个方法解决了我所遇到的问题:
在vs.net项目的web.config文件下添加一个节点如下:
<authorization>
<allow users="*" /> <!-- 允许所有用户 -->
<!-- <allow users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
<deny users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
-->
</authorization>
<identity impersonate="true" userName="nuc" password="" /> 其实就是添了最后的一句话。
userName="nuc" password=""是操作系统的登录名称和密码。
之所以把上面的方式都列举出来,并不是说另外人的方式不对,而是把所有可能解决问题的方式做一个小小的总结,供大家参考,可能另外的方法恰能解决你所遇到的类似的问题,以下提供两个网址供参考:
http://blog.joycode.com/ghj/archive/2005/07/26/60364.aspx
!!!!!!!!!另外特别提醒一点:重新装系统以后最好不要随便更改电脑的名字(当然这只是对编程的朋友),否则很容易引起一系列的错误比如iis不能运行asp,等等一些web应用程序的错误,往往需要“同步iwam账号在active directory、iis metabase数据库和com+应用程序中的密码”才能彻底的解决,搞不好,你的系统就会全部down掉。