.net下用javascript调用webservice

转帖|其它|编辑:郝浩|2008-10-29 10:24:00.000|阅读 1231 次

概述:.net 下用javascript调用webservice的话,要用到webservice behavior。下面以一个例子讲解之,比较简单

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  1 、首先,要创建一个webservice,比如

  < %@ WebService Language="C#" class=MyMath %>

  using System;

  using System.Web.Services;

  public class MyMath {

    [WebMethod]

    public int add(int a, int b)

    {

      return a + b;

    }

    [WebMethod]

    public int suBTract(int a, int b)

    {

      return a - b;

    }

  }
 
   然后发布,先得到其wsdl。

  2、首先,我们要下载webbehavior.htc这个文件(可以到 [link=http://msdn.microsoft.com/archive/en-us/samples/internet/behaviors/library/webservice/webservice.htc])

  去下载,然后放到你的web当前目录下

  然后在要调用webserice的页面中,修改如下

  < body>

  < div id="addservice" style="behavior:url(webservice.htc)">< /div>

  < /body>
 
  这里我们将div id命名为有意义的名称,并且指定style为 webservice行为。接着,我们要书写Javascript来调用webserice了:

  首先,我们在javascript中,调用其wsdladdservice.useService("http://localhost/services/math.asmx?WSDL","MyMath");

  使用id.useService(WSDLL路径,简单的命名方式);

  我们之前设定的id是addservice,而为了给客户端调用方便,我们这里起了名称,叫MyMath。而为了保证能正确调用webserice,必须在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>[SPAN]
 
  在上面,我们通过webservice行为,首先得到了返回webservice的wsdl,接下来我们要进行调用了,调用的格式如下: iCallID = id.FriendlyName.callService([CallbackHandler,] "MethodName", Param1, Param2, ...);

  这里id是我们在div里设置的id,而FridndbyName是我们刚才为方面而起的命,这里就是MyMath了,而CallbackHandler是使用回调函数的过程名,如果无设置的话,则默认是使用onresult所调用的方法来进行处理,下文会讲到,而param1,,param2等则是说传入的参数了,如:

  < SCRIPT language="JavaScript">

  // All these variables must be global,

  // because they are used in both init() and onresult().

  var iCallID = 0;

  var intA = 5;

  var intB = 6;

  function init()

  {

    // Establish the friendly name "MyMath" for the WebServiceURL

    service.useService("/services/math.asmx?WSDL","MyMath");

    // The following method doesn't specify a callback handler, so onWSresult() is used

    iCallID = service.MyMath.callService("add", intA, intB);

  }

  function onWSresult()

  {

    // if there is an error, and the call came from the call() in init()

    if((event.result.error)&&(iCallID==event.result.id))

    {

      // Pull the error information from the event.result.errorDetail properties

      var xfaultcode = event.result.errorDetail.code;

      var xfaultstring = event.result.errorDetail.string;

      var xfaultsoap = event.result.errorDetail.raw;

      // Add code to handle specific error codes here

    }

    // if there was no error, and the call came from the call() in init()

    else if((!event.result.error) && (iCallID == event.result.id))

    {

      // Show the arithmetic!

      alert(intA + ' + ' + intB + ' = ' + event.result.value);

    }

    else

    {

      alert("Something else fired the event!");

    }

  }

  < /SCRIPT>

  < body onload="init()">

  < div id="service" style="behavior:url(webservice.htc)" onresult="onWSresult()">

  < /div>

  < /body>[SPAN]

  注意,用onresult方式返回的话,要在div部分的onresult中指定处理的方法,这里是用onWsresult()方法,其中根据返回的信息来判断是否出错,出错的话则显示。

  如果用回调的话,则如下处理

  < SCRIPT language="JavaScript">
  // All these variables must be global,

  // because they are used in both init() and onResult().

  var iCallID = 0;

  var intA = 5;

  var intB = 6;

  function init()

  {

    // Establish the friendly name "MyMath" for the WebServiceURL

    service.useService("/services/math.asmx?WSDL","MyMath");

    // The following uses a callback handler named "mathResults"

    iCallID = service.MyMath.callService(mathResults, "add", intA, intB);

  }

  function mathResults(result)

  {

    // if there is an error, and the call came from the call() in init()

    if(result.error)

    {

      // Pull the error information from the event.result.errorDetail properties

      var xfaultcode = result.errorDetail.code;

      var xfaultstring = result.errorDetail.string;

      var xfaultsoap = result.errorDetail.raw;

      // Add code to handle specific error codes here

    }

    // if there was no error

    else

    {

      // Show the arithmetic

      alert(intA + ' + ' + intB + " = " + result.value);

    }

  }

  < /SCRIPT>

  < body onload="init()">

  < div id="service" style="behavior:url(webservice.htc)">

  < /div>

  < /body>


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:IT专家网论坛

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP