2012-05-29 98 views
6

我們創建了一個.Net程序集並使其可以作爲COM對象訪問。當我們試圖在ASP頁面中公開此對象的任何方法時,我們會收到錯誤「80131509」。當我們實例化對象時,我們沒有收到任何錯誤。即Server.CreateObject正在傳遞。錯誤'80131509'在ASP頁面

這在我們的開發環境中工作正常,但我們在UAT環境中得到這個錯誤。除UAT更安全外,開發和UAT幾乎相同。我嘗試了所有可能的方式,但沒有運氣。我正在處理這個問題過去4天,任何幫助將不勝感激。

我懷疑可能會暴露該dll的IIS 7的權限問題。但不知道它可能是什麼?我們也給予了IUSR全部權利。

代碼:

set obj = Server.CreateObject("DataAccess") 
dim rs 
set rs=obj.GetLocations("All") <--- **Here i am getting an error.** 
+1

是否在UAT服務器上註冊了.dll,即使用'regsvr32'? – mellamokb

+0

對不起,我忘了提及那部分。是的,使用Regasm在UAT服務器上註冊了dll。 – Bugreport

+0

你註冊了嗎?NET程序集的32位和64位使用?我不知道經典ASP運行的是32位還是64位進程(推測在w3wp.exe下)。請注意,有時對CreateObject的調用可能會自動失敗,只有在嘗試使用該對象時纔會出現錯誤。我建議你嘗試實例化一個Microsoft開發的COM可見的.NET對象,以查看系統是否在原理上工作,然後再查明你的特定實現有什麼問題。 – Dai

回答

2

我們有一些COM DLL的在我的工作,我們經常會遇到,我們與regasm註冊DLL和DLL不能正常工作的問題。它適用於其他現場環境,但出於某種原因,在這種情況下它不起作用。 Com dlls很善變。有時我們會註冊它,取消註冊,重新註冊並重新啓動。有時他們神祕地開始工作而不是其他時間。

還有更多的事情可能會出錯。

請確保在dll所在的文件夾和dll本身上設置了正確的權限。還要確保存在任何依賴的dll,並且具有正確的權限。確保dll需要訪問的所有內容也具有正確的權限。

如果失敗打開註冊表編輯器。搜索與com對象關聯的guid。有時你會發現註冊表的路徑都混在一起。清除對com對象的任何引用,重新引導並重新註冊它。

我也看到在引發問題的構造函數中拋出異常。 com對象啓動時會爆炸。在我們的一個對象中添加了一個方法,用於在發生異常時發送電子郵件。

在一種情況下,我們有一箇舊的COM對象,它不再與我們正在運行的Windows版本兼容。如果您升級了服務器,則可能是問題所在。在我們的例子中,我們編寫了自己的組件來替換破舊的舊組件。

還要確保如果COM對象是強類型的,你使用「regasm/TLB /代碼庫fickle_com_object.dll」

總之有幾件事情,導致COM對象到不行:

在註冊表中
  1. 多條路徑上的文件夾
  2. 在創建時崩潰
  3. 錯誤的安全權限

也許這些事情之一將解決您的問題。我知道有時候有多困難。祝你好運!