Как добавить пользовательский заголовок к вызову веб-службы ASMX с помощью jquery? - PullRequest
2 голосов
/ 27 декабря 2010

У меня есть веб-сервис со следующим контрактом:

POST /Service/service.asmx HTTP/1.1
Host: xxx.xxx.xxx
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "xxx.xxx.xxx/Service/Method"

<?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:Header>
    <Request xmlns="xxx.xxx.xxx/Service/">
      <transactiontype>string</transactiontype>
      <username>string</username>
      <password>string</password>
    </Request>
  </soap:Header>
  <soap:Body>
    <Method xmlns="xxx.xxx.xxx/Service/">
      <xml>xml</xml>
    </Method>
  </soap:Body>
</soap:Envelope>

И я пытаюсь вызвать сервис, используя jquery.Это мой код:

$.ajax({
    url: serverUrl + 'Method',
    type: "POST",
    dataType: "xml",
    data: { xml: "xml" },
    beforeSend: function (req) {
        req.setRequestHeader('Header', '<Request xmlns="xxx.xxx.xxx/Service/">'
                            +'<transactiontype>4</transactiontype>'
                            +'<agencyName>name</agencyName>'
                            +'<username>user</username>'
                            +'<password>pass</password>'
                            +'</Request>');                    
    },
    success: function (data) {
        alert(data.text);
    },
    error: function (request, status, errorThrown) {
        alert(status);
    }
});

Однако содержимое заголовка не передается веб-службе?Как мне передать учетные данные заголовка моему вызову веб-службы?

1 Ответ

1 голос
/ 27 декабря 2010

soap:Header - это элемент XML внутри «полезной нагрузки» данных XML / SOAP.Это отличается от HTTP-заголовков .В контракте SOAPAction (вместе с Content-Length и т. Д.) Является заголовком HTTP.

XmlHttpRequest.setRequestHeader используется для указания заголовков HTTP.Он не имеет ничего общего с чем-то внутри XML (напрямую).

Первый ответ на Простейший пример SOAP должен дать пример того, как сделать запрос SOAP.Примечание:

xmlhttp.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote");
xmlhttp.setRequestHeader("Content-Type", "text/xml");
...
var xml = '<?xml version="1.0" encoding="utf-8"?>' +
    '<soap:Envelope...' + etc;
xmlhttp.send(xml)

Это XML, содержащий soap:Envelope и дочерние элементы soap:Header и soap:Body.

Счастливое кодирование.

...