我正在尝试使用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)."
答案 0 :(得分:2)
参见Simplest SOAP example 一个完整的例子。
您需要做的是找出您的目标。 SOAPAction,命名空间,元素名称和顺序,属性以及所有内容。
在尝试制作重现它所需的Javascript之前,最好先看一个有效的,有效的SOAP消息示例。
答案 1 :(得分:1)
你想从Javascript谈论SOAP吗?那太棒了。
这不是一个真正的答案,但尝试使用wireshark和/或soapUI检查您的流量。如果你有一个有效的SOAP客户端,运行它并查看它的作用,然后尝试复制它。
请注意,某些SOAP服务器将使用HTTP标头来路由操作(SOAPAction
)。错误消息让我怀疑这可能是问题吗?
答案 2 :(得分:0)
我相信您必须尝试使用WebHTTPBinding,因为您正在尝试基于REST的客户端。
尝试寻找基于REST的实现,最适合从Javascript调用。