5

我按照这里的指示: http ://splinter.com.au/blog/?p= 156 试图在不安装 Oracle 11g 客户端的情况下使用更新版本的 ODP.NET。到目前为止,我遵循了一切,除了重新启动 IIS。

但是,这引起了一些问题,我真的很好奇为什么。如果我尝试使用 ODP.NET,当 Oracle 连接尝试连接时(例如 ConnectExample.Open()),我会遇到一个空白异常。

但最奇怪的是:我无法删除 oci.dll。它说它正在使用中。什么可以使用这个 dll?当它位于 Bin 目录中时,ASP.NET 究竟对本机 dll 做了什么?我认为这可能与 oci.dll 有关,但如果我在桌面 WinForm 应用程序中以类似的方式使用 dll,则 oci.dll 不会被锁定,我可以自由删除它。

此外,在我尝试使用它之后,正常的 System.Data.OracleClient 停止工作。它现在引发 OCIEnvCreate 以 -1 返回的异常。

我将尝试重新启动 IIS,希望能解决这个问题,但我想知道这里发生了什么(以及是否可以在不重新启动 IIS 的情况下解决)。有人有想法吗?

编辑:我尝试重新启动 IIS 并没有解决问题

编辑#2:我认为我没有很好地提出这个问题,但那是因为我假设重新启动 IIS 会起作用。现在我只需要知道为什么它不起作用。在谷歌搜索类似问题时,我只遇到了 2 个论坛帖子,这些帖子告诉了我的确切问题:Oracle ODP.NET 在尝试连接时返回空白异常。以下是这些链接:

http://kr.forums.oracle.com/forums/thread.jspa?threadID=632296

http://forums.oracle.com/forums/thread.jspa?threadID=549864

上面的韩文链接是最有趣的。他们有一个完整的安装,这让我怀疑我的问题不在于文件或丢失的文件。我想知道“如果在建立 ODP 之前调用 OCI DLL,生产服务器抛出空白异常”是什么意思?

编辑/更新#3:我们部门有一个内部网服务器,我今天可以在上面进行测试。我将所需的 dll 添加到 Bin 文件夹中,一切正常,无需重新启动 IIS。我不问。我将在此服务器上尝试更多测试,看看是否可以复制问题

编辑#4(奥德赛继续):我确定 ASP.NET(或 ODP.NET 库)最初需要 oraocci11.dll(C++ 调用接口 DLL),甚至可以在 oraocci11.dll 之后找到 11g 客户端 dll似乎永远不会再使用,可以删除。不知道这对我的问题意味着什么,但由于它增加了这里的知识库,我想我会提到它

编辑#5:我将处理 C/MFC 的 2 个 Windows 系统文件 mfc71.dll 和 msvcr71.dll 添加到 Bin 目录,因为我发现 ODP.NET 需要它们(或至少客户端需要)。这至少使事情停留在旧的熟悉的“客户端不兼容”错误上。我删除了这 2 个 DLL,果然它又回到了上面给出的相同错误。但是,将它们添加回来并没有使这些错误消失,因此我必须再次重置 IIS。

4

5 回答 5

2

典型的 Oracle 体验。

我有同样的问题。解锁器不起作用。我尝试了几个——都报告该文件根本没有被锁定,但随后报告他们无法删除它。

停止 IIS 和大多数非核心 Windows 服务不起作用。

解决方案是重命名文件,重新启动,然后将其删除。出于某种原因,Windows 允许您重命名锁定的文件并使其保持锁定状态,但在重新启动时尝试锁定“oci.dll”会失败,因为它不再以该名称存在。

于 2011-06-15T15:15:28.900 回答
2

使用 services.msc 停止万维网发布服务,然后进行更改,而不是(或同时)停止 IIS 。

我们发现,对于 asp.net 应用程序使用的图形控制 DLL,仅仅停止 IIS 是不够的,因为您无法删除文件(或粘贴等)。但是一旦万维网发布服务停止,它就可以被删除或覆盖......

于 2010-01-28T03:00:12.540 回答
1

至于 DLL,您必须停止 IIS,删除它们,然后启动 IIS。这是因为它们是本机 DLL,而不是 C# dll。C# 的“影子复制”功能不适用于本机 dll,这就是它们被锁定的原因。

至于 oracle,我已经通过电子邮件向您发送了一些可以尝试的东西……真的,当您找到解决方案时,我们应该更新这个 SO 页面。

于 2010-01-28T02:51:16.713 回答
0

如果 IIS 不是锁定文件的进程,而您真的被卡住了,Unlocker 可以帮助查看实际锁定文件的内容,以及释放这些锁定并强制删除文件。

在这里获取

于 2010-02-02T16:25:16.280 回答
0

我知道有 3 件事可以让您删除此文件和其他属于 Oracle 数据访问客户端的文件:

1.) 停止 IIS 中的应用程序池。

2.) 关闭 Visual Studio。

3.) 重启机器。

于 2016-04-22T20:36:29.313 回答