Веб-сервисы в классическом ASP - PullRequest
3 голосов
/ 16 июля 2009

Прежде всего, это мой третий вопрос о веб-сервисах, и я очень благодарен Гайзу за помощь, но все же чего-то не хватает, что неправильно вот код, который я получил уже из моего вопроса

    Set oXmlHTTP = CreateObject("Microsoft.XMLHTTP")
oXmlHTTP.Open "POST", "http://www.oursite.com/WebServices/ourService.asmx?WSDL", False 

oXmlHTTP.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8" 
oXmlHTTP.setRequestHeader "SOAPAction", "http://ourNameSpace/ourFunction"

SOAPRequest = _
  "<?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>" &_
      "<ourFunction xmlns=""http://ourNameSpace/"">" &_
        "<var1>" & Session("userid") & "</var1>" &_
        "<var2>" & Session("internetid") & "</var2>" &_
      "</ourFunction>" &_
    "</soap12:Body>" &_
  "</soap12:Envelope>"

oXmlHTTP.send SOAPRequest

Теперь моя ссылка на веб-сервис

http://buergerserviceschul.niedersachsen.de/modules/id/public/webservice/V4_00/rpc_lit/?wsdl

Когда я обращаюсь к веб-службе, предоставляющей все детали и всю необходимую информацию, я все равно не могу получить какую-либо информацию от этой процедуры, которая расстраивает. я имею в виду, что я ничего не получаю, я получаю пустые ответы, в то время как, если я использую старый способ, который мне предложили не реализовывать, который использовал мыльный клиент, т.е.

Set oSOAP = Server.CreateObject("MSSOAP.SoapClient30")
oSOAP.ClientProperty("ServerHTTPRequest") = True

теперь таким образом я, по крайней мере, получаю идентификатор сеанса, но снова я не могу идти дальше, даже если использую эту процедуру, так вот, я застрял в этой проблеме

Мне нужно вызывать функции и получать XML в ответ, но я ничего не получаю взамен

Либо то, как я вызываю службу, заставляет ее не отвечать, но если бы это было так, то она выдала бы ошибку, как если бы я сделала какую-либо ошибку в коде.

пожалуйста, помогите мне в этом Я буду очень благодарен вам за эту услугу. спасибо

Ответы [ 3 ]

2 голосов
/ 16 июля 2009

Не используйте "? WSDL". Это только с целью получения WSDL.

Кроме того, даже в VBSCRIPT не никогда не собирайте XML с помощью конкатенации строк. Всегда используйте XML API для создания XML.


Я понимаю, что многие люди, все еще использующие Classic ASP, не имеют большого выбора. (*) Тем не менее, вы должны приветствовать любую возможность не писать больше VBSCRIPT, который кто-то должен будет поддерживать (возможно, даже вы). Вместо этого напишите небольшой фрагмент кода на C #, чтобы представить веб-сервис как объект COM. Вы можете использовать обычную технику «Add Service Reference», но VBSCRIPT увидит ее как обычный COM-объект. Я посмотрю, смогу ли я найти пример.


(*) Может быть, если бы мы начали называть это «дерьмовым, вонючим, ASP», руководство избавилось бы от этого быстрее? Но, возможно, нет, и тогда мы застряли бы с именем.

0 голосов
/ 17 июля 2009

В конечном счете, я согласен с Джоном: Дитч делает это в VBScript, использует C # dll для выполнения работы и предоставляет COM-интерфейс для использования в ASP.

Однако некоторые вещи, которые вы можете посмотреть. Во-первых, не используйте Microsoft.XMLHTTP, это не потокобезопасно. Вместо этого используйте CreateObject("MSXML2.ServerXMLHTTP").

Чтобы диагностировать, что идет не так, используйте Fiddler . При использовании SOAP запустите Fiddler, затем введите

ProxyCfg -u

в командной строке. Точный разговор между серверами вы увидите в фиддлере. Если у вас есть другой пример этого интерфейса SOAP, работающего правильно, используйте fiddler для проверки HTTP-сессий этого.

Теперь переключитесь на ваш новый код и изучите запросы, генерируемые этим. По этим данным вы сможете определить, какие изменения в заголовках и XML необходимы для работы.

Не забудьте выдать

Proxycfg -d

перед закрытием скрипача.

0 голосов
/ 16 июля 2009

как указал г-н Сондерс, не используйте "? WSDL", вместо этого замените

"http://www.oursite.com/WebServices/ourService.asmx?WSDL"

с

http://www.oursite.com/WebServices/ourService.asmx

...