2017-04-14 125 views
0

中的自定義.net程序集我一直在爲此工作了幾天,並取得了進展,但它仍然不能按我需要的方式工作。經典的ASP-錯誤0177:80004003

首先,這個項目將採用經典的asp(vbscript)編寫並轉換爲.NET框架的現有大型站點(超過至少200多個文件的100,000多行代碼)。

現有的代碼大部分都使用VBScript類,我的計劃是模擬十幾個已經定義到.NET程序集中的類,它們都是新的.NET版本和現有的經典版本ASP頁面可以使用 - 通過COM +。

我已經做了第一類定義,在.NET中複製,它在我的Test.ashx頁面上的開發服務器(當我瀏覽頁面時,我得到預期的輸出)工作。但是我從調用set obj = server.CreateObject("MyLibrary.MyClass")的行上的Test.asp頁面Server object error 'ASP 0177 : 80004003'收到一個錯誤調用它。

我已經通過regasm註冊的自定義DLL這樣regasm "C:\inetpub\siteroot\bin\MyLibrary.dll" /tlb /codebase,它似乎正常工作(與定義的方法預計庫出現在服務器的組件服務,一切似乎罰款。

我的直覺告訴我,它是一個32位/ 64位問題或權限問題,我已經嘗試了許多不同的事情,這些日子太多無法重新計數,但任何建議將不勝感激

注意:

  • 服務器運行Windows Server 2012 R2
  • 我使用PowerShell將自定義dll添加到GAC。
  • 我正在使用regasm的32位版本。我嘗試了64位版本,但是當這樣做時,雙方(.NET和Classic)都會出錯。
  • 該網站使用的IIS應用程序池啓用了32位,顯然必須保持這種方式,因爲該站點使用了其他第三方COM對象。
  • ComClass項目的屬性
    • 編譯:註冊COM互操作被選中。目標CPU是「任何CPU」
    • 應用:目標框架設置爲.NET框架4.5
    • 應用:設置爲類庫
    • 應用應用型,裝配信息:請組裝COM可見檢查
  • 我添加在主站點項目由項目ComClass編譯MyLibrary.dll一個參考

的.vb文件的該第一類的頂部被如下

Imports System 
Imports System.Web 
Imports System.Web.HttpContext 
Imports System.String 
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Configuration 
Imports System.Runtime.InteropServices 
Imports System.EnterpriseServices 

<Assembly: ApplicationName("MyLibrary")> 
<Assembly: ApplicationActivation(ActivationOption.Server)> 
<Assembly: ApplicationAccessControl(False, AccessChecksLevel:=AccessChecksLevelOption.ApplicationComponent)> 

<ComClass(MyClass.ClassId, MyClass.InterfaceId, MyClass.EventsId), ProgId("MyLibrary.MyClass")> 
Public Class MyClass 
    Inherits ServicedComponent 
    [GUIDS] 
    [subs and functions ... ] 
+0

我終於找到了一個asp錯誤代碼的參考列表,它說80004003是一個「無效的指針」,它表明名稱沒有正確設置。 –

+0

BTW:在Windows腳本宿主中運行.vbs文件時出現同樣的錯誤。 64位版本提供無效指針錯誤。 32位版本提供了無法創建ActiveX對象。 –

+0

我發現的其他東西是組件服務管理單元,當瀏覽自定義類庫應用程序並查看包含的「組件」時,只列出了一個類。構建DLL的項目實際上有兩個類(在VS中,我可以使用MyLibrary.MyClass或MyLibrary.ComClass) - 但在regasm完成後,只有MyClass顯示在組件服務管理單元中。 –

回答

0

我終於搞定了......我試過的所有不同的東西顯然是阻止我看到我在進一步的嘗試中所做的任何改變。我這樣說是因爲今天我試着重新開始 - 我進入服務器並清理了我的程序集名稱的所有事件的註冊表,並且我從GAC中刪除了它,在我能想到的任何地方。

然後在我的本地計算機上,我使用Visual Studio「發佈」引用自定義DLL的網站。它立即在我的Test.ashx頁面上工作。所以然後我像以前一樣使用regasm(64位)註冊DLL,並且它也在ASP端工作了!

我沒有收到任何建議,但感謝任何給了我這種想法的人。