我按照這裏的指示: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