Сообщение SOAP, в результате которого "400 неверных запросов" - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь отправить SOAP-запрос через вызов JS на простой странице.При отправке, если я отлаживаю через браузер, я получаю:

POST http://localhost:63748/DistGamingWebService.svc 400 (неверный запрос)

У меня есть веб-сервис (как указано выше), который подключается к основному серверу типа «база данных», работающему локально.Соединения между ними работают нормально - когда я запускаю тестовый клиент WCF, я могу вызывать методы и получать возвращаемые значения, как и ожидалось.

Я настроил сообщение SOAP на основе XML-запроса тестового клиента WCF, ноЯ все еще получаю 400 плохих запросов.Значение req.status всегда равно 1.

Я включил ниже мой вызов JS и формат сообщения POST.

function GetNumBossesTest() {
  req = null;
  if (window.XMLHttpRequest != undefined)
    req = new XMLHttpRequest();
  else {
    req = new ActiveXObject("Micosoft.XMLHTTP");
  }

  req.open("POST", "http://localhost:63748/DistGamingWebService.svc", true);

  req.setRequestHeader("Content-Type", "text/xml");
  req.setRequestHeader("SOAPAction", "http://tempuri.org/IDistGamingWebService/GetNumBosses");

  var sMsg = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><Action soap:>http://tempuri.org/IDistGamingWebService/GetNumBosses</Action></soap:Header><soap:Body><GetNumBosses xmlns="http://tempuri.org/" /></soap:Body></s:Envelope>';

  req.send(sMsg);
  if (req.status == 200)
    alert(req.responseText);

} 

В приведенном выше примере я упростилсообщение, сделав его полностью в одну строку.Когда я проверяю запрос с помощью отладки Fiddler и Chrome, сообщение форматируется точно так, как его вставляет JS.

С точки зрения интерфейса на моем веб-svc у меня есть следующее:

[ServiceContract]
public interface IDistGamingWebService
{    
    [OperationContract]
    int GetNumBosses();
}

Реализация этого интерфейса - это просто удаленные вызовы на другом похожем на базу сервере.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 мая 2018

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

Попробуйте выполнить следующее:

var sMsg = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header/><soap:Body><GetNumBosses xmlns="http://tempuri.org/" /></soap:Body></soap:Envelope>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...