【发布时间】:2011-06-23 17:59:52
【问题描述】:
这很纠结。
我收到了一个用经典 ASP 编写的网站,其中有许多在 VB6 COM+ 对象中通过 Server.ObjectCreate() 实例从 ASP 页面调用的幕后工作。对于这个化身,只需在 VB6 例程上运行 Visual Studio 2003 转换器工具,然后将该解决方案文件升级到 VS 2008,即可将 VB6 例程转换为 VB.NET。因此,可能存在一千零一个错误来源。
给我带来麻烦的一个 VB6 模块通过以下形式的行清除了一堆响应 cookie:
ASPResponse.Cookies("SysUserCode") = ""
其中 ASPResponse 定义为:
Private ASPResponse As ASPTypeLibrary.Response
并由以下人员设置对象激活:
Set ASPResponse = objContext("Response")
在这个模块的VB.NET转换中,那些行变成了
ASPResponse = ContextUtil.GetNamedProperty("Response")
和
ASPResponse.Cookies("SysUserCode")() = ""
(请注意额外的一对括号。我不是一个 VB 人,我不确定该语法是什么意思。)
好的,问题来了:当这段代码在我的机器上执行时,该行给出了一个 VB 错误 13,Error.Description 是“指定的转换无效”。嗯?什么演员?
顺便说一句,这个模块在同事的机器上运行良好,他看不出我机器的配置和他的相关组件有什么不同。
我在这里完全不知所措。谷歌搜索给了我一堆关于 VB.NET cookie 或 VB.NET 的 COM 组件的资料,但没有与经典的 ASP cookie 相关。
【问题讨论】:
-
进一步调查:似乎在访问 ASPResponse 的 Cookies 成员时实际上发生了“无效强制转换”。任何访问 ASPResponse.Cookies 的代码以及除此之外的任何代码都会引发 Specified Cast not valid 异常。这让我想知道配置中是否有问题,因此从 ASP 页面传入的内容,即使它由命名属性“Response”访问,实际上也不是 ASPTypeLibrary.Response 对象。只是推测。还是一头雾水。
-
将 VB6 迁移到 VB.Net 可以是quite hard,尤其是如果您不是 VB 专家!我推荐一些background reading。
标签: vb.net com cookies asp-classic vb6-migration