Классические объекты ASP, Cookies и VB.NET COM + - PullRequest
0 голосов
/ 09 февраля 2011

Это запутано.

Мне был передан веб-сайт, написанный на классическом ASP, с большим количеством закулисных вещей, выполненных в объектах VB6 COM +, вызываемых со страниц ASP через экземпляры Server.ObjectCreate (). Для этого воплощения подпрограммы VB6 были преобразованы в VB.NET, просто запустив на них инструмент конвертации Visual Studio 2003, а затем обновив этот файл решения до VS 2008. Таким образом, существует тысяча и один возможный источник ошибок.

Один из модулей 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 «Указанное приведение недействительно». А? Какой актерский состав?

Между прочим, этот модуль отлично работает на машине коллег, и он не видит никакой разницы в конфигурации моей машины и соответствующих компонентов от его.

Я в полном недоумении. Поиск в Google дал мне кучу материала о файлах cookie VB.NET или COM-компонентах с VB.NET, но ничего общего с классическими файлами cookie ASP.

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Является ли ...

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

... Post VB.NET конвертация?Если это так, вам нужно явно привести objContext("Response") к объекту ASPTypeLibrary.Response.Это особенно относится, если Option Strict включено.например,

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

Кроме того, Set и Пусть операторы не поддерживаются в VB.NET.

0 голосов
/ 11 февраля 2011

Это МОЖЕТ иметь отношение к способу активации хоста COM-компонента. Я прочитал другой пост ([Клаус Х. Пробст]) 1 , в котором указано, что для доступа к элементу Response компонент COM должен быть активирован как библиотека (в отличие от сервера), чтобы он работал в пространстве процесса ASP. Поэтому я попытался изменить тип активации хост-приложения Компонента на библиотеку, сбросить и перестроить несколько раз, и теперь я могу получить доступ к элементу Cookies Ответа. Тем не менее, мой коллега по-прежнему работает в качестве хост-приложения в качестве сервера, и у него нет проблем.

...