MSXML2.ServerXMLHTTP 对象的一些常见问题介绍

目录
[隐藏]

XMLHTTP  为客户端应用程序而设计,并依赖于基于  Microsoft  Win32  Internet  (WinInet)  而构建的  URLMon。ServerXMLHTTP  为服务器应用程序而设计,并依赖于新的  HTTP  客户端堆栈  WinHTTP。ServerXMLHTTP  提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见  MSXML  软件开发工具包  (SDK)  文档。

 

本文回答有关 ServerXMLHTTP 对象的一些常见问题。
更多信息
1. 什么是 ServerXMLHTTP?

ServerXMLHTTP 为不同 Web 服务器之间的服务器安全 HTTP 访问提供方法和属性。您可以使用此对象在不同的 Web 服务器之间交换 XML 数据。

2. 如何安装 ServerXMLHTTP?

ServerXMLHTTP 随 Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供。您可以从以下 Microsoft Developer Network (MSDN) 网站下载并安装 MSXML 3.0:
http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en (http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en)
3. ServerXMLHTTP 具有什么平台要求?

ServerXMLHTTP 支持仅在安装 Microsoft Windows 2000 的计算机上或者在安装带 Microsoft Internet Explorer 5.01(或更高版本)的 Microsoft Windows NT 4.0 的计算机上提供。它在其他平台(如 Microsoft Windows 95 和 Microsoft Windows 98)上将失败。

由于 XMLHTTP 内部使用 WinInet,所以不支持在服务器端应用程序(例如 Active Server Pages (ASP))、宿主在 COM+ 中的组件,或 Windows 服务中使用 XMLHTTP。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
238425 (http://support.microsoft.com/kb/238425/) 不支持在服务中使用 WinInet

4. XMLHTTP 和 ServerXMLHTTP 之间的区别是什么?

XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见 MSXML 软件开发工具包 (SDK) 文档。

5. 如何在 XMLHTTP 和 ServerXMLHTTP 之间做出选择?

正如其名称所示,ServerXMLHTTP 推荐用于服务器应用程序,而 XMLHTTP 推荐用于客户端应用程序。XMLHTTP 具有一些优点,如支持缓存和自动发现代理。它可以在 Windows 95 和 Windows 98 平台上使用,并且非常适合单用户桌面应用程序。

6. 什么是代理配置实用工具?

WinHTTP 代理配置实用工具 Proxycfg.exe 允许将 WinHTTP 配置为通过代理服务器访问 HTTP 和 HTTPS 服务器。由于 ServerXMLHTTP 组件依赖于 WinHTTP 代理设置,因此在部署和安装使用 WinHTTP 的应用程序的过程中,管理员可以使用 Proxycfg.exe 实用工具。有关更多信息,请参见下面的 Microsoft 知识库文章:
289481 (http://support.microsoft.com/kb/289481/) 可能需要运行 Proxycfg 工具以使 ServerXMLHTTP 正常工作 
7. ServerXMLHTTP 是否支持 SSL 和数字证书?

ServerXMLHTTP 和 XMLHTTP 组件在 MSXML3 中对 HTTPS 的支持比较有限。具体说就是,它们不完全支持用于身份验证的安全套接字层 (SSL) 证书。这些组件虽然支持 HTTPS 协议,但如果服务器要求客户端证书,请求将会失败。

ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL 证书支持。

8. ServerXMLHTTP 有什么优点?• 通过使用 ServerXMLHTTP,可以在本地和远程系统之间以流或 XML 文档的形式交换 XML 数据。
• 由于基础协议为 HTTP 或 HTTPS,因此可以在防火墙后的系统之间交换数据。
• ServerXMLHTTP 可用于从不同的环境(如 Active Server Pages (ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)发送 HTTP 请求。

9. ServerXMLHTTP 存在什么限制?

可同时存在于单一进程中的 ServerXMLHTTP 实例数主要取决于可用于系统上应用程序的内存大小。但是,其他因素(如 CPU 处理能力或者可用的套接字连接)会进一步限制可以同时处于活动状态的实例数。

就 MSXML 3.0 而言,可同时存在于单一进程中的最大实例数为 5,460。

10. 在哪里可以找到有关 ServerXMLHTTP 的更多信息?

本文的大部分信息都取自 MSXML SDK,它可以从以下 MSDN 网站的 XML 部分下载:
http://msdn.microsoft.com/xml/default.aspx (http://msdn.microsoft.com/xml/default.aspx)

XMLHTTP传值如何在固定时间内没有取到返回值后自己中断

 

function  send(url) 
  Dim  xml 
  Set  xml  =  Server.CreateObject("Microsoft.XMLHTTP")     
  xml.Open  "GET",  url,  False 
  xml.Send 
  if  xml.responseText<>""  then 
  send=xml.responseText'获得返回值 
  else 
  send="NO"'无法获得返回值 
  end  if 
  Set  xml  =  Nothing 
  end  function 
   
   
  上面是同步方式发送数据,但是当无法得到返回值的时候就一直等待服务器的响应,这样很容易把服务器拖垮,我想设置在固定时间内(如30s)如果没有得到返回值就中断操作。 
   
  听说这要在异步方式下才能做到,但除了改这个参数,如何进行其它的步骤? 
________________________________________________
可以试试ServerXMLHTTP 
   
  Dim  xmlServerHttp 
  Set  xmlServerHttp  =  Server.CreateObject("Msxml2.ServerXMLHTTP")   
  Dim  lResolve,  lConnect,  lSend,  lReceive 
  lResolve  =  5  *  1000 
  lConnect  =  5  *  1000 
  lSend  =  15  *  1000 
  lReceive  =  15  *  1000 
  xmlServerHttp.setTimeouts  lResolve,  lConnect,  lSend,  lReceive 
  xmlServerHttp.open  "GET",  "http://lzw.me/sample.xml",  False 
  xmlServerHttp.send

 

MSXML2.ServerXMLHTTP使用实例

<%
'使用范例
'读取URL 的HTML
dim myHttp
set myHttp=new xhttp
myHttp.URL="http://www.baidu.com"
Response.Write(myHttp.html)

'保存远程图片到本地
myHttp.URL="http://www.baidu.com/img/logo.gif"
myHttp.saveimage "myfile.gif"
'为防止xhttp卡死的情况,使用超时,错误处理
dim sHtmlcode,iStep
myHttp.URL="http://www.hrbshopping.com"
sHtmlcode=myHttp.html
iStep=0
do while myHttp.xhttpError=""
 Response.Write("ERROR: AGAIN!<br />")
 sHtmlcode=myHttp.html
 iStep=iStep+1
 if iStep=1 then
  Response.Write("ERROR:OVER!<hr />")
  exit do
 end if
loop
Response.Write(sHtmlcode)

set myHttp=nothing

'——————————————————————–
Class xhttp
 private cset,sUrl,sError
 Private Sub Class_Initialize()
  'cset="UTF-8"
  cset="GB2312"
  sError=""
 end sub
 
 Private Sub Class_Terminate()
 End Sub
 
 Public Property LET URL(theurl)
  sUrl=theurl
 end property
 public property GET BasePath()
  BasePath=mid(sUrl,1,InStrRev(sUrl,"/")-1)
 end property
 public property GET FileName()
  FileName=mid(sUrl,InStrRev(sUrl,"/")+1)
 end property
 public property GET Html()
  Html=BytesToBstr(getBody(sUrl))
 end property
 
 public property GET xhttpError()
  xhttpError=sError
 end property
 
 private Function BytesToBstr(body)
  on error resume next
  'Cset:GB2312 UTF-8
  dim objstream
  set objstream = Server.CreateObject("adodb.stream")
  with objstream
  .Type = 1 '
  .Mode = 3 '
  .Open    
  .Write body  '
  .Position = 0 '
  .Type = 2  '
  .Charset = Cset  '
  BytesToBstr = .ReadText '
  .Close
  end with
  set objstream = nothing
 End Function
 
 private function getBody(surl)
  on error resume next
  dim xmlHttp
  'Set xmlHttp=server.createobject("Msxml2.XMLHTTP.4.0")
  'set xmlHttp=server.createobject("Microsoft.XMLHTTP")
  set xmlHttp=server.createobject("MSXML2.ServerXMLHTTP")
  xmlHttp.setTimeouts 10000,10000,10000,30000
  xmlHttp.open "GET",surl,false
  xmlHttp.send
  if xmlHttp.readystate=4 then
  'if xmlHttp.status=200 then
   getBody=xmlhttp.responsebody
  'end if
   else
   getBody=""
  end if
  
  if Err.Number<>0 then
  sError=Err.Number
  Err.clear
  else
  sError=""
  end if
  set xmlHttp=nothing
 end function
 
 Public function saveimage(tofile)
  on error resume next
  dim objStream,imgs
  imgs=getBody(sUrl)
  Set objStream = Server.CreateObject("ADODB.Stream")
  with objStream
  .Type =1
  .Open
  .write imgs
  .SaveToFile server.mappath(tofile),2
  .Close()
  end with
  set objstream=nothing
 end function
end class
%>

点赞 (0)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code