客户端访问Web Service方法的一个细节

时间:2010-02-06 12:29:17  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:uest对象,调用其abort方法就可以了。但是究竟应该如何得到这个对象呢?于是我粗略地阅读了一下代码。        首先假设有如下的Web Service方法定义(DemoService.asmx):      [ScriptService]   public class DemoService : System.Web.Services.WebService   {  &nbs...
  正文:之前遇到一个要求,需要能够取消一个正在进行中的Web Service。这也是我第一次遇到这个功能,不过不难,我想。既然ASP/ target=_blank class=infotextkey>asp.NET AJAX的客户端与服务器端通信完全通过Microsoft AJAX Library的异步通信层进行,那么我们只要得到正在请求Web Service的Sys.Net.WebRequest对象,调用其abort方法就可以了。但是究竟应该如何得到这个对象呢?于是我粗略地阅读了一下代码
  
    首先假设有如下的Web Service方法定义(DemoService.asmx):
  
  [ScriptService]
  public class DemoService : System.Web.Services.WebService
  {
   [WebMethod]
   public string DemoMethod()
   {
   return "Hello World";
   }
  }
  
    访问DemoService.asmx/jsdebug(或者将其使用ScriptManager引用到页面中之后)就能够得到如下的代理(片断、经过排版)类。
  
  var DemoService = function()
  {
   DemoService.initializeBase(this);
   this._timeout = 0;
   this._userContext = null;
   this._succeeded = null;
   this._failed = null;
  }
  DemoService.prototype =
  {
   DemoMethod:function(succeededCallback, failedCallback, userContext)
   {
   return this._invoke(
   DemoService.get_path(),
   'DemoMethod',
   false,
   {},
   succeededCallback,
   failedCallback,
   userContext);
   }
  }
  DemoService.registerClass('DemoService',Sys.Net.WebServiceProxy);
  ...
  
    显然,这个代理类继承了Sys.Net.WebServiceProxy类,于是我就把目光转向了其中的_invoke方法:
  
  function Sys$Net$WebServiceProxy$_invoke(
   servicePath, methodName, useGet, params, onSuccess, onFailure, userContext) {
  
   // validation omitted
   ...
  
   return Sys.Net.WebServiceProxy.invoke(
   servicePath,
   methodName,
   useGet,
   params,
   onSuccess,
   onFailure,
   userContext,
   this.get_timeout());
  }
  
    这下又将操作委托给了Sys.Net.WebServiceProxy.invoke静态方法,继续看代码:
  
  Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(
   servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout) {
  
   // validation omitted
   ...
  
   // Create a web request to make the method call
   var request = new Sys.Net.WebRequest();
  
   // preparing request omitted
   ...
  
   request.invoke();
  
   function onComplete(response, eventArgs) {
   // method body omitted
   }
  
   return request;
  }
  
    嗨,这不就是我所需要的Sys.Net.WebRequest对象吗?原来想要得到这个对象那么简单,于是我就写下了下面的代码:
  
  var request = DemoService.DemoMethod(onComplete);
  
    然后在必要时:
  
  request.abort();
  
    执行,出现了错误:request为undefined,为什么DemoMethod方法调用没有返回request对象?跟踪了代码之后,不大不小地晕了一下,原来问题出在这里:
客户端访问Web Service方法的一个细节》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12820.html


关键字:

关于《客户端访问Web Service方法的一个细节》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td