开发者社区> 技术小阿哥> 正文

深入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.gif Vote方法代码

  在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.gif Vote.xsl文件内容

  接下来就是我们的HTML文件。我们的目的非常简单,就是得到用户输入的信息,拼接成URL之后在新窗口中打开。因此我们在这里根本无需使用Atlas。代码如下:
ContractedBlock.gif HTML代码

  点击“Vote”按钮后,就会调用Javascript函数Vote()。代码如下:
ContractedBlock.gif Javascript代码

  我们需要拼接的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,在必要时刻将一个基础类型转化成复杂类型。



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



本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/60794,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
http详解笔记学习9-socket编程怎么发送get请求-1
http详解笔记学习9-socket编程怎么发送get请求-1
39 0
Angular最新教程-第七节HTTP get post 设置头部 跨域访问
Angular最新教程-第七节HTTP get post 设置头部 跨域访问
212 0
大话JMeter2|正确get参数传递和HTTP如何正确使用
![](https://ceshiren.com/uploads/default/original/3X/3/0/3061c49d73b39d6524ffe274f626a9d574786ca7.gif) 上节课展示了JMeter的基础用法:录制回放功能,断言,聚合报告。李政道教授谈论学习方法,他表明我们可以获取很多信息。 但是,从了解到理解还有一段路要走。只有亲手练了才能变成理解,能获取
54 0
HTTP - Get / Post 请求中,URL & FORM 参数如何分别获取?
HTTP - Get / Post 请求中,URL & FORM 参数如何分别获取?
125 0
JavaWeb - HTTP 请求中 Get 和 Post 区别(二)
JavaWeb - HTTP 请求中 Get 和 Post 区别(二)
63 0
JavaWeb - HTTP 请求中 Get 和 Post 区别(一)
JavaWeb - HTTP 请求中 Get 和 Post 区别(一)
108 0
张三吃饭——竟吃出了HTTP中GET和POST的区别?
文章通过故事情节的引入,介绍了http连接中GET和POST的区别以及原因。
69 0
【前端 · 面试 】HTTP 总结(五)—— GET 和 POST
最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。
57 0
大话JMeter2|正确get参数传递和HTTP如何正确使用
大话JMeter2|正确get参数传递和HTTP如何正确使用
52 0
大话JMeter2|正确get参数传递和HTTP如何正确使用
![](https://ceshiren.com/uploads/default/original/3X/3/0/3061c49d73b39d6524ffe274f626a9d574786ca7.gif) 上节课展示了JMeter的基础用法:录制回放功能,断言,聚合报告。李政道教授谈论学习方法,他表明我们可以获取很多信息。 但是,从了解到理解还有一段路要走。只有亲手练了才能变成理解,能获取
59 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
边缘安全,让Web加速有保障
立即下载
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路
立即下载
CDN助力企业网站进入HTTPS时代
立即下载