深入Atlas系列:Web Sevices Access in Atlas示例(4) - 使用HTTP GET调用Web Services方法...

  在之前的例子里,由于Atlas客户端在调用Web Services方法时总是使用了Sys.Net.ServiceMethod类,因此始终使用了HTTP POST方法与服务器端进行交互。POST方法有其好处,不过GET方法也自有其价值。我们在使用Atlas进行Web Services调用时,我们必须保证我们请求的Web Services资源在同一个Domain下面。这一点无论在使用XMLHttpRequest对象还是IFrame时都有这样的限制,当然这是为了安全性考虑(即使如此,Ajax还是带来了太多的security issues)。不过GET方法可以在某些情况下绕过这一点,例如在一个IFrame或新窗口中打开等等。虽然依然无法和不同Domain下Web services通信,但是如果只是为了“通知”的作用,已经足够了。

在Atlas中,它的“Web Services”被放在了一个特殊的运行环境中执行(在某些情况下会委托给ASP.NET原有组件执行,这点在之前的文章中有过分析),因此,即使我们不是通过AJAX方式访问,只要了解Atlas那一套特殊的运行环境的行为,依旧能够给我们带来一些别的使用方式。下面的示例就将使用Atlas服务器端对于Web Services调用的支持,来讲解如何使用HTTP GET来调用Web Services方法(除非特别说明,以下所有的解释均针对Atlas的扩展,而不是ASP.NET的原有Web Services支持)。

首先,我们写一个Web Serivces方法:
ContractedBlock.gifExpandedBlockStart.gif Vote方法代码
 1 [WebMethod]
 2 [WebOperation(true, ResponseFormatMode.Xml)]
 3 public XmlDocument Vote(string name, int id)
 4 {
 5     XmlDocument responseDoc = new XmlDocument();
 6     responseDoc.LoadXml(
 7         "<?xml-stylesheet type=\"text/xsl\" href=\"Vote.xsl\"?>" +
 8         "<response><user></user><id></id></response>");
 9     responseDoc.SelectSingleNode("//user").InnerText = name;
10     responseDoc.SelectSingleNode("//id").InnerText = id.ToString();
11     return responseDoc;
12 }

在Atlas中,HTTP POST为Web Services的默认支持方法,也是必然的支持方法。而如果需要使该Web Service方法支持HTTP GET的话,就必须如上面代码一样,使用Microsoft.Web.Services.WebOperationAttribute进行标注。WebOperationAttribute的第一个参数就是getVerbEnabled,true则表示支持HTTP GET方法。第二个参数Microsoft.Web.Services.ResponseFormatMode.Xml则表示结果对象的输出方式为XML,而不是默认的JSON。

在这里,我们使用XML的原因是因为JSON在这里没有任何意义。返回JSON后是为了在获得这些内容之后通过Javascript函数eval执行,从而获得JSON表示的对象。而在这里,我们的目的是将结果显示给用户看,所以使用XML形式返回,再加上XSL的支持,就能以HTML的形式显示给用户了。

然后就是简单的XSL:
ContractedBlock.gifExpandedBlockStart.gif Vote.xsl文件内容
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <xsl:stylesheet version="1.0"
 3     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 4     <xsl:template match="/response">
 5         <html>
 6             <head>
 7                 <title>Thanks for your participation.</title>
 8             </head>
 9             <body style="font-family:Verdana; font-size:13px;">
10                 <h4>Thanks for your participation.</h4>
11                 <div>
12                     <xsl:text>Dear </xsl:text>
13                     <xsl:value-of select="user"/>
14                     <xsl:text>, you've voted for item </xsl:text>
15                     <xsl:value-of select="id"/>
16                     <xsl:text>.</xsl:text>
17                 </div>
18             </body>
19         </html>
20     </xsl:template>
21 </xsl:stylesheet> 

接下来就是我们的HTML文件。我们的目的非常简单,就是得到用户输入的信息,拼接成URL之后在新窗口中打开。因此我们在这里根本无需使用Atlas。代码如下:
ContractedBlock.gifExpandedBlockStart.gif HTML代码
 1 <div>Name:<input type="text" id="txtName" /></div>
 2 <div>Item:
 3 <select id="comboItem">
 4     <option value="1">Item 1</option>
 5     <option value="2">Item 2</option>
 6     <option value="3">Item 3</option>
 7     <option value="4">Item 4</option>
 8     <option value="5">Item 5</option>
 9 </select>
10 </div>
11 <input type="button" value="Vote" onclick="vote()" />

点击“Vote”按钮后,就会调用Javascript函数Vote()。代码如下:
ContractedBlock.gifExpandedBlockStart.gif Javascript代码
 1 <script language="javascript">
 2     function vote()
 3     {
 4         var url = "HttpGetWebService.asmx?mn=Vote";
 5         url += ("&name=" + encodeURI(document.getElementById("txtName").value));
 6         url += ("&id=" + document.getElementById("comboItem").value);
 7 
 8         window.open(url);
 9     }
10 </script>

我们需要拼接的URL很简单:首先使用在QueryString里将mn设为我们即将调用的Web Services方法名,然后就是在QueryString里附加Web Services方法所需的参数了。请注意,既然是使用URL拼接,那么就必须使用encodeURI进行编码后才能使用,否则可能会出现异常情况。

我们现在来看一下使用情况。首先打开HTML页面:
UseGettoInvokeWS.jpg

输入姓名,选择下拉框中的其中一项,然后点击“Vote”按钮,则可以在弹出窗口中看到结果:
UseGettoInvokeWS_3.jpg


这就是使用了HTTP GET方法调用Web Services方法的示例,使用它可以跨域名地传递数据,虽然依旧不能进行交互。

请注意它使用了Atlas的Web Services运行环境,离开了它就不能这么做了。另外,由于使用了QueryString来传递数据类型,因此如此简单地应用这个方法的话,就只能在Web Services方法中使用基本类型地参数了,否则服务器端将会抛出异常。不过,Atlas也想到了这一点,在下一篇文章里,我将提供示例来解释一下如何告诉Atlas,在必要时刻将一个基础类型转化成复杂类型。



点击这里下载示例源文件。

转载于:https://www.cnblogs.com/JeffreyZhao/archive/2006/10/18/Inside_Atlas_Series__Web_Services_Access_in_Atlas__Sample_4.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】ABP源码分析二十六:核心框架中的一些其他功能

本文是ABP核心项目源码分析的最后一篇&#xff0c;介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系。当然可以自定义的去实现IAbpSession使之与CLR的Session关联 IAbpSession&#xff1a;定义如下图中的四个属性。 NullAbpSessio…

【转】ABP源码分析二十七:ABP.Entity Framework

IRepository&#xff1a;接口定义了Repository常见的方法 AbpRepositoryBase&#xff1a;实现了IRepository接口的常见方法 EfRepositoryBase:实现了AbpRepositoryBase中定义的抽象方法&#xff1a;GetAll&#xff0c;Insert&#xff0c;Delete&#xff0c;Update。在实际项目…

泛型实现List(ListT)排序

代码 publicclassPost : IComparable<Post>{ privatestringid string.Empty; privatestringtitle string.Empty; privateintorderby; publicstringID { get{ returnid; } set{ id value; } } pu…

华为鸿蒙与佳华,华为鸿蒙系统发布,带来三大好消息

华为在6月2日举办鸿蒙产品发布会&#xff0c;正式推出搭载鸿蒙操作系统的智能手机。这意味着此前只用于智慧屏、可穿戴设备等产品的鸿蒙操作系统终于覆盖到华为最主要的终端。从目前市场上的操作系统市场比例上看&#xff0c;安卓占据了全球68.63%&#xff0c;苹果占据了30.99%…

【转】ABP源码分析二十八:ABP.MemoryDB

这个模块简单&#xff0c;且无实际作用&#xff08;该模块用于支持ABP框架单元测试的&#xff09;。一般实际项目中都有用数据库做持久化&#xff0c;用了数据库就无法用这个MemoryDB 模块了。原因在于ABP限制了UnitOfWork的类型只能有一个(前文以作介绍)&#xff0c;一般用了数…

【转】ABP源码分析二十九:ABP.MongoDb

这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类&#xff0c;封装了对MongoDb数据库的操作。 这个module通过引用MongoDB.Driver&#xff0c;MongoDB.Bson&#xff0c;MongoDB.Driver.Core,MongoDB.Driver.Legacy类库来操作MongoDb. 当项目不需要依赖于关系型…

html防替换资源,Webpack中有没有替换html静态资源的插件

比如html文件中有如下代码<div><!-- /dev 是开发目录 --><img src"/dev/img.png"></div>然后经过处理后变成如下<div><!-- /static 是上线目录, a7l3k2n是图片的hash --><!-- 同时把img.png从/dev目录移动到/static目录 --&g…

【转】ABP源码分析三十:ABP.RedisCache

ABP 通过StackExchange.Redis类库来操作Redis数据库。 AbpRedisCacheModule&#xff1a;完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRedisCacheConfig&#xff1a;定义了connectionStringKey和databaseIdAppSetting的值。这两个值对象redis 在web.config中的key值…

平板可以看html文档吗,iPad如何看电脑里的视频 如何使用Ipad看电脑里的电影

电脑上的视频怎么在iPad上观看&#xff1f;如何在ipad播放电脑中的视频首先&#xff0c;看你的视频格式。如果是mp4&#xff0c;就可以直接放入ipad自带浏览器或者通过itunes直接传。其他格式的需要下载第三方播放器&#xff0c;目前使用较多的支持高清播放的有Oplayer&#xf…

【转】ABP源码分析三十一:ABP.AutoMapper

这个模块封装了Automapper,使其更易于使用。 下图描述了改模块涉及的所有类之间的关系。 AutoMapAttribute&#xff0c;AutoMapFromAttribute和AutoMapToAttribute&#xff1a;这三个attribute用于标注一个类到另外一个类的map方向。 AutoMapperHelper: 通过调用Automapper的A…

SQL语言的事务机制_转摘

什么是数据库事务  数据库事务是指作为单个逻辑工作单元执行的一系列操作。设想网上购物的一次交易&#xff0c;其付款过程至少包括以下几步数据库操作&#xff1a;   更新客户所购商品的库存信息    保存客户付款信息--可能包括与银行系统的交互    生成订单并且保…

html背景定位,css background-position center left right top bottom代表意思

background-position:center right这里center right分别代表什么,引入对图片背景定位介绍background-position是用于定位背景图片中对象中显示定位&#xff0c;比如图片作为背景时在对象内什么位置开始显示&#xff0c;显示样式等。比如让一个图片作为对象背景距离对象左边或右…

【转】ABP源码分析三十二:ABP.SignalR

Realtime Realtime是ABP底层模块提供的功能&#xff0c;用于管理在线用户。它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在线用户的信息 OnlineClientManager/IOnlineClientManager: 用于提供基本维护在线用户的方法。其内部维护了…

【转】ABP源码分析三十三:ABP.Web

ABP.Web模块并不复杂&#xff0c;主要完成ABP系统的初始化和一些基础功能的实现。 AbpWebApplication : 继承自ASP.Net的HttpApplication类&#xff0c;主要完成下面三件事 一&#xff0c;在Application_Start完成AbpBootstrapper的初始化。整个ABP系统的初始化就是通过AbpBoo…

【转】ABP源码分析三十四:ABP.Web.Mvc

ABP.Web.Mvc模块主要完成两个任务&#xff1a; 第一&#xff0c;通过自定义的AbpController抽象基类封装ABP核心模块中的功能&#xff0c;以便利的方式提供给我们创建controller使用。 第二&#xff0c;一些常见的基础功能的实现。 AbpController&#xff1a;这是一个抽象基类…

地球化学图解系统GCDPlot 0.33

地球化学 图解 系统GCDPlot 0.33发布&#xff0c;新增了Excel 2007支持。下载 地址&#xff1a;GCDPlot下载GCDPlot 是一个进行地球化学图解、CIPW计算的 Microsoft Excel VBA 程序&#xff0c;GCDPlot 可以使用 Excel 的数据以标准的 Excel 图表格式绘制各类地球化学图解&am…

【转】ABP源码分析三十五:ABP中动态WebAPI原理解析

动态WebAPI应该算是ABP中最Magic的功能之一了吧。开发人员无须定义继承自ApiController的类&#xff0c;只须重用Application Service中的类就可以对外提供WebAPI的功能&#xff0c;这应该算是对DRY的最佳诠释了. 如下图所示&#xff0c;一行代码就为所有实现了IApplicationSer…

jstl处理栏目与子栏目_Detelogy智能前处理设备微展厅P2:再添新品

时隔小半年&#xff0c;新一轮Detelogy产品总览展示栏目再与大家见面。事不宜迟&#xff0c;点击视频即刻进入我们的智能前处理设备微展厅。 知乎视频​www.zhihu.com01 高效多样品前处理系统02 智能浓缩设备全系列03 智能湿法消解设备应用领域农残、兽残检测有机磷类、有机氯类…

【转】ABP源码分析三十六:ABP.Web.Api

这里的内容和ABP 动态webapi没有关系。除了动态webapi&#xff0c;ABP必然是支持使用传统的webApi。ABP.Web.Api模块中实现了一些同意的基础功能&#xff0c;以方便我们创建和使用asp.net webApi。 AbpApiController&#xff1a;这是一个抽象基类&#xff0c;继承自ApiControl…

408最后计算机网络题库,2021考研计算机统考408专业基础综合题库

**部分为历年考研真题。提供2009&#xff5e;2018年考研真题及参考答案&#xff0c;其中2009&#xff5e;2015年每道真题均提供详细答案解析&#xff0c;通过对真题的演练和分析&#xff0c;可以帮助学员牢牢抓住计算机学科专业基础综合考试的命题特点&#xff0c;提高复习效率…