2010-01-26 79 views
5

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

+0

ASP.NET将加载Dll时,它的PInvoked某处,Dll将保持加载,直到ASP.NET进程被回收/重新启动。 – 2010-02-08 20:00:03

回答

1

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

至于甲骨文,我已经通过电子邮件发送了一些东西来尝试......当我们找到解决方案时,我们应该更新这个SO页面。

+0

谢谢,我会尝试尝试这些文件。不幸的是,我不能直接控制服务器,所以这是要求完成这些事情的问题。即使如此,过程只能在下午5点30分之后停止。 噢,关于为什么MS Oracle API停止工作的任何想法? – Bob 2010-01-28 16:31:40

+0

这些oracle api的总是有点棘手,我发现...这很难说。 – Chris 2010-01-28 23:03:41

2

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

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

+0

我以为'万维网发布服务'只是IIS的同义词吗? – Chris 2010-01-28 03:15:47

+0

也许你是对的......我只是肯定,我不得不停止WWW发布服务,当停止IIS不会允许更改文件...值得确认,但为我自己的利益 – davidsleeps 2010-01-28 03:24:06

+0

问这个问题在SU http://serverfault.com/questions/107053/is-stopping-iis-the-same-as-stopping-the-world-wide-web-publishing-service – davidsleeps 2010-01-28 03:28:45

0

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

得到它here

2

一个典型的Oracle经验。

我有同样的问题。解锁器不工作。我试了几次 - 都报告文件没有被锁定,但是报告说他们不能删除它。

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

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

0

有三件事情我知道的,让你删除这和其他文件,这些文件的Oracle数据访问客户端的一部分:

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

2.)关闭Visual Studio。

3.)重新启动机器。