Mah*_*kar 1 javascript jquery web-services asp.net-ajax
我有一个简单的WCF Web服务,我试图用jquery和SOAP-XML(dataType:"xml")连接.但是当我发送我的请求时,我从服务器得到"BAD REQUEST Error 400".这是我的SOAP-XML:
var soapMessage =
'<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/wsdl/soap/"> \
<soap:Header> \
<Action soap:mustUnderstand=\"1\" xmlns=\"http://schemas.microsoft.com/ws/2005/05/addressing/none\">http://tempuri.org/IService/HelloWorld</Action> \
</soap:Header> \
<soap:Body> \
<HelloWorld xmlns="http://tempuri.org/"> \
</HelloWorld> \
</soap:Body> \
</soap:Envelope>';
Run Code Online (Sandbox Code Playgroud)
这是我的$ .Ajax:
var productServiceUrl = 'http://localhost:3523/Service.svc/HelloWorld';
$.ajax({
url: productServiceUrl,
type: "POST",
dataType: "xml",
data: soapMessage,
complete: endSaveProduct,
contentType: "text/xml; charset=\"utf-8\"",
async: true,
error: function (xhr, textStatus, errorThrown) {
alert(errorThrown);
}
});
Run Code Online (Sandbox Code Playgroud)
这里是请求和响应的详细信息(我在谷歌浏览器中跟踪这个):
请求Hedear
Run Code Online (Sandbox Code Playgroud)POST /Service.svc/HelloWorld HTTP/1.1 Host: localhost:3523 Connection: keep-alive Content-Length: 550 Origin: http://localhost:3523 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.15 Safari/535.2 Content-Type: text/xml; charset="UTF-8" Accept: application/xml, text/xml, */*; q=0.01 Referer: http://localhost:3523/WcfService.htm Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
和我的响应标题
HTTP/1.1 400 Bad Request
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 04 Jan 2012 14:56:06 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Length: 0
Connection: Close
Run Code Online (Sandbox Code Playgroud)
请求负载:
<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/wsdl/soap/"> <soap:Header><Action soap:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/HelloWorld</Action> </soap:Header><soap:Body><HelloWorld xmlns="http://tempuri.org/"></HelloWorld></soap:Body> </soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
如果我的WCF Web服务:
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Xml,
RequestFormat = WebMessageFormat.Xml)]
String HelloWorld();
Run Code Online (Sandbox Code Playgroud)
我找到了方法.我使用这个解决方案:这是我的Web服务接口:
public interface IService
{
[OperationContract]
//[WebGet(UriTemplate = "/data?id={value}", ResponseFormat = WebMessageFormat.Json)]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
string GetData(int value);
}
Run Code Online (Sandbox Code Playgroud)
这是我在Web服务中对此功能的启示:
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
Run Code Online (Sandbox Code Playgroud)
这是连接到WCF Web服务的脚本:
<script type="text/javascript">
$(document).ready(function () {
var bhRequest = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"<s:Body>" +
"<GetData xmlns=\"http://tempuri.org/\">" +
"<value>10</value>" +
"</GetData>" +
"</s:Body>" +
"</s:Envelope>";
$("#btnWCFBasicHttp").click(function () {
$.ajax({
type: "POST",
url: "Service.svc",
data: bhRequest,
timeout: 10000,
contentType: "text/xml",
dataType: "xml",
beforeSend: function (xhr) {
xhr.setRequestHeader("SOAPAction", "http://tempuri.org/IService/GetData");
},
success: function (data) {
$(data).find("GetDataResponse").each(function () {
alert($(this).find("GetDataResult").text());
});
},
error: function (xhr, status, error) {
alert(error);
}
});
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
记住WCF(url: "Service.svc")在我的html页面附近.
| 归档时间: |
|
| 查看次数: |
12659 次 |
| 最近记录: |