sin*_*rix 7 javascript ajax wcf jquery soap
我正在尝试使用jQuery从ajax调用调用WCF服务.我设法从SOAP-UI和Excel/VBA调用WCF.我的问题来自发送的OPTIONS请求,后面没有POST:
http://mywcf/service.svc
,则发送OPTIONS并且我获得400 Bad Request
状态并且不发送POST请求.在这种情况下,HTTP/1.1
标头中缺少(与SOAP-UI标头比较).http://mywcf/service.svc HTTP/1.1
,则发送OPTIONS并获得200 OK
状态但不发送POST请求.在这种情况下,HTTP/1.1
似乎被解释为文件名.有人能告诉我如何从javascript调用WCF上的POST操作并添加HTTP/1.1
标题而不破坏服务URL吗?
这是我的ajax调用的摘录:
var soapData = ''
+'<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mic="http://microsoft.wcf.documentation">'
+' <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsrm="http://docs.oasis-open.org/ws-rx/wsrm/200702">'
+' <wsrm:Sequence>'
+' <wsrm:Identifier>s:Sender a:ActionNotSupported</wsrm:Identifier>'
+' <wsrm:MessageNumber>1</wsrm:MessageNumber>'
+' </wsrm:Sequence>'
+' <wsa:Action>http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence</wsa:Action>'
+' <wsa:ReplyTo>'
+' <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>'
+' </wsa:ReplyTo>'
+' <wsa:MessageID>uuid:'+ MsgUid +'</wsa:MessageID>'
+' <wsa:To>'+ Url +'</wsa:To>'
+' </soap:Header>'
+' <soap:Body xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm">'
+' <wsrm:CreateSequence>'
+' <wsrm:AcksTo xmlns:wsa="http://www.w3.org/2005/08/addressing">'
+' <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>'
+' </wsrm:AcksTo>'
+' <wsrm:Offer>'
+' <wsrm:Identifier>urn:soapui:'+ SeqUid +'</wsrm:Identifier>'
+' </wsrm:Offer>'
+' </wsrm:CreateSequence>'
+' </soap:Body>'
+'</soap:Envelope>';
$.ajax({
type: 'POST',
url: 'http://mywcf/service.svc', // with or without +' HTTP/1.1'
data: soapData,
contentType: 'application/soap+xml;charset=UTF-8',
dataType: 'xml'
});
Run Code Online (Sandbox Code Playgroud)
我的WCF中的值web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
小智 1
添加 webHttpBinding 端点
<services>
<service name="Contract">
<endpoint address="json" binding="webHttpBinding" contract="IContract" bindingConfiguration="ActionsHttpBinding" behaviorConfiguration="ActionrestfulBehavior"/>
</service>
Run Code Online (Sandbox Code Playgroud)
然后从 ajax 调用端点作为 post 或 get,请参见下面的示例:
var data = JSON.stringify({
param1: val1,
param2: val2
});
$.ajax({
url: "http://mywcf/service.svc/json/FunctionName",
type: "POST",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: true
}).then(function (rsutlt) {
}).fail(function (fail) {
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8910 次 |
最近记录: |