классический ответ asp и soap - как справиться с изменением префиксов в пространстве имен? - PullRequest
0 голосов
/ 05 ноября 2018

Я унаследовал классическую страницу asp, которая использует веб-сервисы, и я относительно новичок в этом. Запросы и ответы работают нормально, но я заметил, что префикс добавляется в пространство имен где-то между wsdl и мной, читающим его. Таким образом, пространство имен <FirstName> получится <ns2:FirstName> или иногда <ns3:FirstName> или иногда просто <FirstName>. Это точно такой же элемент, но префикс меняется очень часто.
Мне сказали, что я читаю ответ «сырой», и мне нужно отфильтровать эти дополнительные сгенерированные префиксы, но я не знаю как. Вот фрагмент кода того, как я использую веб-сервис (некоторые вещи были изменены, чтобы сделать это простым):

Dim oXmlHTTP, objxml, SOAPRequest, SOAPResponse

    Set oXmlHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
    oXmlHTTP.open "POST", "http://something.com/something/services/something?wsdl", False 
    oXmlHTTP.setRequestHeader "Content-Type", "text/xml; charset=UTF-8" 

    SOAPRequest = _
    "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:head='http://header.something.com" xmlns:ser='http://service.something.com' xmlns:add='http://service.something.com/domain/address'>" &_
       "<soapenv:Body>" &_
          "<ser:getInfo>" &_
             "<add:ID>123</add:ID>" &_
          "</ser:getInfo>" &_
       "</soapenv:Body>" &_
    "</soapenv:Envelope>"

    On Error Resume Next
    oXmlHTTP.send SOAPRequest   

    If Err.Number Then 
        Response.Write("Error: " & Err.Description)
        Err.Clear 
    Else 
        SOAPResponse = oXmlHTTP.responseText

    End If 
    On Error Goto 0 

    If LEN(SOAPResponse) > 0 then
        Set objxml = Server.CreateObject("MSXML2.DOMDocument.3.0")
        objxml.async = False
        objxml.load (oXmlHTTP.responseXML)      

        If objxml.parseError.errorCode <> 0 Then
             Response.Write("XML error")
        End If

        'This is where the "error" will occur, as the <Firstname> sometimes isn't recognized, and I must search for e.g. <ns2:Firstname> instead
        Set nodeList = objxml.getElementsByTagName("FirstName")
        SizeofObject = nodeList.length-1

        For i = 0 To (SizeofObject)  
            Response.Write ("Name: " & objxml.getElementsByTagName("FirstName").item(i).Text)
        Next    


    End If
        Set oXmlHTTP = Nothing 
        SOAPRequest = ""
        SOAPResponse = ""

Как я могу игнорировать эти "случайные" префиксы, которые могут возникнуть? Есть ли лучшая практика использовать вызовы веб-службы в классическом ASP? (переход на .NET сейчас не вариант). Любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 ноября 2018

Не могли бы вы использовать функцию замены VBScript, чтобы изменить теги Firstname на <Firstname>?

например

Set objxml = Server.CreateObject("MSXML2.DOMDocument.6.0")
objxml.async = False
Dim MyResponse
MyResponse = oXmlHTTP.responseXML
MyResponse = Replace(MyResponse,"<ns2:FirstName>","<FirstName>")
MyResponse = Replace(MyResponse,"<ns3:FirstName>","<FirstName>")
objxml.load (MyResponse) 

Примечание: я обычно рекомендую вызывать версию 6, а не версию 3 MSXML - это самая последняя версия

...