2010-08-12 79 views
3

我有一箇舊的.net 2005網站,它有一些asp頁面,並且存在訪問.net dll的對象引用問題。維護任務傳給我,原始開發人員無處可尋:(我開始在.Net已經所以我不真正掌握處理這個DLL地獄類問題。從傳統ASP頁面消耗.NET程序集

關於下面的箭頭是哪裏我encourtering的 「(0x80131500) 對象引用不設置到對象的實例。」

Set objCommon = Server.CreateObject("Wrapper.CommonFunctions") 
    Dim machineBuilding 
--->>> If objCommon.IsMachineAccount(strLogin, machineBuilding) Then 

我已經按照下列步驟操作:

  1. regasm/TBL /代碼庫mycomdll.dll
  2. GACUTIL /我mycomdll.dll
  3. 的mycomdll.dll複製到System32目錄
  4. 從控制檯執行issreset
  5. 如果您的DLL創建框架2.0中創建一個「dllhost.exe.config」文件system32目錄下,並把這樣的:

<?xml version="1.0"?> <configuration> <startup> <supportedRuntime version="v2.0.50727"/> <requiredRuntime version="v2.0.50727"/> </startup> </configuration>

6 .-重新啓動IIS與issreset命令

而且這些O nes:

  1. 項目屬性 a。在\應用程序\程序集信息 i。選中「使組件可見」。 b。在構建 我。選中「註冊Com Interop」
  2. 請勿簽名。
  3. 確保IUSR具有文件的完全權限。
  4. 通過iisreset重新啓動IIS以刷新所有緩存。

而且仍然不能成功運行該應用程序。還有什麼想法要檢查或做什麼?謝謝!

埃米爾

+0

我有一個經典的ASP應用程序,它通過COM包裝器消耗了一個.NET程序集,而傳統的ASP代碼與您的類似。您是否驗證過strLogin和machineBuilding已初始化?你是否從另一個客戶端執行objCommon.IsMachineAccount來驗證調用本身沒有拋出錯誤? – Mayo 2010-08-12 12:35:28

+0

謝謝梅奧。我嘗試附加到dllhost,並能夠通過asp代碼進行調試,是的,strLogin具有我的網絡ID值;機器大廈將從通話中收到價值。 因爲我們在生產服務器上有一個工作版本,所以我不認爲asp代碼有問題。但是,我需要讓我的本地源代碼正常工作,然後才能發出更改請求。 – Emirage 2010-08-13 01:31:10

回答

0

問題是應用程序正在查找包含數據庫主機名的文件。

0

我有一個類似於你的解決方案,但它已經很久沒有。我仍然有一些信息,但我注意到,我的regasm聲明是不同的。

regasm mycomdll.dll /tlb :mycomdll.tlb 

你引用tbl代替tlb - 也許這就是問題所在?

我也認爲你應該再次檢查參數值,然後通過一個快速和骯髒的.NET客戶端調用這些參數值的方法來查看該方法是否會拋出錯誤。

我也想確認我的經典ASP代碼匹配你的...

set obj = server.CreateObject("mycomdll.myclass") 
... 
call obj.method(false) 
... 
myvar = obj.method2(param1, param2, param3) 
2

的HRESULT值是非常相關的。請注意,0x80131500,13中的「設施代碼」表示錯誤的來源是託管代碼。你已經有了1500的友好翻譯。

換句話說,託管代碼拋出了一個異常,並沒有處理。當然這並不罕見,託管代碼通常會拋出異常。尤其是NullReferenceException,您觸發的那個。由於您在非託管進程中運行託管代碼,因此調試並不那麼容易。不太清楚IIS的正確過程,通常使用Tools + Attach to Process來完成。解決這個問題的最好方法是隔離代碼,編寫一些單元測試。

除此之外,MachineBuilding變量使我成爲NRE的一個很好的候選人。你沒有初始化它。

順便說一句:它與註冊無關。這產生了一種非常不同的錯誤。

+0

對我而言,從來沒有發現HRESULT中的信息可以被細分以隔離錯誤(將特定錯誤映射到特定問題)。 +1只是爲了向我展示新的東西。此外,如果您有任何鏈接可以提供更多關於HRESULT解釋的信息,那就太棒了。 – Mayo 2010-08-13 13:35:17

+0

發現的信息在http://blogs.msdn.com/b/heaths/archive/2005/07/21/441391.aspx。該設施(比特8-15等於19)是FACILITY_URT,後來我發現這意味着通用運行時間,這是CLR的早期名稱。非常有趣的東西 - 我喜歡學習新事物。 :) – Mayo 2010-08-13 13:46:37

+0

@Mayo:在SDK頭文件WinError.h中查看大量關於此的詳細信息。 c:\ program files \ microsoft sdks \ windows \ v6.0a \ include for vs2008。 – 2010-08-13 14:11:33