Построить запрос на мыло из wsdl и сервисный контракт с jquery
Я пытаюсь получить данные из веб-службы wcf, используя jQuery. Мой код jQuery выглядит следующим образом:
jQuery.ajax({
type: "POST",
url: serviceWebPath,
data: data,
contentType: "text/xml; charset=utf-8",
dataType: "json",
success: function (data) { alert (data); },
error: _errorHandler
});
У меня есть сервисный контракт:
[OperationContract]
String GetContainerByName(String _label);
[OperationContract]
String GetContainerByToken(Guid _Token);
[OperationContract]
void SetContainer(Guid securityToken, String _Content);
У меня есть файл xsd, к которому я могу получить доступ по адресу http://.svc/mex и который включает
<wsdl:operation name="GetContainerByToken">
<soap:operation soapAction="http://tempuri.org/IProxyShareContextContract/GetContainerByToken" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
Данные, которые я передаю в jQuery:
var data = '<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:Body><GetContainerByToken><label>' + clientTokenSecuritySManager + '</label></GetContainerByToken></soap:Body></soap:Envelope>';
Мне нужно получить доступ к методу GetContainerByToken. Но я продолжаю получать эту ошибку:
"The message with Action '' cannot be processed at the receiver,
due to a ContractFilter mismatch at the EndpointDispatcher. This
may be because of either a contract mismatch (mismatched Actions
between sender and receiver) or a binding/security mismatch between
the sender and the receiver. Check that sender and receiver have
the same contract and the same binding (including security requirements,
e.g. Message, Transport, None)."
3 ответа
Вы хотите поговорить о SOAP из Javascript? Это глупо.
Это не совсем ответ, но попробуйте проверить ваш трафик с помощью wireshark и / или soapUI. Если у вас есть работающий SOAP-клиент, запустите его и посмотрите, что он делает, а затем попытайтесь повторить это.
Обратите внимание, что некоторые серверы SOAP будут использовать HTTP-заголовки для маршрутизации действия (SOAPAction
). Сообщение об ошибке заставляет меня подозревать, что это может быть проблемой?
Посмотрите простейший пример SOAP для полного примера.
Что вам нужно сделать, это выяснить, к какой цели вы стремитесь. Действие SOAPAction, пространства имен, имена и порядок элементов, атрибуты и все.
Было бы неплохо увидеть пример правильного работающего SOAP-сообщения, прежде чем пытаться создать Javascript, необходимый для его воспроизведения.
Я верю, что вы должны попробовать использовать WebHTTPBinding, так как вы пробуете клиент на основе REST.
Попробуйте найти реализацию на основе REST, которая лучше всего подходит для вызова из Javascript.