Как использовать SOAP-запрос в вызове AJAX - PullRequest
0 голосов
/ 15 декабря 2011

Это мое AJAX-приложение, где мне нужно связаться с моим Web-сервисом, работающим на сервере.

function sendRequest(method, url)
{
method == 'post';
{
http.open(method,url,true);
http.onreadystatechange = handleResponse;
http.send(null);
}
}

Это SOAP-запрос, который я получил из пользовательского интерфейса SOAP, который работал нормально

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.bayer.tata.com/" xmlns:tkw="http://tata.com/bayer" xmlns:chim="http://tata.com/chimera">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:strategy>
         <!--Optional:-->
         <request>
           <xmlMessage>
<![CDATA[<test>or like this</test>]]>
</xmlMessage>
        </request>
      </ser:strategy>
   </soapenv:Body>
</soapenv:Envelope>

Скажите, пожалуйста, как я могу использовать это сообщение SOAP XML в функции sendRequest.Я использую только простой Java Script AJAX (ничего подобного Jquery, DOJO или любой другой)

1 Ответ

0 голосов
/ 15 декабря 2011

Я думаю это сообщение может помочь вам. Но большинство веб-серверов позволяет вам вызывать веб-сервисы, используя обычный HTTP Post (без формата SOAP в запросе тела), если запрос не требует заголовков SOAP или других странных вещей.

Пример в .NET и обычном javaScript:

.NET веб-сервис

<System.Web.Services.WebService(Namespace:="http://JuntaEx/Agricultura/SegurInfo/GestorFirmaExterno/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class GestorFirmaExterno
    Inherits System.Web.Services.WebService

<WebMethod(Description:="Retorna los documentos originales asociados a un identificador de firma pasado como parámetro.")> _
    Public Function ObtenerDocumentoOriginal(ByVal idFirma As String) As DocumentoED()
//code
    End Function
End Class

web.config:

 <webServices>
    <protocols>
        <add name="HttpSoap"/>
        <add name="HttpPost"/> <!-- Allows plain HTTP Post -->
        <add name="HttpSoap12"/>
        <!-- Documentation enables the documentation/test pages -->
        <add name="Documentation"/>
     </protocols>
 </webServices>

Запрос JavaScript:

function crearRequest(url) {

    if (window.XMLHttpRequest) { 
        peticion_http = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) { 
        peticion_http = new ActiveXObject('Microsoft.XMLHTTP');
    }
    peticion_http.open('POST', url, true); //sync
    peticion_http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    return peticion_http;
}

    peticion_http = crearRequest('http://localhost/wspuenteFirma/serviciopuente.asmx/ObtenerDocumentoOriginal');
    peticion_http.onreadystatechange = obtenerDocHandler;
    var query_string = 'IdFirma=' + encodeURIComponent(docId);
    peticion_http.setRequestHeader('Content-Length', query_string.length);
    peticion_http.send(query_string);

Вы отправляете этот запрос на сервер:

POST /wsGestorFirmaExterno/GestorFirmaExterno.asmx/ObtenerDocumentoOriginal HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length

idFirma=string

и получите ответ от сервера:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfDocumentoED xmlns="http://JuntaEx/Agricultura/SegurInfo/GestorFirmaExterno/">
  <DocumentoED>
    <hash>string</hash>
  </DocumentoED>
  <DocumentoED>
    <hash>string</hash>
  </DocumentoED>
</ArrayOfDocumentoED>

Проанализируйте его с помощью javascript, чтобы получить необходимую информацию.

PS: вы можете настроить сервер и запрос браузера на отправку и получение данных JSON вместо XML.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...