Более недели я пытаюсь создать связь между клиентским скриптом javascript (работающим на node.js) и службой WCF (SOAP).
Обмен данными осуществляется через XML, метод POST
xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
URL и XML, которые я отправляю службе, определены как:
soapRequest('http://winserver:8735/ReportsListsService', `<?xml version="1.0" encoding="UTF-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Header> <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IReportsListsService/GetClients</Action> </s:Header> <s:Body> <GetClients xmlns="http://tempuri.org/" /> </s:Body> </s:Envelope>`);
Это моя служба, в настоящее время пытающаяся вызвать простейший метод GetClients
using System; using System.Collections.Generic; using System.ServiceModel; using System.ServiceModel.Web; using tt4t.Dispatching.ApplicationServer.Data.CommonData; namespace tt4t.Dispatching.ApplicationServer.Data.Reports.Lists { [ServiceContract] public interface IReportsListsService : IMicroservice { [OperationContract] IEnumerable<Client> GetClients(); } }
Но получаюэта ошибка в консоли отладки chrome
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode>s:Client</faultcode><faultstring xml:lang="en-US">The incoming message contains a SOAP header representing the WS-Addressing 'Action', yet the HTTP transport is configured with AddressingVersion.None. As a result, the message is being dropped. If this is not desired, then update your HTTP binding to support a different AddressingVersion.</faultstring></s:Fault></s:Body></s:Envelope>
Эта ошибка отвечает на эту строку моего xml-запроса
<s:Header> <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IReportsListsService/GetClients</Action> </s:Header>
Полный код: здесь
Проблема отсутствовала
xmlhttp.setRequestHeader('SOAPAction', "http://tempuri.org/IReportsListsService/GetClients");