2009-12-10 27 views
3

我的開發機器是Vista x64。部署使用Oracle.DataAccess的Web服務器導致各種彙編錯誤

我正在使用WCF Web服務來構建與Oracle 10g數據庫接口的Web服務。

當開發開始時,我無法使用VS2008的內置WCF測試工具[WCFTestClient],當您按F5 [Go]時,在32位Oracle.DataAccess.dll上啓動,因爲我得到System.BadImageFormatException Oracle對象。所以在我的開發環境中,我切換到了ODP.NET 64位版本的引用程序集,這很好。

我可以部署到我的本地IIS [7],但只有當我使用32位Oracle.DataAccess.dll。

我想部署到安裝了.NET 3.5 SP1的Win2003 [IIS 6],並安裝了Oracle 10g數據庫。此服務器上的其他Web應用程序成功使用Oracle連接。

如果我從web.config文件中刪除對Oracle.DataAccess的所有引用,並確保在我的bin /文件夾中沒有Oracle.DataAccess.dll,我可以打開默認的服務元數據頁面[s],但通過SOAP客戶端調用服務會導致錯誤:

「無法加載文件或程序集'Oracle.DataAccess,Version = 10.2.0.100,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其某個依賴項。系統找不到指定的文件。「

但是,如果我把Oracle.DataAccess.dll的副本,我斌/文件夾中,我得到:

「無法加載文件或程序集Oracle.DataAccess'或它的一個依賴的設程序集的清單定義與程序集引用不匹配(來自HRESULT的異常:0x80131040)「

當試圖在Web瀏覽器中加載.svc頁面時。

如果我添加集的引用我的web.config,我得到一個配置錯誤:「無法加載文件或程序XXX」

我想我尋求幫助瞭解程序集緩存,有人誰有ODP.net的經驗,誰可以幫助我導航這個詭territory的領土,併成功部署這項服務。

回答

2

好吧我設法[部分]解決它,但我仍然需要知道爲什麼這導致了錯誤。

我在本地機器上安裝了ODP.NET 32位,位於64位安裝的單獨文件夾中。我將VS項目中的程序集引用改爲位於odp.net/bin/2.x/文件夾中的Oracle.DataAccess.dll。

現在,SOAP消息不再引發錯誤。

現在的問題是:爲什麼我的開發環境中的dll選擇驅動必須在生產環境中使用的dll?我希望能夠在64位上開發並部署到32位服務器,而無需在每次我想部署時更改我的引用。

9

最近,我遇到了類似的問題,發現System.BadImageFormatException被從指定的任何/ 64的目標平臺項目引用Oracle.DataAccess的32位版本引起的。將項目設置爲目標x86並配置IIS 7以啓用32位應用程序後(右鍵單擊應用程序池 - >高級設置...將「啓用32位應用程序」設置爲true),一切似乎都按預期工作。此外,here是一篇文章,解釋如何獲得32個和64位版本在不同的工作進程運行,另一here的鏈接解釋如何讓32個應用程序使用IIS 6

+0

也請點擊此處:http://stackoverflow.com/a/10557694/114029 – 2013-08-20 18:33:57

1

我公司的運行在64位運行到同樣的問題,我們必須解決使用32位DLL缺乏更好的解決方案。

從我們所知道的,Oracle的64位dll專爲64位構建。與使用「Any」的dll構建不同,它不包含32位目標代碼。這很好,除了32bit dll似乎無法加載的所有這個額外的問題,除非該項目專爲32位構建。

我們已經嘗試了64/32位dll和項目設置的幾十次迭代,除了32位dll/32bit項目,我們已經完全無法獲得任何工作。最後,我們不得不推進這個項目,並停止投入時間來進行無盡的鬥爭。

如果可能,我誠實的建議是評估其他數據庫解決方案。我與甲骨文的經驗已經非常痛苦

否則,只需構建在32位。它不應該導致任何問題。

相關問題