【发布时间】:2014-01-05 23:04:48
【问题描述】:
我开发了一个简单的 C#、.net 4.0 网站,我想将其部署到 IIS 测试服务器上。我正在使用 Oracle.DataAccess 程序集连接到 Oracle 数据库,并且我添加了该 DLL(以及许多其他相关的 DLL,只是为了很好的衡量和尝试解决这个问题的有趣尝试) , 到我网站的 bin 文件夹。它在我的开发机器上运行良好(显然;在复制所有这些 DLL 之前运行良好),但不是我的测试服务器。在测试服务器上,我收到以下异常:
[OracleException (0x80004005)]
Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) +1468
Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) +24
Oracle.DataAccess.Client.OracleConnection.Open() +4391
MappingQueries.connect() +173
scripts_list_mappings.Page_Load(Object sender, EventArgs e) +17
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207
没有错误信息,没有细节。有什么方法可以让我获得更多信息,或者有什么办法可以解决这个问题?我在这里有点松散,所以任何有用的信息将不胜感激。
解决方案(有点)
好的,我已经以迂回的方式解决了这个问题,我想为遇到类似问题的人留下一些建议。
第一件事:它帮助我创建了一个简单的测试应用程序,我可以用它来确定问题是否出在 IIS 上。我使用了一个连接到我的 Oracle 数据库的简单 C# 应用程序。我的目标是让它正常工作,为此我安装了 Oracle 即时客户端。
下一步:使用特权帐户运行应用程序。我使用了我自己的管理帐户,我用它来运行我的测试应用程序。
最后,为了确定这是否是 32/64 位问题,我检查了注册表以确定我的 Oracle 变量在哪里:HKLM/Software/Oracle 或 HKLM/Software/WOW6432/Oracle。我还尝试从命令行运行 SQLPLUS,并在进程管理器中检查进程是否显示为 *32(表示 32 位应用程序)。
我想就是这样。显然,对于这个问题没有“一刀切”的解决方案,但希望遇到这个问题的任何人都能在我提供的详细信息以及以下有用的 cmets 中找到一些帮助。
【问题讨论】:
-
您的 IIS 用户是否具有执行 Oracle 客户端的正确权限
-
@SystemDown 等一下,我试试看。
-
内存是朦胧的(已经好几年没和Oracle合作了),但是你需要找到Oracle客户端所在的文件夹并检查那里的用户权限。您的 IIS 用户(取决于您的操作系统)需要具有权限。
-
虽然 System.Data.OracleClient 已被弃用,但如果这是一个小型非关键应用程序,我强烈建议使用 Oracle.DataAccess。启动和运行要容易得多。我是根据经验说话的,目的是为了节省你很多挫败感。我对微软弃用它感到失望。试试看,你会明白我的意思。 ODP.NET 不适合设置。
-
谢谢各位,我正在调查权限,但这似乎不是问题所在。我正在使用自己的帐户(完全管理员权限)运行该应用程序,但我仍然遇到同样的问题。我发现我的服务器是 32 位的,而我的工作站是 64 位的:我需要确定天气我有 64 位 Oracle 客户端还是 32 位 Oracle 客户端。