Atlas给我们提供了一种非常简单的方式去调用web service,大大的简化了我们开发的复杂性。在Atlas中标准的调用web service方法是在页面中添加一个ScriptManager,然后将所需的web service添加到Services Template下,如:

<atlas:ScriptManager ID="scriptManager" runat="server" EnableScriptComponents="true"
        <Services>
            <atlas:ServiceReference Path="~/atlas/samples/services/SimpleService.asmx" />
        </Services>
    </atlas:ScriptManager>

这样我们就可以通过如下javascript方法调用到远程的web service了

requestSimpleService = Quickstart.Samples.SimpleService.EchoString(
            document.getElementById('inputName').value,       //params
            OnComplete,     //Complete event
            OnTimeout       //Timeout event
            );

这个例子可以在atlas doc工程中找到,非常简单。然而,当我们需要在页面加载的时候调用web service的时候,就可能会遇到一定的麻烦了。在atlas doc的示例中也有这个例子,它是通过atlas 扩展的xml-script 客户端开发模式来调用,即如下代码:

<script type="text/xml-script">
        <page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
          <components>
            <application id="application" load="OnApplicationLoad" />
          </components>
        </page>
    </script >

这样我们就可以写一个名为OnApplicationLoad的javascript函数,在函数中去调用web service,同样非常方便。但是,当我们想用页面的ClientScript.RegisterStartupScript方法给页面添加一个加载时自动调用web service的时候,那麻烦就来了,它会提示你,要调用的web service类型未定义。在保证目标web service存在,ServiceReference引用也添加进来的情况下,为什么会出现这样的错误呢?一种可能是web service还没有被注册。因为我们用RegisterStartupScript注册javacript的,那么是不是这里注册的代码在atlas客户端代码前执行的?没错,问题就出在这里。用Fiddler调试页面请求的过程可以看到有这样一个请求atlas/atlas/samples/services/SimpleService.asmx/js,它返回的代码如下:

Type.registerNamespace('Quickstart.Samples');

Quickstart.Samples.SimpleService=new function() {

this.path = "http://localhost:2236/atlas/atlas/samples/services/SimpleService.asmx";

this.appPath = "http://localhost:2236/atlas/";

var cm=Sys.Net.ServiceMethod.createProxyMethod;

cm(this,"EchoString","s");

}

可以看出,这段代码就是atlas自动帮我们注册了web service的引用类型,没有这段类型定义,客户根本就没有我们要调用的类型存在,这里也可以看出,虽然我们调用web service用的命名空间和类型都是我们在服务端定义的一样,但实际上它是被客户端定义过的,实实在在的javacript类型。有了上面的分析后,接下来我们就不难得出我们的解决办法了,是的,在要调用之前先运行上面的js代码。而这样的话,我们也可以不用把web service引用添加到Services Template下。但是它要能被正确执行的前提仍然是要添加ScriptManager组件,因为这些操作需要atlas客户端脚本的支持,当然如果不想用ScriptManager,可以用手工的方式把这个脚本文件引用进来。

Btw:这两天在学习Prototype.js,它也扩展了javascript,简化了javascript和ajax的复杂性,而且构建于它基础的scriptaculous-js(http://script.aculo.us/)也是一个非常好的ajax框架实现(纯js)。但是它没有atlas这样更多的封装实现,特别是这两天想用它实现像atlas这么简单的web service调用,到目前还没有找到特别好的办法。实际上atlas如果脱离asp.net仍然可以很好的工作,只不过他的javascript太多了,目前也没有太多的文档说明,如何脱离asp.net,调用它的js库。希望在以后有空能够多看atlas的js库。目前还不了解atlas库和Prototype.js库,是互补的还是可以替换的(只知道$函数在atlas里也有),只能先配合着用了。

Atlas 调用web service相关推荐

  1. JAVA 调用Web Service

    JAVA 调用Web Service的方法 1.使用HttpClient  用到的jar文件:commons-httpclient-3.1.jar  方法:  预先定义好Soap请求数据,可以借助于X ...

  2. android调用web service(cxf)实例

    Google为ndroid平台开发Web Service提供了支持,提供了Ksoap2-android相关架包 1.下载该夹包可以直接登录http://code.google.com/p/ksoap2 ...

  3. 用cxf公布和调用web service

    用cxf发布和调用web service 最近我们的系统需要和一个第三方系统对接,对接的方式是通过web service,所以就学习了一下这方面的东西 用CXF来做web service是比较简单的, ...

  4. 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第三章<异步调用Web Service和页面中的类方法>,请同时 ...

  5. .NET应用程序中异步调用Web Service的几种方法 come from: veryhappy(wx.net)

    测试程序界面 图一,调用前界面 图二,调用后界面 详细代码实现 闲言少叙,直接进入主题吧.首先一个声明一个类(将来在客户端与服务器间传递): public class Class1     {     ...

  6. 使用Axis2调用Web Service

    本文作为使用Axis2创建Web Service的后篇,主要介绍如何使用Axis2调用Web Service.有关准备工作详情请参考前篇的内容. 在Eclipse的Packge Explorer中右键 ...

  7. 前台页面通过ajax环境和js调用web service的几种方法

    目录: 1.配置ajax环境 2.js中调用web service (ajax环境) 方法一 3.方法二 4.方法三 5.ajax中的错误处理 //6.写的比较快 如果有疏忽之处  如能指出感激不尽. ...

  8. VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法

    在VB.NET调用Web Service提供的服务 技术qq交流群:JavaDream:251572072 下面是一篇文章比较详细,其实具体操作很简单,把Web Service服务地址,利用工具(VS ...

  9. [Teamcenter 2007 开发实战] 调用web service

    前言 在TC的服务端开发中, 可以使用gsoap 来调用web service. 如何使用 gsoap  , 参考 gsoap 实现 C/C++ 调用web service 接下来介绍如何在TC中进行 ...

  10. Java 调用Web service 添加认证头(soapenv:Header)

    前言 有时候调用web service 会出现 Message does not conform to configured policy [ AuthenticationTokenPolicy(S) ...

最新文章

  1. Android DialogFragment 遇到 java.lang.IllegalStateException: Fragment already added: 的解决方法
  2. 数据结构和算法之——跳表
  3. PostgreSQL · 实现分析 · PostgreSQL 10.0 并行查询和外部表的结合
  4. 提交客户端证书_MQTT X v1.3.3 正式发布 - 跨平台 MQTT 5.0 桌面测试客户端
  5. java与平台无关的原因
  6. 插画类引导页设计灵感|友好结合,总能带给人惊喜~
  7. 我要做 Android 之 Service
  8. dataimagepng php_PHP decode data:image/png;base64
  9. java 文件目录操作_Java---文件夹及文件操作
  10. 吴锦华/明鑫: 用户态文件系统(FUSE)框架分析和实战
  11. Cisco思科交换机路由器命令快速入门
  12. python numpy库下载_Numpy函数库下载与安装教程
  13. 怎样把可调DC-DC变身为数控稳压电源
  14. 计算机组成原理A原是什么,计算机组成原理(A).doc
  15. 【电力电子技术DC-DC】Boost升压式变换器Simulink仿真
  16. 【Java基础】Java综合练习
  17. 共阴极和共阳极数码管显示的十六进制代码
  18. win10右键菜单发送到的选项为空怎么解决
  19. Python处理气象信息grib,grib2文件
  20. 【Docker】基础(二)

热门文章

  1. CodeForces405B - Jzzhu and Sequences 矩阵快速幂
  2. manifest离线缓存技术
  3. 23.2. REPLACE
  4. Hadoop完全分布式集群安装Hbase
  5. 如何在appconfig中配置服务的ip
  6. Red5边源服务器集群部署
  7. nginx虚拟主机配置实例
  8. 基于 pureXML 技术的数据库表结构扩展
  9. 「leetcode」349. 两个数组的交集:哈希值太大了,还是得用set
  10. poj Labeling Balls 3687 拓扑排序!!!!