我在ASP.NET中编写了Web服务,它有这样的地址:
http://localhost/RouteGen/Service.asmx
Web服务具有Web方法GetMessage
,它不接受任何参数并返回字符串。
Web服务没问题,我从其他ASP.NET应用程序甚至是Android应用程序调用它的方法。
服务器代码:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
[WebMethod]
public string GetMessage() {
return "Hello World";
}
}
现在我需要从javascript调用web方法GetMessage
。
html页面: (这个网页与网络服务代码没有关系,它完全是另一个项目!你可以认为它是用win记事本写的)
...
<body id="body1" onload="initialize()" style="behavior:url(webservice.htc)">
</body>
...
在initialize()方法中我正在调用:
...
service_init();
processResult();
还有这个功能:
function service_init()
{
body1.useService("http://localhost/RouteGen/Service.asmx?WSDL","TheService");
body1.TheService.callService("GetMessage");
}
function processResult(result)
{
alert(result);
}
我很满意:
1)在IE processResult()
中返回“undefined”
2)在Chrome和FireFox中它根本不起作用(在useService之后没有出现简单警报)
问题出在哪里?如何使javascript正常调用Web方法并从不同的浏览器调用?
答案 0 :(得分:5)
在Aspx部分,
添加ScriptManager标记,如下所示,
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference path="~/sample.asmx"/>
</Services>
</asp:ScriptManager>
在JavaScript中调用Web服务(sample.asmx),如下所示,
<script language="javascript" type="text/javascript">
function CalledOnAnyClientClickEvent()
{
var parameter1="dsfsfs";
NameSpace1.WebService1.HelloWorld(parameter1,OnSucess,OnFail);
}
function OnSuccess(asd)
{
alert(asd);//result will contain the return parameter from web service
}
function OnFail(asd)
{
alert(asd);
}
</script>
请参阅下面的Asmx部分(sample.asmx),
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
namespace NameSpace1
{
/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld(string par1)
{
//do your logic here
return "Hello World";
}
}
}
希望这会有所帮助......
答案 1 :(得分:2)
ASMX是一个SOAP Web服务。 SOAP相对复杂。
将数据返回到浏览器的更好方法是使用REST。可以使用JQUERY使用REST服务。
您可以构建使用REST并返回JSON结果的WCF服务。
如果您的服务与您的网页不在同一台服务器上,则必须使用JSONP之类的服务来进行跨域调用。