7.6.1 通过webbehavior.htc调用Web Service
7.6 JavaScript如何调用Web Service
本节将为你介绍JavaScript如何调用Web Service。
7.6.1 通过webbehavior.htc调用Web Service
webservice.htc是微软提供的一个对Web Servie常用方法的封装,可以从微软官方网站下载,安装IE webcontrols时也会安装到你的网站根目录下,使用时需要注意路径。请注意代码中body的属性设置。
实现步骤如下。
(1)首先,我们先创建一个加法运算的Web Service,例如:
- using System.Web;
- using System.Web.Services;
- namespace WebService1
- {
- //<summary>
- //Service1 的摘要说明
- //</summary>
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [ToolboxItem(false)]
- public class Service1 : System.Web.Services.WebService
- {
- //加法的例子
- [WebMethod]
- public int Add(int a, int b)
- {
- return a + b;
- }
- }
- }
然后发布,并得到其wsdl。
(2)下载webbehavior.htc这个文件(本书附件中有),然后放到你的Web当前目录下。
(3)在要调用Web Service的页面中,进行如下修改:
- <body>
- <div id="addservice" style="behavior:url(webservice.htc)"></div>
- </body>
这里我们将div id命名为有意义的名称,并且指定style为 webservice行为。接着,我们要书写JavaScript来调用Web Serice了。
首先,我们在JavaScript中调用其addservice.useService("http://localhost/services/math.asmx?WSDL","MyMath");使用id.useService(WSDLL路径,简单的命名方式);我们之前设定的id是addservice,为了给客户端调用方便,我们这里起了名称,叫MyMath。而为了保证能正确调用webservice,必须在body里的onload事件里,马上加载处理webservice调用的JavaScript,如下:
- <script language="JavaScript">
- function init()
- {
- addservice.useService("http://localhost/services/math.asmx?WSDL","MyMath"); }
- </script>
- <body onload="init()">
- <div id="service" style="behavior:url(webservice.htc)">
- </div>
- </body>
上面我们通过webservice行为,首先得到了返回webservice的wsdl,接下来我们就要进行调用了,调用的格式如下:
- iCallID = id.FriendlyName.callService([CallbackHandler,]"MethodName",
- Param1,Param2, ...);
这里id是我们在div里设置的id,而FridndbyName是我们刚才为方法起的名,这里就是MyMath了,而CallbackHandler是使用回调函数的过程名,如果无设置的话,则默认是使用onresult所调用的方法来进行处理,而param1、param2等则是传入的参数了。例如:
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Js 调用 WebService实例</title>
- <script language="JavaScript">
- function init()
- {
- //改成你自己的实际地址
- divservice.useService("http://localhost:12074/Service1.asmx?WSDL",
- "MyMath");
- }
- function onWSresult()
- {
- if((event.result.error)&&(iCallID==event.result.id))//如果有错误
- {
- //得到详细错误信息
- var xfaultcode = event.result.errorDetail.code;
- var xfaultstring = event.result.errorDetail.string;
- var xfaultsoap = event.result.errorDetail.raw;
- //错误处理代码
- }
- else
- if((!event.result.error) && (iCallID == event.result.id))
- {
- divservice.innerHTML= event.result.value;//显示计算结果
- }
- else
- {
- alert("Something else fired the event!");
- }
- }
- </script>
- </head>
- <body onload="init()">
- <div>
- 第1个值:<input type='text' id='ip1' name="ip1"><br>
- 第2个值:<input type='text' id='ip2' name="ip2"><br>
- <button onclick='iCallID=divservice.MyMath.callService("Add",ip1.value,
- ip2.value);'
- id="Button1" type="button">s调用加法方法</button><br>
- 结果:<div id="divservice" style="behavior:url(webservice.htc)" onresult=
- "onWSresult()">
- </div>
- </div>
- </body>
- </html>
代码中使用了onresult方式返回处理结果,并在div部分的onresult中指定执行处理的方法,这里用的是onWsresult()方法,其中根据返回的信息来判断是否出错,出错的话则显示。
欢迎添加我的公众号一起深入探讨技术手艺人的那些事!
如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!