Веб-сервис Asp Classic Calling с SOAP-запросом - PullRequest
2 голосов
/ 29 мая 2009

Я пытаюсь получить ответ от веб-службы ASP.NET без использования параметров get. У меня есть следующий код.

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

Статус

Статус: Неверный запрос

и ответ

Ответ: неправильный запрос (неверное имя хоста)

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 01 июня 2009

Ваш код пытается установить заголовок самого хоста. Вы не должны делать это.

ServerXMLHTTP сделает это для вас, рисуя строку хоста из предоставленного URL. Пытаясь добавить его самостоятельно, вы нарушаете важные критерии для протокола HTTP. Хост - это самый главный заголовок в протоколе 1.1, это единственный заголовок, который должен присутствовать в запросе 1.1.

Я не уверен, почему вы используете асинхронный запрос и WaitForResponse просто для определения времени ожидания. Почему бы не использовать метод setTimeouts и синхронный запрос?

1 голос
/ 29 мая 2009

Эта статья (теперь через web.archive.org для потомков) объясняет это лучше, но в основном из-за конфигурации IIS сервер не смог найти себя (classic-asp и webservice размещались тот же сервер). С кодом проблем нет.

...