我按照这里的指示:http://splinter.com.au/blog/?p=156试图在不安装Oracle 11g客户端的情况下使用ODP.NET的较新版本。到目前为止,除了重新启动IIS之外,我遵循了一切。ASP.NET bin目录中的Oracle oci.dll无法删除/不起作用
但是,这导致了一些问题,我真的好奇为什么。如果我尝试使用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(奥德赛继续):我确定最初需要oraocci11.dll(C++调用接口DLL)。 NET(或ODP.NET库)甚至可以找到11g客户端DLL,之后oraocci11.dll似乎永远不会再被使用,并且可以被删除。不知道这对我的问题意味着什么,但是因为它增加了知识库,所以我想我会提及它
编辑#5:我添加了mfc71.dll和msvcr71.dll,处理C的2个Windows系统文件/ MFC,到我发现他们需要ODP.NET(或至少,客户端需要)的Bin目录。这至少让事情停留在老熟悉的“客户端不兼容”错误上。我删除了这2个DLL,果然回到上面给出的相同错误。将它们添加回来并不会使这些错误消失,但是,我将不得不重新设置IIS。
ASP.NET将加载Dll时,它的PInvoked某处,Dll将保持加载,直到ASP.NET进程被回收/重新启动。 – 2010-02-08 20:00:03