作者:Dflying Chen (http://dflying.cnblogs.com/)

注:Atlas中的Mashup极其复杂,其中涉及众多的对象与架构,为了写这篇文章,我花了不少时间学习研究。同时,关于这方面资源的匮乏简直到了令人发指的地步。往往Google一下居然一条记录都没有……但Mashup在现今的AJAX程序中又是如此重要,近一段时间内,我也收到了好多朋友的消息,希望我能介绍一下Mashup的心得,这里我就斗胆献丑了。但目前为止,我对Atlas中的Mashup也只是粗通皮毛,所以这个系列中将仅仅通过一些实例应用来顺便说出我的理解,其中一定有很多错误疏漏之处,还请各位不吝斧正!也欢迎大家探讨实际项目中遇到的问题。

对于传统的Web程序,浏览器只与一台服务器进行通信,并从这台服务器上得到所有信息。同时出于安全考虑,页面上的JavaScript也只允许和同一台服务器通信。而随着目前Internet的发展,越来越多的Web Service分散在互联网的各处,作为开发人员的我们自然希望能够充分利用这些已经存在的Service,这时,我们就需要对远端的Web Service做以Mashup。这是一项常见的需求,也是一项重复性很高的劳动,幸运的是,ASP.NET Atlas充分认识到了这一点,并对此有着强大的内建支持。

Atlas通过引入一种新的HTTP模块——asbx文件(其中b代表Bridge),来实现对远端Web Service请求的Mashup。asbx文件其实是一个结构化的XML文档,里面包含了对远端Web Service方法的封装,当然,您也可以同时指定一个CodeBehind CS文件用来对其进行一些复杂的控制。asbx文件和aspx文件位于同一台主机上。Atlas网站在编译的时候会根据asbx中的声明以及相应的CodeBehind文件(如果存在)将其编译并注册。这样当客户端JavaScript调用该asbx中定义的方法时,asbx会将其转发给实际的Web Service并将返回结果会送给客户端,起到一个Bridge的作用。而对于客户端,就和直接调用 同一主机上的Web Service没什么不一样。

如果您安装过Atlas的msi文件,并建立了一个Atlas Web Site,那么下面的配置已经为您做好了。否则,启用asbx的支持,您需要如下的操作:

  1. 在IIS的虚拟目录下按照下图所示,添加.asbx文件的映射。
  2. 在web.config的sectionGroup段添加:
<section name="webServices" type="Microsoft.Web.Configuration.WebServicesSection" />
  1. 在web.config的compilation段添加:
<buildProviders>
   <add extension=".asbx" type="Microsoft.Web.Services.BridgeBuildProvider"/>
</buildProviders>
  1. 在web.config的httphandlers段添加:
<add verb="*" path="*.asbx" type="Microsoft.Web.Services.ScriptHandlerFactory" validate="false"/>
  1. 在web.config的httpmodules段添加:
<add name="BridgeModule" type="Microsoft.Web.Services.BridgeModule"/>

下面让我们通过一个最简单的示例学习Atlas中Mashup的基本概念和asbx文件的基本结构。

首先,编写一个Web Service用来模拟在Internet上存在的一个服务。当然,这个服务没什么实际用处,仅仅是求两个integer的和:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://www.dflying.net/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class SimpleWebService : System.Web.Services.WebService
{
    [WebMethod]
    public int Add(int value1, int value2)
    {
        return value1 + value2;
    }
}

我将这个Web Service置于另外一台主机的IIS上,注意:我们应该更改web.config文件以允许通过HTTP GET对Web Service的访问,而不仅仅是默认的POST:

<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols >
</webServices>

完成之后,您可以在浏览器中测试一下,访问:http://dflyingchen/MyServices/SimpleWebService.asmx/Add?value1=1&value2=2(不要忘记更改前面相应的主机名),如果你能得到下图所示的结果,那么恭喜你,Web Service没问题了。

下面就是最有“技术含量”的asbx文件了:

<?xml version="1.0" encoding="utf-8" ?>
<bridge namespace="Test" className="SimpleWebService">

  <proxy type="Microsoft.Web.Services.BridgeRestProxy" 
         serviceUrl="http://dflyingchen/MyServices/SimpleWebService.asmx/Add" />

  <method name="Add">
    <input>
      <parameter name="value1" />
      <parameter name="value2" />
    </input>
  </method>
</bridge>

注意到作为一个合法的XML文件,asbx文件第一行是XML的声明。然后,对于本asbx文件,有如下部分:

  1. bridge段,声明该mashup的namespaceclass name。注意这两个属性代表的是客户端调用时所见的被mashup过的namespace和class name,并不是远端Web Service的namespace和class name。
  2. proxy段,声明该mashup的类型,这里我们指定为Microsoft.Web.Services.BridgeRestProxy相应的,指定一个代表服务URL的string:http://dflyingchen/MyServices/SimpleWebService.asmx/Add 。
  3. method段,您可以添加多个method段,每一个代表一个定义在上述URL中的服务。这里我们指定了Method的名称,同样的,它代表的仅是客户端调用的名称(这样客户端将以namespace.classname.methodname()的方式调用该mashup)。
  4. input段,其中通过parameter标记声明了该方法的参数。parameter标记中的name属性代表参数名,注意这里声明的参数名要和远端Web Method的参数名保持一致。这里我们声明了两个参数,与上面定义的Web Method的两个参数对应。

到此为止,一个最简单的asbx文件就完成了。当然,上述介绍与完备相距甚远。关于asbx文件中的其它可选声明,目前并没有官方文档,我只能在接下来的几个例子中根据使用情况适当介绍。

我们再来建立一个Atlas Page测试一下该mashup,首先添加一个ScriptManager,并添加对上述mashup的引用,注意扩展名为asbx,不要写习惯了就直接写成了asmx:

<atlas:ScriptManager ID="sm" runat="server">
    <Services>
        <atlas:ServiceReference Path="SimpleBridge.asbx" />
    </Services>
</atlas:ScriptManager>

然后添加一段HTML,用来提供用户输入,引发调用并显示结果;

<input id="input1" type="text" value="1" size="3" />
<input id="input2" type="text" value="2" size="3" />
<input id="doAdd" type="button" value="Add" onclick="return doAdd_onclick()" />
<div id="result" />

最后,一小段JavaScript调用mashup方法:

function doAdd_onclick() {
    var int1 = $('input1').value;
    var int2 = $('input2').value;
    Test.SimpleWebService.Add({'value1': int1,'value2': int2}, onAddComplete);
}
function onAddComplete(result) {
    $('result').innerHTML = "Result is: " + result;
}

注意调用方法的签名是Test.SimpleWebService.Add(),其中的每一部分都在asbx文件中有所声明。另外,返回值是一个XML string,这里为了简化,就直接输出到页面上了。

浏览器中如下:

示例程序源代码可以在此下载:http://files.cnblogs.com/dflying/SimpleBridgeDemo.rar

在接下来的几个实例中,我将对一些“真实有用”的Web Service进行mashup并应用到我们的程序中。

转载于:https://www.cnblogs.com/dflying/archive/2006/05/24/Atlas_and_Web_Service__Calling_Remote_Service_by_Creating_Mashup__Introduction_and_Basic_Demo.html

在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(基础知识以及简单示例)...相关推荐

  1. JavaScript 中Proxy(代理)和Reflect(反射)基础知识

    JavaScript 中Proxy(代理)和Reflect(反射)基础知识   最近在Vue3项目开发中,我们经常使用与Proxy和Reflect相关的函数.这些函数以各种形式出现在Vue3 Reac ...

  2. ASP.NET Core中使用表达式树创建URL

    当我们在ASP.NET Core中生成一个action的url会这样写: var url=_urlHelper.Action("Index", "Home"); ...

  3. MySQL 中的存储过程的创建及调用

    一.什么是存储过程 存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过制定存储过程的名字并给定参数(如果需要)来调 ...

  4. 计算机中常用的矢量图形文件,第3章 电脑图像基础知识.ppt

    <第3章 电脑图像基础知识.ppt>由会员分享,可在线阅读,更多相关<第3章 电脑图像基础知识.ppt(15页珍藏版)>请在人人文库网上搜索. 1.第03章 电脑图像基础知识, ...

  5. 计算机术语中CPU是指______,试题题库_计算机基础知识考试试卷全套.doc

    试题题库_计算机基础知识考试试卷全套.doc 第一部分 计算机基础知识 (一)单项选择题 1. 世界上第一台计算机使用的物理器件是( ). A)电子管 B)继电器 C)晶体管 D)集成电路 2. 第四 ...

  6. Gradle中的buildScript,gradle wrapper,dependencies等一些基础知识

    就想收藏一篇好文,哈哈,无他 Gradle中的buildScript代码块 - 黄博文 然后记录一些gradle的基础知识: 1.gradle wrapper就是对gradle的封装,可以理解为项目内 ...

  7. python dataframe去掉索引_python中pandas.DataFrame(创建、索引、增添与删除)的简单操作方法介绍...

    这篇文章python中pandas.DataFrame(创建.索引.增添与删除)的简单操作方法介绍,其中包括创建.索引.增添与删除等的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看 ...

  8. 计算机一级在上网题中怎么新建文本文件,计算机一级上网题教程 计算机基础知识题库...

    计算机一级上网题怎么做? 在计算机一级考试中,有一道在线题困扰着很多人.我不能从这个问题开始.我来教你怎么解决这个问题.1网上试题通常是计算机考试的最后一道题,内容是发电子邮件. 2. 根据第一项,在 ...

  9. easyui 调用dialog中的方法_SolidWorks中标准件库的创建及调用方法

    在使用SolidWorks进行产品设计时,常用的标准件(如螺栓.螺母.垫圈等)通常可以在安装了SolidWorksToolbox插件后调出使用,而许多标准件在Toolbox并不存在,不能从插件中直接调 ...

最新文章

  1. python在word中的应用_不能在worddoc中使用docx python应用表样式
  2. 【直播】鱼佬:心跳信号分类赛高分突破
  3. LinkedBlockingQueue 注记
  4. React Native 环境搭建步骤
  5. 使用OneHotEncoderEstimator操作Affairs
  6. 图解设计模式-Abstract Factory模式
  7. Pthreads mutex vs Pthreads spinlock
  8. 牛客 - 牛牛的最大兴趣组(思维+数论)
  9. 牛客网【每日一题】4月2日 月月查华华的手机
  10. jQuery的name选择器 模糊匹配
  11. “神兽”出笼谁来管?多地试水暑期托管班
  12. micropython按键控制流水灯_【MicroPython】LAB01 - 流水灯
  13. AS 更新项目gradle方法
  14. gtx 750 linux驱动下载,Ubuntu 12.04安装NVIDIA GTX750显卡驱动
  15. 团队管理21--梯队培养
  16. 从一个例子来看Tagged Pointer特性
  17. property follows cocoa naming convention for returning ‘owned‘ objects
  18. Android开发屏幕适配全攻略
  19. 微信怎么关闭wifi定位服务器,WiFi定位到底怎么做的,看完这个你就知道了
  20. 族蚂和凡科两大自助建站平台性价比哪家强?

热门文章

  1. ubuntu18.04安装chrome和优化界面
  2. uva 524(Prime Ring Problem UVA - 524 )
  3. 通过Xshell登录远程服务器实时查看log日志
  4. [BZOJ 1834] [ZJOI2010]network 网络扩容
  5. 公共的Controler,是给非授权的用户访问
  6. ORACLE事务提交
  7. SpringCloud与Seata分布式事务初体验
  8. 利用Caffe实现mnist的数据训练
  9. jquery下载地址:https://code.jquery.com/jquery/ 影响范围: 版本低于1.7的jQuery过滤用户输入数据所使用的正则表达式存在缺陷,可能导致LOCA
  10. Crystal Reports第一张报表