2010-03-23 128 views
5

幾個月前,我的一位同事在使用XCOPY的服務器上安裝ODAC 11.106.21,然後開發了許多使用此客戶端的應用程序(沒有問題)生產Windows服務器)。在同一臺服務器上有兩個ODP.NET(ODAC)版本

過去一週,我開發了一個ODAC 11.1.07.20下的應用程序。當我讓他在不同的文件夾中使用XCOPY安裝這些新的ODAC版本,然後將我的應用程序包含在測試服務器中時,他回答我應該使用ODAC 11.106.21,因爲他可能會在他的應用程序中遇到麻煩。

所以我想知道:

1)如果是真的有可能在一臺服務器的兩個不同版本的ODAC。

2)如果答案是肯定的,我怎樣才能確保我的同事不會遇到他的申請問題?

3)如果答案是肯定的,是否需要在服務器中進行某種配置?

謝謝!

回答

9

您可以在同一臺計算機上擁有多個ODAC版本,但要注意哪些版本將由每個應用程序使用需要注意幾件事情。這實際上適用於所有組件。

  • 在Visual Studio中,如果設置特定版本=真上Oracle.DataAccess.dll,那麼該應用程序將不使用其他任何版本,並且必須能夠找到它始建反對版本。
  • 無論您是將DLL部署到應用程序還是希望它位於特定位置或GAC中。
  • 有一個特定的搜索順序用於查找依賴的DLL,它涉及很多,所以請閱讀this MSDN topic

簡短的回答是,有兩種簡單的方法,以確保您的應用程序使用你想它Oracle.DataAccess.dll的確切版本(這種方法適用於大多數情況下,其他的都是默認值):

  1. 將特定版本設置爲True;
  2. 與您的應用程序一起部署DLL,並讓它駐留在應用程序目錄中,或者確保該DLL位於GAC中。

在特定情況下,你的同事可能有一個有效的擔憂:如果當前安裝的應用程序他從海關總署獲得Oracle.DataAccess.dll,他並沒有具體的版本設置爲True,則當你安裝新的ODAC,他的應用程序將開始使用它(我假設新的Oracle.DataAccess.dll也將安裝在GAC中),

+1

我通過想象「服務器」,他的意思安裝,使ASP.NET應用程序可以使用客戶端庫訪問Oracle IIS Windows服務器。 – 2011-03-09 20:50:44

+0

@IgbyLargeman:很好。還有一個問題。 64位客戶端,將兩個平臺版本4.112.2部署到GAC。新的應用程序使用4.112.3爲EF功能,這樣的想法是'bin'部署它,勝過了奧爾德GAC副本。 Visual Studio只複製本地的32位。接下來的想法是用4.112.3的64位版本覆蓋文件。它給了我同樣的錯誤,就好像庫仍然不在倉內,就像它仍在使用舊的GAC 64庫一樣。任何細節或建議? GAC是否可以部署所有4個庫(4.112.2 32/64和4.112.3 32/64)?謝謝 – 2012-11-27 20:43:11

4

這裏的問題不是.NET dll,而是非託管dll。

我試圖在一臺服務器上運行兩個ASP.NET應用程序。一個使用ODP.NET 9.x,而另一個使用最新的ODP.NET。我使用xcopy部署了最新的ODP.NET,併爲新的ODP添加了PATH環境變量的路徑。現在舊的應用程序不起作用(可能會嘗試使用新的dll)。當我從PATH變量中刪除路徑時,新的應用程序不起作用。我找到了讓它在Oracle頁面上的一臺服務器上工作的方式,但這種方式無效。也許是因爲我沒有安裝最新的ODP.NET,但只是xcopied它。我將不得不嘗試。

Oracle說: 鏈接:http://www.oracle.com/technology/tech/windows/odpnet/faq.html 許多Oracle應用程序在Microsoft Internet信息服務(IIS)上運行。以前,IIS是單個進程應用程序,無法爲使用相同IIS實例的每個正在運行的Web應用程序分配不同的系統路徑。使用Windows Server 2003上的IIS 6,IIS支持同一實例的多個進程。由於每個應用程序都有自己的IIS進程,因此可以爲每個Web應用程序分配一個具有自己的Oracle Home的不同System Path目錄。

微軟文檔提供了有關IIS工作進程隔離和應用程序池的信息。

要設置在同一IIS服務器上同時運行多個活動Oracle主: 1)運行IIS 6的Windows Server 2003 2)工作進程隔離模式下的Oracle客戶端的一個版本部署到一個應用程序池和第二個版本到另一個應用程序池例如,您可以讓一個應用程序池使用Oracle Client 9.2.0.2和ODP.NET 9.2.0.2。另一個應用程序池可以使用Oracle Client 9.2.0.4和ODP.NET 9.2.0.4。您將無法在同一個應用程序池中使用兩個活動的Oracle主目錄。每個活動的Oracle Home必須位於不同的池中。 3)設置DLL的目錄每個工作進程使用相應的Oracle home客戶端目錄。要做到這一點,每一個ASP.NET應用程序中,在應用程序生命週期的早期調用SetDllDirectory會(目錄名)被稱爲任何Oracle的DLL之前。 SetDllDirectory輸入變量是使用的ODP.NET版本的Oracle Home bin目錄。注意:SetDllDirectory是一個非託管調用。

相關問題