首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServerXMLHTTP错误:找不到窗口类

ServerXMLHTTP错误:找不到窗口类
EN

Stack Overflow用户
提问于 2009-04-07 11:22:00
回答 1查看 2.1K关注 0票数 0

当调用是异步的时,我在经典ASP下使用MsXml.ServerXmlHttp对象从JScript中得到一个错误。错误消息是“找不到窗口类”。

环境是: Windows 2003 SP2;IIS v6;经典ASP;JScript

当调用ServerXmlHttp.open = true时,发送方法上会发生错误。当使用异步= false调用ServerXmlHttp.open时,错误不会发生

该代码工作在一个测试环境上,该环境具有所有主要产品的所有相同版本(尽管它与生产环境并不相同)。

在测试环境中,代码同时适用于同步打开和异步打开。

使用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“来配置internet堆栈,使其不使用代理。(http://support.microsoft.com/kb/289481/)

下面是一个指示性代码示例(我简化了它,因为我认为代码不是问题所在):

代码语言:javascript
复制
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)。

应用程序尝试使用一个窗口类,该类不是在系统中注册的特定于应用程序的类,也不是预定义的控件类之一(例如按钮、LISTBOX、滚动条等)。

这篇知识库文章(http://support.microsoft.com/kb/303326)包含以下异步特定说明:

ServerXMLHTTP不使用Urlmon.dll。但是,当您在异步模式下使用ServerXMLHTTP时,您也需要这个消息泵,因为解析器通过将消息回发到线程来触发事件。

Urlmon.dll确实存在于服务器的system32文件夹中。但是,它并不存在于代码以异步模式工作的测试服务器上:S (我没有显式地安装urlmon.dll --当我去寻找它时它就在那里)。

我的猜测是,服务器上存在一些配置或安装问题。也许是缺少了MSXML的缺陷。但我不知道如何进一步调查。有人有什么建议吗?

尤其是,有人能告诉我:

  • MsXml.ServerXmlHttp的依赖关系是什么?

  • 错误消息“无法找到窗口类”在此上下文中意味着什么?

  • 是否有特定于异步HTTP调用的设置或配置?

谢谢你读了这么多。

EN

回答 1

Stack Overflow用户

发布于 2009-06-16 20:28:22

带有COM对象的ASP的单线程特性将不允许您像您想象的那样处理异步事件。

人们可能会认为,通过引用在global.asa中声明的事件处理程序,这是可能的,但我怀疑这是否有效。

您的代码完全没有意义,因为您试图完全复制async=false所做的工作。可以使用setTimeout()方法控制超时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/725178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档