知识大全 客户端访问Web Service方法的一个细节

Posted

篇首语:男儿欲遂平生志,五经勤向窗前读。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 客户端访问Web Service方法的一个细节相关的知识,希望对你有一定的参考价值。

客户端访问Web Service方法的一个细节  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  之前遇到一个要求 需要能够取消一个正在进行中的Web Service 这也是我第一次遇到这个功能 不过不难 我想 既然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 = ; 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对象?跟踪了代码之后 不大不小地晕了一下 原来问题出在这里

  DemoService _staticInstance = new DemoService(); DemoService DemoMethod = function(onSuccess onFailed userContext) DemoService _staticInstance DemoMethod(onSuccess onFailed userContext);

  虽然早就知道Web Service代理会在类上创建一个Singleton对象 并且创建静态方法再委托给那个实例上的相应方法 却一直没有意识到这个细节 在上面的静态方法中 居然是直接调用了DemoMethod方法 却没有将结果返回出来 真让我哭笑不得了一下

  不过问题时非常容易解决的 只要使用如下的方式在客户端调用WebService方法就可以了

  var request = DemoService _staticInstance DemoMethod(onComplete);

  不过这个做法似乎……有些奇怪?那么您也可以这样

  var demoService = new DemoService(); var request = demoService DemoMethod(onComplete);

cha138/Article/program/net/201311/11513

相关参考

知识大全 使用cxf写web service的简单实例

实例步骤      第一步在myeclipse中新建一个web项目名为webservicetest并导入依赖的jar包(cxfspringa

知识大全 使用eclipse调用.net web service

  以前我用的开发框架都是net现在换成javaEE框架和linux平台还需要一段时间的学习有时在测试工作中需要实现一些功能但是又不会用java实现怎么办呢?这里有一个方法使用net的框架开发webs

知识大全 c#动态调用Web Service

c#动态调用WebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 动态IP的Web service调用

动态IP的Webservice调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  系统架构需要使

知识大全 使用Axis开发Web Service[2]

Java高级开发:使用Axis开发WebService[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 使用Axis开发Web Service[1]

Java高级开发:使用Axis开发WebService[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Spring集成XFire开发Web Service

Spring集成XFire开发WebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 实现异步调用Web Service,防止页面超时

实现异步调用WebService,防止页面超时  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  普

知识大全 学好基本功之熟练调用 Web Service

学好基本功之熟练调用WebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是W

知识大全 .NET Framework中使用XML Web Service

.NETFramework中使用XMLWebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一