簡體   English   中英

不能從ASP Classic使用.NET COM +對象

[英].NET COM+ Object can't be used from ASP Classic

TL; DR :為什么會成功從.NET激活COM +組件,但無法從ASP加載?

我的情況:

  • 我已經使用C#/。NET(框架4.0)創建了COM +對象。

  • 我正在使用Visual Studio Installer項目將其部署到服務器,該項目既將DLL安裝到GAC,又將其注冊到COM。

  • 瀏覽C:\\Windows\\Microsoft.NET\\assembly\\GAC_MSIL ,我可以成功找到已注冊的DLL。

  • 查看Component Services加載項,我可以創建一個應用程序並添加我已注冊的組件。 請注意,名稱是不同的(在DLL /命名空間和ProgId之間),這確實使我確信這兩種情況均正確發生。

但是 ,我試圖從ASP Classic創建此COM的新實例。 這意味着程序中只有一行調用了CreateObject("PROGID")

我已經做了以下工作:

  • 我已經用單行CreateObject("PROGID")創建了一個VBS文件,並對其進行了調用。 它也會失敗,因此問題不僅限於ASP。
  • 我使用了Powershell 2.0(計算機上唯一可用的一個),並將其稱為New-Object -ComObject "PROGID" ,它也失敗了。
  • 我已經將LinqPad復制到計算機上,並使用了Type.GetTypeFromProgIDActivator.CreateInstance 我成功調用了該實例。

該錯誤似乎很常見,為80070002。這表明COM無法找到程序集文件。 檢查注冊表后,我可以看到COM記錄的程序集名稱(FQ程序集名稱)確實與我安裝的程序集相對應。 運行時是新的CLR(v4.0.30319),並且類名也正確。

.NET可以實例化COM對象而沒有任何問題,而VB6 / ASP正在中止,這一事實使我感到完全困惑

更糟糕的是,DLL已於上周成功部署,而我正在安裝新版本,因此我應該會遇到麻煩。

在ASP和.NET之間加載COM的方式有什么不同,可以導致這種情況? 我在想什么:

  • 必須設置和沒有設置的任何類型的權限。
  • 找到了從.NET運行的任何.NET DLL的依賴關系,但沒有從VBS運行的依賴關系。
  • 對於ASP / VBS,核心運行時版本可能會很棒。

最后一項應該是正確的,因為我剛剛在上周成功完成了此操作,並且我沒有更改運行時的任何內容。

看來這似乎不是一個難以捉摸的問題。 我仍然會在這里記錄它,因為有些人可能會在完全相同的情況下遇到這個問題,盡管這不太可能。

ASP,VBScript和PowerShell無法看到我應用的更改,並且由於某種原因找不到組件(80070002)的原因是,必須進行IIS重置或服務器的完整關閉/重新啟動周期


是什么使我這個方案既服務器管理員忘記執行重置的事實-這是我沒有考慮-而事實上,.NET 獲得COM實例。

我不知道能解釋這種情況的細節-也許.NET尚未掩蓋該程序集,而運行COM的任何程序(是的,我也不知道,對不起)確實做到了。 當然,正在發生某種影響。

重新啟動服務器即可完全解決問題。

最后一點-僅關閉Component Services上的應用程序還不夠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM