经典ASP,Cookies和VB.NET COM +对象

问题描述:

这是纠结的。经典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

是...

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支持。

这可能与COM组件主机的激活方式有关。我读了另一篇文章([Klaus H. Probst])1,指出为了访问Response元素,必须将COM组件作为库(与Server相对)激活,以便它在ASP进程中运行空间。所以我试着将组件的托管应用程序的激活类型更改为库,重置和重建几次,现在我可以访问Response的Cookie元素。但是,我的同事仍然将主机应用程序作为服务器运行,并且没有问题。