我有一个简单的ASP.NET Web服务
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service () {
}
[WebMethod]
public string SetName(string name) {
return "hello my dear friend " + name;
}
}
对于此Web服务,我创建了虚拟目录,因此我可以通过编带来接收访问权限 http://localhost:89/Service.asmx
我尝试通过简单的html页面使用jQuery调用它。为此我使用函数
CallWS() {
$.ajax({
type: "POST",
data: "{'name':'Pumba'}",
dataType: "json",
url: "http://localhost:89/Service.asmx/SetName",
contentType: "application/json; charset=utf-8",
success: function (msg) {
$('#DIVid').html(msg.d);
},
error: function (e) {
$('#DIVid').html("Error");
}
});
最有趣的事实:如果我使用我的WebService在项目中创建html页面并将url更改为Service.asmx / SetName,那么一切都很好。 但是,如果我尝试远程调用此Web服务 - 成功函数可以正常工作,但msg为空。
之后,我尝试通过SOAP调用此服务。它是相同的 - 在本地它运作良好,但远程 - 根本没有。
var ServiceUrl = 'http://localhost:89/Service.asmx?op=SetName';
function beginSetName(Name) {
var soapMessage = '<?xml version="1.0" encoding="utf-8"?> <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> <SetName xmlns="http://tempuri.org/"> <name>' + Name + '</name> </SetName> </soap:Body> </soap:Envelope>';
$.ajax({
url: ServiceUrl,
type: "POST",
dataType: "xml",
data: soapMessage,
complete: endSetName,
contentType: "text/xml; charset=\"utf-8\""
});
return false;
}
function endSetName(xmlHttpRequest, status)
{
$(xmlHttpRequest.responseXML)
.find('SetNameResult')
.each(function () {
var name = $(this).text();
alert(name);
});
}
在这种情况下,状态的值为“parseerror”。 你能帮我解决这个问题吗?如何通过jQuery通过url远程调用另一个WebService。
提前谢谢你, 格雷格
答案 0 :(得分:1)
由于Same Origin Policy,您需要修改AJAX以使用JSONP而不是JSON。查看jQuery Cross-Domain Ajax Guide。
答案 1 :(得分:0)
Pointy是正确的,但要解决此问题,您需要公开可从应用程序外部调用的端点。
我建议你看一下使用WCF创建JSON Web服务。