2011-02-08 69 views
0

這是糾結的。經典ASP,Cookies和VB.NET COM +對象

我已經交出了一個用傳統的ASP編寫的網站,有很多幕後的東西在VB6 COM +對象中通過Server.ObjectCreate()實例化從ASP頁面調用。對於這個化身,VB6例程已經轉換爲VB.NET,只需運行Visual Studio 2003轉換器工具,然後將該解決方案文件升級到VS 2008.因此,有一千個和一個可能的錯誤來源。

一說是給我找麻煩了VB6模塊通過以下形式的線清除一堆響應餅乾:

ASPResponse.Cookies("SysUserCode") = "" 

凡ASPResponse被定義爲:

Private ASPResponse As ASPTypeLibrary.Response 

,並設置通過對象激活:

Set ASPResponse = objContext("Response") 

在這個mod的VB.NET轉換ULE,這些線路成爲

ASPResponse = ContextUtil.GetNamedProperty("Response") 

ASPResponse.Cookies("SysUserCode")() = "" 

(注意額外的對括號。不是一個VB的人,我不確定語法的意思。)

好的,這裏的問題是:當這個代碼在我的機器上執行時,該行給出了VB錯誤13,錯誤描述爲「指定的轉換無效」。咦?什麼演員?

順便說一句,這個模塊在同事機器上運行良好,他看不到我的機器和他的相關組件的配置有任何不同。

我完全不知所措。谷歌搜索給了我一堆關於VB.NET cookie的東西,或者VB.NET的COM組件,但是與傳統的ASP cookie沒有任何關係。

+0

我們都在IIS上運行。 – 2011-02-08 22:45:00

+0

進一步調查:訪問ASPResponse的Cookies成員時,看起來「無效的轉換」實際上正在發生。任何訪問ASPResponse.Cookies的任何代碼都會拋出Specified Cast無效的異常。它讓我懷疑配置中是否有什麼問題,以便從ASP頁面傳入的內容即使被命名屬性「Response」訪問,實際上也不是ASPTypeLibrary.Response對象。只是猜測。仍然徹底困惑。 – 2011-02-08 23:45:31

回答

1

是...

Private ASPResponse As ASPTypeLibrary.Response 
Set ASPResponse = objContext("Response") 

... VB.NET轉換?如果是這樣,您需要明確投入objContext("Response")ASPTypeLibrary.Response對象中。如果Option Strict打開,這尤其適用。例如

ASPResponse = CType(objContext("Response"), ASPTypeLibary.Response) 

此外,設置語句在VB.NET支持。

0

這可能與COM組件主機的激活方式有關。我讀了另一篇文章([Klaus H. Probst])1,指出爲了訪問Response元素,必須將COM組件作爲庫(與Server相對)激活,以便它在ASP進程中運行空間。所以我試着將組件的託管應用程序的激活類型更改爲庫,重置和重建幾次,現在我可以訪問Response的Cookie元素。但是,我的同事仍然將主機應用程序作爲服務器運行,並且沒有問題。