Я получаю сообщение об ошибке, используя объект MsXml.ServerXmlHttp из JScript в классическом ASP, когда вызов асинхронный. Сообщение об ошибке «Не удается найти класс окна»
Среда: Windows Server 2003 SP2; IIS v6; Классический ASP; JScript
Когда ServerXmlHttp.open вызывается с asynch = true, ошибка возникает в методе отправки.
Когда ServerXmlHttp.open вызывается с asynch = false, ошибка не возникает
Код работает в тестовой среде, в которой есть все те же версии основных продуктов (хотя он не был идентичен производственной среде)
В тестовой среде код работает как с синхронным, так и с асинхронным открытием
Ошибка возникает при использовании
MSXML2.ServerXMLHTTP.6.0
MSXML2.ServerXMLHTTP.4.0
MSXML2.ServerXMLHTTP.2.0
Код завершается сбоем одинаково независимо от URL: google.com и stackoverflow.com завершаются сбоем так же, как и сама страница, которую мне нужно вызвать
В тестовой среде google.com, stackoverflow.com и страница, которую мне нужно назвать, все работают.
Ошибка возникает независимо от того, использую ли я GET или POST
Ошибка возникает независимо от заголовков.
Ошибка возникает независимо от того, является ли протокол протоколом HTTP или HTTPS.
Ошибка возникает очень быстро - почти наверняка на стороне клиента.
Ошибка НЕ возникает при синхронном соединении.
Я переустановил MSXML6.msi
Я использовал "proxycfg.exe -d", чтобы настроить стек Интернета, чтобы НЕ использовать прокси. (http://support.microsoft.com/kb/289481/)
Вот примерный код (я упростил его, потому что не думаю, что код - это проблема):
var xmlServerHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0");
xmlServerHttp.open("POST", "http://some-url.com", true); //true causes error
xmlServerHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlServerHttp.send("some=values&some=othervalues"); //error happens here
var responseXML;
var stateok = false;
var numOfWaits = 10;
do {
if (xmlServerHttp.readyState == READYSTATE_COMPLETED) {
responseXML = String(xmlServerHttp.responseText);
stateok = true;
}
else {
xmlServerHttp.waitForResponse(1);
}
} while (!stateok && --numOfWaits > 0);
Этот код выдает ошибку: «не удается найти класс окна» при вызове xmlServerHttp.send.
Это то, что MSDN говорит об ошибке (http://msdn.microsoft.com/en-us/library/ms820745.aspx)
Приложение пыталось использовать окно
класс, который не был
класс для конкретного приложения зарегистрирован
с системой или одним из
предопределенные классы управления (такие как
КНОПКА, СПИСОК, СКРОЛБАР и т. Д.
на).
Эта статья базы знаний (http://support.microsoft.com/kb/303326) содержит следующую специфическую для асинхронных заметок:
ServerXMLHTTP не использует Urlmon.dll.
Тем не менее, когда вы используете ServerXMLHTTP в
асинхронный режим, вам также нужно это
насос сообщений, потому что парсер срабатывает
событие, отправив сообщения обратно
нить.
Urlmon.dll существует в папке system32 сервера. Однако он не существует на тестовом сервере, где код работает в асинхронном режиме: S. (Я не устанавливал явно urlmon.dll - он был там, когда я его искал.)
Я предполагаю, что на сервере возникли проблемы с настройкой или установкой. Возможно, отсутствует зависимость MSXML. Но я не знаю, как расследовать дальше. У кого-нибудь есть предложения?
В частности, кто-нибудь может сказать мне:
Каковы зависимости MsXml.ServerXmlHttp?
или как я могу их понять.
Что означает сообщение об ошибке «не удается найти класс окна» в этом контексте?
Существуют ли какие-либо настройки или конфигурации, относящиеся к асинхронным вызовам HTTP?
Спасибо, что прочитали это далеко.