#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-разрядные компоненты.