从wsdl构造soap请求和使用jquery构建服务契约

时间:2011-05-05 10:32:26

标签: jquery wcf soap wsdl servicecontract

我正在尝试使用jQuery从wcf Web服务获取数据。 我的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 个答案:

答案 0 :(得分:2)

参见Simplest SOAP example 一个完整的例子。

您需要做的是找出您的目标。 SOAPAction,命名空间,元素名称和顺序,属性以及所有内容。

在尝试制作重现它所需的Javascript之前,最好先看一个有效的,有效的SOAP消息示例。

答案 1 :(得分:1)

你想从Javascript谈论SOAP吗?那太棒了。

这不是一个真正的答案,但尝试使用wireshark和/或soapUI检查您的流量。如果你有一个有效的SOAP客户端,运行它并查看它的作用,然后尝试复制它。

请注意,某些SOAP服务器将使用HTTP标头来路由操作(SOAPAction)。错误消息让我怀疑这可能是问题吗?

答案 2 :(得分:0)

我相信您必须尝试使用​​WebHTTPBinding,因为您正在尝试基于REST的客户端。

尝试寻找基于REST的实现,最适合从Javascript调用。