2010-07-13 65 views
2

我有一個使用32位dll的ASP.NET「網站」。當我對我們的64位服務器進行XCOPY時,使用此32位dll的頁面會引發異常。我已經爲網站運行的應用池設置了「啓用32位應用程序」爲True,但這沒有幫助。XCOPY /將ASP.NET 3.5網站以x86格式發佈到64位服務器上

我也在嘗試將目標平臺設置爲x86,但網站沒有與Web應用程序不同的選項。

這裏的堆棧跟蹤 -

Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 7/13/2010 5:01:12 PM 
Event time (UTC): 7/13/2010 9:01:12 PM 
Event ID: 9611671ef6b845f39af6b26b89af85e3 
Event sequence: 51 
Event occurrence: 4 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/2/ROOT-1-129235271319338750 
    Trust level: Full 
    Application Virtual Path:/
    Application Path: C:\Site\ 
    Machine name: WWWTEST 

Process information: 
    Process ID: 4020 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\WWWTEST AppPool 

Exception information: 
    Exception type: COMException 
    Exception message: Retrieving the COM class factory for component with CLSID {58968145-CF05-4341-995F-2EE093F6ABA3} failed due to the following error: 80040154. 

Request information: 
    Request URL: http://site/Downloads.aspx 
    Request path: /Downloads.aspx 
    User host address: 192.168.1.101 
    User: 
    Is authenticated: False 
    Authentication Type: 
    Thread account name: WWWTEST\Webtest 

Thread information: 
    Thread ID: 4 
    Thread account name: WWWTEST\Webtest 
    Is impersonating: False 
    Stack trace: at Downloads.Button_Click(Object Sender, DataGridCommandEventArgs E) in C:\Site\Downloads.aspx.vb:line 1034 
    at System.Web.UI.WebControls.DataGrid.OnItemCommand(DataGridCommandEventArgs e) 
    at System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e) 
    at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) 
    at System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e) 
    at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) 
    at System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) 
    at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) 
    at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 
    at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) 
    at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

我做了異常的網上搜索「檢索COM類工廠CLSID {58968145-CF05-4341-995F-2EE093F6ABA3}組件失敗,原因是以下錯誤:80040154.「並啓用了IIS7上的32位模式,但仍然沒有運氣。

任何幫助,非常感謝。

**答案** 我能夠在用戶Kev的幫助下解決了這個問題。這就是我所做的 -

  1. 下載Microsoft開發人員支持OLE文件屬性讀者2.1樣品(KB 224351)從here
  2. 將內容提取到使用WinZip/7-ZIP等,不要運行一個臨時文件夾建立。將文件「Interop.DSOFile.dll」和「dsofile.dll」從提取的位置複製到服務器上的應用程序的bin目錄中。
  3. 打開一個命令提示符具有管理員權限,並導航到bin目錄中的「REGSVR32 dsofile.dll」
  4. 確保應用程序池設置爲啓用32位應用程序的服務器
  5. 類型上。
  6. 重新啓動IIS

非常感謝Kev。對此,我真的非常感激。

+0

拋出什麼異常?你能粘貼一個堆棧跟蹤嗎? – Kev 2010-07-14 01:10:30

+0

Kev,我已經用堆棧跟蹤更新了這個問題。有任何想法嗎? – tempid 2010-07-14 13:00:47

+0

這是第三方組件嗎?如果是這樣的話。我猜是有一個互操作程序集? – Kev 2010-07-14 14:07:40

回答

2

這聽起來像COM組件未在服務器上註冊。你需要的組件(dsofile.dll)複製到服務器並運行regsvr32.exe進行註冊:

regsvr32 dsofile.dll

您還需要確保該帳戶,該網站運行在具有讀取訪問此文件或其包含文件夾。

這可能也值得嘗試構建您的項目並將構建更改爲目標x86而不是任何CPU,儘管我懷疑這是問題所在。

+0

我試圖在Web服務器上註冊COM,但它錯誤地指出「該模塊已找到,但未找到DllRegister Server入口點」。 由於這是一個網站項目,因此無法將目標設置爲x86。 有沒有其他想法? – tempid 2010-07-14 14:55:26

+0

@tempid - 讓我看看你使用的命令行。 – Kev 2010-07-14 16:15:17

+0

Here you go - regsvr32/i「c:\ Interop.DSOFile.Dll」 – tempid 2010-07-14 16:18:15

-1

您可能需要設置應用程序運行的應用程序池以x86身份運行。

+0

這與在應用程序池中啓用「啓用32位應用程序」不同? – tempid 2010-07-13 19:51:14

+0

@tempid - 沒有這樣的設置。你做了正確的事情設置「啓用32位應用程序」爲true。 – Kev 2010-07-14 01:09:48