我按照这里的指示: 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。