powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов Web Service из VB6
7 сообщений из 7, страница 1 из 1
Вызов Web Service из VB6
    #37709526
Ay-y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Web Service, который возвращает данные из SP.
Надо вызвать его из VB6.
отправляем стринг в функцию
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Private Function PostWebservice(ByVal AsmxUrl As String, ByVal SoapActionUrl As String, ByVal XmlBody As String) As String
    Dim objDom As Object
    Dim objXmlHttp As Object
    Dim strRet As String
    Dim intPos1 As Integer
    Dim intPos2 As Integer
    
    On Error GoTo Err_PW
    
    ' Create objects to DOMDocument and XMLHTTP
    Set objDom = CreateObject("MSXML2.DOMDocument")
    Set objXmlHttp = CreateObject("MSXML2.XMLHTTP")
    
    ' Load XML
    objDom.async = False
    objDom.LoadXML XmlBody

    ' Open the webservice
    objXmlHttp.Open "POST", AsmxUrl, False
    
    ' Create headings
    objXmlHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
    objXmlHttp.setRequestHeader "SOAPAction", SoapActionUrl
    
    ' Send XML command
    objXmlHttp.send objDom.XML

    ' Get all response text from webservice
    strRet = objXmlHttp.responseText
    
    ' Close object
    Set objXmlHttp = Nothing
    
    ' Extract result
    intPos1 = InStr(strRet, "Result>") + 7
    intPos2 = InStr(strRet, "</")
    If intPos1 > 7 And intPos2 > 0 Then
        strRet = Mid(strRet, intPos1, intPos2 - intPos1)
    End If
    
    ' Return result
    PostWebservice = strRet
    
Exit Function
Err_PW:
    PostWebservice = "Error: " & Err.Number & " - " & Err.Description

End Function


objDom.XML отправляемая в objXmlHttp.send objDom.XML в точности совпадает с Sample SOAP видимый когда тестируешь Web Service
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetNotifyAllWhenInitiated xmlns="http://tempuri.org/TASRouting_ws/Routing">
      <strParameters><D Document_Number="ENGR-007" Company_Abrv="TKH" /></strParameters>
    </GetNotifyAllWhenInitiated>
  </soap:Body>
</soap:Envelope>


В результате из strRet = objXmlHttp.responseText выходит пустая стринг.
Когда чуть поменяли параметр
Код: xml
1.
2.
3.
4.
5.
6.
7.
<<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><GetNotifyAllWhenInitiated xmlns="http://tempuri.org/TASRouting_ws/Routing/GetNotifyAllWhenInitiated">
<strParameters>
<Document_Number>ENGR-007</Document_Number><Company_Abrv>TKH</Company_Abrv>
</strParameters>
</GetNotifyAllWhenInitiated></soap:Body></soap:Envelope>



стала выдавать ошибку
Код: xml
1.
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetNotifyAllWhenInitiatedResponse xmlns="http://tempuri.org/TASRouting_ws/Routing"><GetNotifyAllWhenInitiatedResult>&lt;D&gt;&lt;Error ErrDesc="Procedure 'spRouting_GetNotifyAllWhenInitiated' expects parameter '@Document_Number', which was not supplied." SoftError="False" ErrNum="-2146232060" /&gt;&lt;/D&gt;</GetNotifyAllWhenInitiatedResult></GetNotifyAllWhenInitiatedResponse></soap:Body></soap:Envelope>

Имя вызываемой процедуры правильное, непонятно куда пропадает параметр.
Подкажите куда копать и как проверить что собственно происходит в этом objXmlHttp.
...
Рейтинг: 0 / 0
Вызов Web Service из VB6
    #37709627
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ay-y,

вот этого нет
Код: vbnet
1.
    .setRequestHeader "Host", "*****.**.***/******/*****.asmx"


или это не обязательно ?
11410921
...
Рейтинг: 0 / 0
Вызов Web Service из VB6
    #37712006
Ay-y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,
Не взлетело.
Ещё кто-нибудь, что-нибудь видит?
...
Рейтинг: 0 / 0
Вызов Web Service из VB6
    #37712121
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня работало так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
Private Const SOAP_POST = "<?xml version=""1.0"" encoding=""utf-8""?><soap12:Envelope " & _
    "xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " & _
    "xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" " & _
    "xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" & _
    "<soap12:Body></soap12:Body></soap12:Envelope>"


Public Function CallWebMethod(Name As String, ParamArray Args())
Dim param
Dim meth As IXMLDOMElement
Dim p As IXMLDOMElement
Dim r As IXMLDOMNode
    xmlObj.loadXML SOAP_POST
    Set meth = xmlObj.childNodes(1).childNodes(0).appendChild(xmlObj.createElement(Name))
    GetAttribute(meth, "xmlns").Text = "http://tempuri.org/"
    For Each param In Args
        Set p = meth.appendChild(xmlObj.createElement(param(0)))
        p.appendChild xmlObj.createTextNode(param(1))
    Next
    Debug.Print ">>>>>>", xmlObj.xml
    QueryServer
    Debug.Print "<<<<<<", xmlObj.xml
    Set r = xmlObj.selectSingleNode("//" & Name & "Response")
    If Not r Is Nothing Then CallWebMethod = r.nodeTypedValue
End Function

Public Function QueryServer() As Boolean
Dim RespStr As String
Dim a() As Byte
    On Error GoTo errh:
    If lsProjSrv = "" Then Exit Function
    a = StrConv(Replace(xmlObj.xml, "xmlns=""""", ""), vbFromUnicode)
    lHTTP.open "POST", lsProjSrv
    lHTTP.setRequestHeader "Host", "localhost"
    lHTTP.setRequestHeader "Content-Type", "application/soap+xml"
    lHTTP.setRequestHeader "Content-Length", UBound(a) + 1
    lHTTP.Send a
    xmlObj.loadXML lHTTP.responseText
    QueryServer = True
    Exit Function
errh:
    If Err.Number = -2147483638 Then
        DoEvents
        Resume
    End If
    MsgBox Err.Description, vbExclamation
End Function

Public Function GetAttribute(Node As IXMLDOMElement, Name As String, Optional Value As String) As IXMLDOMText
Dim n As IXMLDOMElement
Dim att As IXMLDOMAttribute
Dim nd As IXMLDOMText
    Set att = Node.Attributes.getNamedItem(Name)
    If att Is Nothing Then
        Set att = Node.ownerDocument.createAttribute(Name)
        Set nd = att.appendChild(Node.ownerDocument.createTextNode(""))
        Node.setAttributeNode att
    Else
        Set nd = att.childNodes(0)
        If nd Is Nothing Then Set nd = att.appendChild(Node.ownerDocument.createTextNode(""))
    End If
    Set GetAttribute = att.childNodes(0)
End Function

'использование
    ret = CallWebMethod("ActivatePubPoint", Array("EventID", lEventID), Array("Path", s))
...
Рейтинг: 0 / 0
Вызов Web Service из VB6
    #37712205
Ay-y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как должна выглядеть xml стринг с параметрами отправляемыми в процедуру?
Например параметры @Document_Number и @Company_Abrv отпарвляемые в сервис http://localhost/tasrouting_ws/routing.asmx?op=GetNotifyAllWhenInitiated
...
Рейтинг: 0 / 0
Вызов Web Service из VB6
    #37712256
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помню. И зачем это нужно, если при открытии такой ссылке в браузере выдается страница со всеми вариантами запросов, которые может обработать сервис?
...
Рейтинг: 0 / 0
Вызов Web Service из VB6
    #37712265
Ay-y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Потому что задача отправить параметры в процедуру, а Сервис их почему-то не признаёт. И говорит что ничего не отправили.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов Web Service из VB6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]