2010-01-26 39 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.)重新啓動機器。