【问题标题】:Classic ASP, Cookies, and VB.NET COM+ objects经典 ASP、Cookie 和 VB.NET COM+ 对象
【发布时间】: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


【解决方案1】:

是……

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

...发布 VB.NET 转换?如果是这样,您需要将objContext("Response") 显式转换为ASPTypeLibrary.Response 对象。如果Option Strict 处于打开状态,这尤其适用。例如

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

另外,SetLet 语句在 VB.NET 中不受支持。

【讨论】:

  • 你是对的,乔治。我只是仔细查看了激活方法,并编辑了上面的内容。设置 ASPResponse 的实际行现在显示在那里。 (ASPResponse = ContextUtil.GetNamedProperty("Response"))
  • Option Strict 可能已关闭,因为代码已从 VB6 迁移
  • @MarkJ 这是一种可能性——尽管看起来永远不会有坏处;)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 2011-08-04
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2016-09-27
    • 2016-04-15
    相关资源
    最近更新 更多