Web services 使用SOAP请求调用Asp经典Web服务

Web services 使用SOAP请求调用Asp经典Web服务,web-services,asp-classic,Web Services,Asp Classic,我试图在不使用get参数的情况下从ASP.NET Web服务获取响应。我有以下代码 strBarcode = "ABC123 strURL ="http://serverName/BarcodeGenerator.asmx" Set xmlReq = Server.CreateObject("Msxml2.DOMDocument.3.0") Set xmlResp = Server.CreateObject("Msxml2.DOMDocument.3.0") Set httpReq = Serv

我试图在不使用get参数的情况下从ASP.NET Web服务获取响应。我有以下代码

strBarcode = "ABC123
strURL ="http://serverName/BarcodeGenerator.asmx"
Set xmlReq = Server.CreateObject("Msxml2.DOMDocument.3.0")
Set xmlResp = Server.CreateObject("Msxml2.DOMDocument.3.0")
Set httpReq = Server.CreateObject("MSXML2.ServerXMLHTTP") 


xmlReq.async = false
strXML = CStr(CreateRequest(strBarcode ))

xmlReq.loadXML(CStr(strXML))

//Open, async

httpReq.open "POST", CStr(strURL), true 

httpReq.setRequestHeader "Host", "serverName"
httpReq.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
httpReq.setRequestHeader "SOAPAction", "http://tempuri.org/GetBarcode"

httpReq.send(xmlReq)



strDone = "0"
bTimeout = false
dStart = Now()
dEnd = Now()
lCounter = 0
lCounterPrev = -1   
intStatus = 0
Do while intStatus <> 4 and (Not bTimeout)
   dEnd = Now()
   lCounter = DateDiff("s",dStart,dEnd)

   if lCounter > 30 then bTimeout = True       
   %>. <%      
   'Wait a second
   httpReq.waitForResponse 1000
   intStatus = httpReq.readyState
Loop

If httpReq.readyState = 4 Then
    bTimeout = false
    Set xmlResp = httpReq.responseXML
    %>
    Status: <%=httpReq.statusText%><BR>
    Response: <%=httpReq.responseText%> <BR><BR>
    <%
    Set nodes = xmlResp.getElementsByTagName("GetBarcodeResult")
    If (nodes is nothing) THen
    %>Nodes is NULL<BR><%
    Else
    %>Number of Nodes: <%=nodes.length%><%
    End IF
    Set node = nodes(0)
    url = node.nodeValue
End If
strBarcode=“ABC123
strURL=”http://serverName/BarcodeGenerator.asmx"
设置xmlReq=Server.CreateObject(“Msxml2.DOMDocument.3.0”)
设置xmlResp=Server.CreateObject(“Msxml2.DOMDocument.3.0”)
设置httpReq=Server.CreateObject(“MSXML2.ServerXMLHTTP”)
xmlReq.async=false
strXML=CStr(CreateRequest(strBarcode))
loadXML(CStr(strXML))
//开放、异步
httpReq.open“POST”,CStr(strURL),真
httpReq.setRequestHeader“主机”、“服务器名”
httpReq.setRequestHeader“内容类型”、“文本/xml;字符集=utf-8“
httpReq.setRequestHeader“SOAPAction”http://tempuri.org/GetBarcode"
httpReq.send(xmlReq)
strDone=“0”
bTimeout=false
dStart=Now()
dEnd=Now()
lCounter=0
lCounterPrev=-1
intStatus=0
执行intStatus 4和(非bTimeout)
dEnd=Now()
lCounter=DateDiff(“s”,dStart,dEnd)
如果lCounter>30,则bTimeout=True

%>.这(现在通过web.archive.org为子孙后代提供)解释得最好,但基本上,由于IIS配置,服务器无法定位自身(经典的asp和webservice托管在同一台服务器上)。代码没有问题。

您的代码正试图自行设置主机头。您不应该这样做

ServerXMLHTTP将为您从提供的URL中绘制主机字符串。通过尝试自己添加主机字符串,您正在破坏HTTP协议的一个重要标准。主机是1.1协议中最基本的头,它是1.1请求中必须存在的唯一头


我不知道为什么您使用异步请求和WaitForResponse只是为了检测超时。为什么不使用setTimeouts方法和同步请求?

这不是一个答案,您应该将此补充信息添加到问题中并删除此答案。这怎么不是一个答案?它解决了我的问题。您的其他标准是什么答案是什么?我想要的正是你发布的内容,关于我应该(和不应该)做什么的附加信息正在进行。感谢主机提示。就异步而言,我只是保留现有的显示进度条的功能,只要它没有加载。这很公平,但请注意,根据我的经验,ASP中的异步WinHTTP可能有点脆弱。这很公平。我发现IIS 6中的ASP通常是脆弱的,感谢您提供的大量信息。