Ошибка Server.CreateObject в классическом ASP
Я создал ASP.NET DLL с одной функцией, которую мне нужно использовать на странице Classic ASP.
Я использовал приведенный ниже код для создания объекта на классической странице ASP
set PeopleSoft = server.createobject("OPS.PSL")
Я получаю приведенную ниже ошибку при выполнении
Server object error 'ASP 0177 : 80070002'
Server.CreateObject Failed
Я искал в stackru, я увидел какое-то решение. Включив "Сделать сборку видимой для COM" и "Зарегистрироваться для взаимодействия COM".
Пожалуйста, помогите мне выйти из этого вопроса
8 ответов
Сначала вы должны зарегистрировать свою DLL, и, если проблема не устранена, сделайте следующее:
- Найдите и щелкните следующий раздел реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\ FeatureControl\FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701
- Примечание. Если подраздел FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701 не существует, его необходимо создать вручную. Если вы используете 64-разрядную ОС, вам может понадобиться использовать HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\ FeatureControl\FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701
- Щелкните правой кнопкой мыши FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701, выберите пункт Новый, а затем щелкните Значение DWORD
- Введите w3wp.exe в качестве имени новой записи реестра и нажмите клавишу ВВОД.
- Щелкните правой кнопкой мыши w3wp.exe и выберите команду "Изменить".
- В поле "Значение" введите 1 и нажмите кнопку "ОК".
После установки этого раздела реестра, простой перезапуск пула приложений применит изменения. Ваши компоненты.NET COM больше не будут случайным образом переставать работать без реального решения, кроме перетасовки пулов приложений!
У меня только что появилась эта ошибка на сайте, который работал отлично в течение многих лет. Кажется, DLL как-то стала незарегистрированной. Это была неуправляемая DLL, поэтому я смог перерегистрировать ее с помощью regsvr32
:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regsvr32 "C:\path\to\myAssembly.dll"
(Также посмотрите разницу между regasm и regsvr32)
Вы зарегистрировали свой dll с regasm.exe на вашем сервере?
http://msdn.microsoft.com/en-us/library/tzat5yw6%28VS.71%29.aspx
У меня была эта проблема. При регистрации.NET COM-модулей вы должны использовать regasm, и если вы хотите вызывать их из приложений, таких как IIS, вы должны использовать /codebase с этой командой:
regasm yourfilename.dll /codebase
На этом сайте:
Они устраняют проблему с предоставлением доступа на чтение к IUSR на HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones.
Я столкнулся с подобной проблемой, и после долгих исследований я нашел решение, проверьте, работает ли оно для вас. Удаленный сценарий вызывает множество ошибок с различными версиями IE. Если вы передаете управление с одной страницы на другую и создаете оттуда новый объект, вы получите такой вид неспособности создать объектную ошибку.
Пример:
page x.asp--
function1call()
function2call()
further in page x.asp--
function1call(){
var rs_obj = RSGetASPObject("some-object");
----some other things---
frmPost.action = "someplace.asp";
frmPost.submit();
}
function2call(){
var rs_obj = RSGetASPObject("some-object1"); //you wont be able to create
//this object
----some other things---
}
Похоже, что объект remoteScripting не инициируется. Поскольку function1call() вызывает frmPost.submit().
Если вы объедините эти две функции, он начнет работать. IE
page x.asp--
function1call(){
var rs_obj = RSGetASPObject("some-object");
var rs_obj = RSGetASPObject("some-object1");
----some other things---
frmPost.action = "someplace.asp";
frmPost.submit();
}
Есть еще одна причина, по которой вы можете получить ошибку "Server.CreateObject Failed". Видимая DLL-библиотека COM не ведет себя так же, как обычная DLL-библиотека.NET, когда она загружается COM. Вы не можете ожидать, что он загрузит другие библиотеки DLL, которые находятся в том же каталоге, что и ваша DLL, или загружены через менеджер пакетов Nuget. Если вы хотите загрузить другие библиотеки DLL, вы должны зарегистрировать их в глобальном кэше сборок (GAC).
Если сборка не имеет строгого имени, вы не сможете зарегистрировать ее в GAC.
Запустите это из командной строки (замените myassembly.dll на ваш путь сборки):
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe myassembly.dll /codebase