我按照此处的指示进行操作:http://splinter.com.au/blog/?p=156,试图在不安装Oracle 11g客户端的情况下使用ODP.NET的较新版本。到目前为止,除了重新启动IIS之外,我一直都遵循所有步骤。

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

但最奇怪的是:我无法删除oci.dll。它说它正在使用中。什么可能正在使用此dll?当ASP.NET位于Bin目录中时,它将与 native dll一起做什么?我以为这可能涉及到oci.dll,但是如果我在桌面WinForm应用程序中以类似方式使用dll,则oci.dll不会被锁定,因此我可以自由地删除它。

另外,在尝试使用它之后,正常的System.Data.OracleClient也停止了工作。现在,它抛出一个异常,OCIEnvCreate返回-1。

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

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

编辑#2:我认为我提出的问题不是很好,但这是由于我假设重新启动IIS会起作用。现在,我只需要知道为什么它不起作用。在Google搜索类似问题时,我只遇到了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:今天,我们部门可以在此为我们的部门提供一台Intranet服务器。我将所需的dll添加到Bin文件夹中,并且一切正常,而无需重新启动IIS。我不问我将在此服务器上尝试其他测试,以查看是否可以复制该问题

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

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

最佳答案

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

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

关于asp.net - ASP.NET bin目录中的Oracle oci.dll无法删除/不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2142877/

10-12 16:56
查看更多