Классическая отладка ASP и COM

#iis #com #asp-classic #activex

#iis #com #asp-классический #activex

Вопрос:

Я унаследовал классический проект ASP и компонент VB6 (ActiveX .dll), который к нему прилагается.

Я хотел бы иметь возможность отлаживать этот компонент, запустив его локально на моем компьютере.

У меня ноутбук с Windows 7 Home Premium (64-разрядная версия).

Я настроил IIS 7.5 локально (на производстве работает IIS5), однако, когда я просматриваю сайт (локально), Я получаю:

 Active Server Pages error '00000000'
Create object failed
?
An error occured while create object 'OBJECTNAME'
Microsoft VBScript runtime error '800a01ae'
Class does't support Automation: 'ID of object in global.asa
  

Я не специалист по серверам, поэтому у меня нет большого опыта настройки IIS. Я хочу настроить этот проект локально, чтобы я мог пошагово просматривать COM-объект с помощью отладчика.

Что мне нужно сделать, чтобы запустить это?

К вашему сведению :

В global.asa у меня есть следующее:

 <object runat="server" scope="session" id="ABC" progid="prjABC.clsABC"></object>
  

Затем в ASP у меня есть следующий вызов:

 if ABC.propertyName = True then
  

В этой строке происходит сбой.

Комментарии:

1. Убедитесь, что этот COM-компонент зарегистрирован на вашем компьютере для разработки.

Ответ №1:

Похоже, что пул приложений, в котором работает ваш сайт, настроен на 64-разрядный режим (по умолчанию).

Переключите его на 32-разрядный, щелкнув правой кнопкой мыши на пуле и выбрав Advanced Settings :

введите описание изображения здесь

Установите Enable 32-Bit Applications на True .

Возможно, вы также захотите настроить режим управляемого конвейера и установить для него значение Classic, не все классические приложения ASP работают в интегрированном режиме.

Комментарии:

1. Это исправило проблему. Я переключил обе настройки в соответствии с вашим предложением, поэтому я не знаю, какая из них на самом деле это сделала или обе сделали, но сайт теперь запущен на моем локальном компьютере. Большое вам спасибо за эту информацию. Я пару дней бился головой об стену над этим. Еще раз спасибо.

Ответ №2:

Если все, что вам нужно сделать, это отладить компонент, возможно, будет проще написать COM-приложение, которое использует этот COM-компонент. Особенно если у вас есть исходный код компонента, вы можете запустить тестовое приложение из вашего проекта компонента vb6 в качестве приложения для отладки.

Поскольку это VB6, вам, возможно, придется настроить виртуальную машину XP, чтобы иметь возможность запускать visual studio 6.0 (я никогда не мог заставить 6.0 работать в Windows 7). Либо это, либо обновите компонент до visual studio 2010.

Комментарии:

1. Интересно, что вы упомянули об этом, поскольку я просто думал об этом как об альтернативе, если я не смогу заставить его работать через Интернет.

Ответ №3:

Если вы хотите запускать 32-разрядные компоненты в 64-разрядной среде, вы можете это сделать. Проблема с настройкой IIS на разрешение запуска 32-разрядных компонентов, как описано выше, заключается в том, что в конечном итоге все iis работают под управлением 32-разрядной версии, что, если это веб-сервер, означает, что основное приложение, которое вы запускаете, 32-разрядное, что снижает преимущество 64-разрядной машины в скорости.

Чтобы запустить 32-разрядный компонент в 64-разрядном IIS, необходимо поместить его в службы компонентов. Пуск-> Выполнить-> «comexp.msc» запускает службы компонентов. Затем просто разворачивайте дерево вниз, пока не найдете приложения COM , и создайте новое пустое приложение (со всеми установленными по умолчанию настройками как есть). Затем разверните это приложение и щелкните правой кнопкой мыши на компонентах, а затем «создать»> компонент. Установите новый компонент и выберите библиотеки DLL. Это должно позволить 64-разрядному компоненту использовать только 32-разрядные компоненты.