WCF学习之旅—实现支持REST客户端应用(二十四)

            WCF学习之旅—实现REST服务(二十二)

           WCF学习之旅—实现支持REST服务端应用(二十三)

          在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持REST的WCF服务端程序,本文介绍如何调用上一篇文章介绍的RestFul服务端。

 

五、Windows客户端调用

          为了强调REST的通用性,客户端不用WCF的形式调用服务,而是采用HttpWebResponse通过编程方式直接访问,消息格式我们选XML。

         首先,我们使用C#来封装一个RestHelper类,实现HTTP的GET和POST的请求方法,代码如下。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;namespace WinClient
{public class RestHelper{      /// <summary>/// 构造函数/// </summary>/// <param name="baseUrl"></param>public RestHelper(string baseUri){this.BaseUri = baseUri;} /// <summary>/// 基地址/// </summary>private string BaseUri; /// <summary>/// Post调用/// </summary>/// <param name="data"></param>/// <param name="uri"></param>/// <returns></returns>public string Post(string data, string uri){//Web访问对象string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);//转成网络流byte[] buf = UnicodeEncoding.UTF8.GetBytes(data); //设置myRequest.Method = "POST";myRequest.ContentLength = buf.Length;myRequest.ContentType = "text/html";// 发送请求Stream newStream = myRequest.GetRequestStream();newStream.Write(buf, 0, buf.Length);newStream.Close(); // 获得接口返回值HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);string ReturnXml = HttpUtility.HtmlDecode(reader.ReadToEnd());reader.Close();myResponse.Close();return ReturnXml;}/// <summary>/// Get调用/// </summary>/// <param name="uri"></param>/// <returns></returns>public string Get(string uri){//Web访问对象string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);// 获得接口返回值HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);string ReturnXml = HttpUtility.UrlDecode(reader.ReadToEnd());reader.Close();myResponse.Close();return ReturnXml;}}}

 

         其次,我们来实现主函数,按顺序调用两个接口,并显示返回值。需要注意XML约定的命名空间。

         我们在visual studio 2015中创建一个Windows窗体,名称为Form1,在Form1中放两个按钮,一个是“Rest Get”,另一个是"Rest Post"。

         1)在“Rest Get”按钮中实现Get方法,代码如下:

 private void buttonRest_Click(object sender, EventArgs e){RestHelper client = new RestHelper("http://127.0.0.1:8888/");//Getstring uriGet = string.Format("Books/Get/{0}", "2");string getData = client.Get(uriGet);textBoxMsg.Text = getData;}

 

     2) 在visual studio 2015中启动客户端应用程序,然后使用鼠标点击“Rest Get”按钮,结果如下图。

 

 

          3)在“Rest Post”按钮中实现Post方法,代码如下:    

  private void buttonRestPost_Click(object sender, EventArgs e){RestHelper client = new RestHelper("http://127.0.0.1:8888/");//Poststring uriPost = "Books/Add";string data = "<Books xmlns=\"http://tempuri.org/\"><AuthorID>1</AuthorID><Category>MS</Category><Name>数学之美(第二版) </Name><Numberofcopies>12</Numberofcopies><Price>37.99</Price><PublishDate>2009-01-11T00:00:00</PublishDate><Rating>A</Rating></Books>";string postResult = client.Post(data, uriPost);textBoxMsg.Text = "\r\n\r\n\r\n" + postResult;}

 

 

       4) 在visual studio 2015中启动客户端应用程序,然后使用鼠标点击“Rest Post”按钮,结果如下图。

 

 

 六、通过浏览器来访问WCF服务

     通过浏览器来访问WCF服务,主要是用jquery实现GET和POST访问,采用jquery访问REST服务,消息格式选择Xml。

      1) 我们在项目目录下面创建一个testRest.html文件,文件中的内容如下:

<html><head><script src="../../Scripts/jquery-2.2.3.min.js" type="text/javascript"></script><script type="text/javascript">  function AjaxGet() {$.ajax({type: "GET",contentType: "text/xml",url: "http://127.0.0.1:8888/Books/Get/5",                  success: function (data) {alert(data);$("#TextGet").val(data);},complete:function(XMLHttpRequest,textStatus){alert(XMLHttpRequest.responseText);alert(textStatus);            },error: function (data) {alert(data);}});}function HttpPost() {var str = "<Books xmlns=\"http://tempuri.org/\"><AuthorID>1</AuthorID><Category>MS</Category>
<Name>math book ver 1 </Name><Numberofcopies>12</Numberofcopies><Price>47.99</Price><PublishDate>2012-01-11T00:00:00</PublishDate>
<Rating>A</Rating></Books>
";$.ajax({type: "POST",contentType: "text/xml", // datatype:"xml", url: "http://127.0.0.1:8888/Books/Add",data: str,success: function (data) {alert(data);$("#TextPost").val(data);},complete:function(XMLHttpRequest,textStatus){alert(XMLHttpRequest.responseText);alert(textStatus); },error: function (data) {alert(data);}});}</script><style type="text/css">#TextGet{width: 700px;}#TextPost{width: 700px;}</style></head><body><input id="ButtonGet" type="button" value="GET" onclick="AjaxGet()" /><input id="TextGet" type="text" /><p/> <input id="ButtonPost" type="button" value="POST" onclick="HttpPost()" /><input id="TextPost" type="text" /></body></html>

 

     2)使用浏览器IE打开testRest.html,然后点击“ GET” 按钮,结果如下图。

 

 

 

  3)使用浏览器IE打开testRest.html,然后点击“ POST” 按钮,结果如下图。

 

 

备注:

       在firefox下面,怎么访问都不成功,都是报405Method not allowed)错误信息,在IE下面访问正常,具体原因没找到,如果有知道解决方案的,请留言。

 

转载于:https://www.cnblogs.com/chillsrc/p/5874703.html

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

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

相关文章

arduino智能浇花系统_创新成果 | 养花神器——智能浇花机

养花的人应该多少都会遇到这样的问题&#xff1a;需要根据花的习性定时浇水&#xff0c;但给花浇水是个「技术活」&#xff0c;不记得浇水或水浇多了&#xff0c;都会影响花的生长。针对这个问题&#xff0c;可以研究制作一个简单、实用的自动浇花机。根据检测土壤的湿度&#…

导出怎么用_微信好友账号怎么导出?微信怎么备份通讯录?

微信好友账号怎么导出?微信怎么备份通讯录?对于经常使用微信社交的朋友&#xff0c;都有一个共同的烦恼&#xff0c;那就是微信只能加5000多个好友&#xff0c;平时还怕一个不小心误删了微信好友&#xff0c;不要烦恼&#xff0c;小编教你导出微信好友!情景一&#xff1a;登录…

cvpr 深度估计_CVPR再现黑科技!你还在相信“眼见为实”?

全文共2634字&#xff0c;预计学习时长7分钟经常听到有人说&#xff0c;我除了自己的眼睛&#xff0c;什么也不信。自从09年阿凡达(Avatar)电影上映以来&#xff0c;3D渲染、虚拟现实的逼真度总是让人叹为观止。而今&#xff0c;10年过去&#xff0c;最近计算机视觉领域顶级会议…

360浏览器查看服务器响应内容,360浏览器怎么看3个月以前的浏览记录?

360浏览器怎么看3个月以前的浏览记录&#xff1f;有时候我们想查找浏览器的浏览记录&#xff0c;这个比较简单&#xff0c;Ctrlh直接查看&#xff0c;或者如图直接查看。然而有些记录在3个月之前就坑爹了&#xff0c;浏览器是看不到的怎么办呢&#xff1f;比如几天是10月1号&am…

【Electron】Electron开发入门(一):开发环境搭建

刚接触Electronjs开发PC端桌面应用程序的时候&#xff0c;简直一头雾水&#xff0c;搜了网上很多教程&#xff0c;有的要么讲的零零碎碎&#xff0c;要么就是版本太低&#xff0c;很多API语法都不能用了&#xff1b;现在我把一些有用的教程归纳一下&#xff0c;并把目前最新Ele…

方差为什么用平方不用绝对值_为什么戚风蛋糕用玉米油而不用黄油?

刚开始做蛋糕的时候是最喜欢改配方的&#xff0c;认为糖太多了把糖减点&#xff0c;油太多了把油减点&#xff0c;黄油更香能不能把玉米油换成黄油&#xff0c;西点不是大都用黄油的&#xff1f;来&#xff0c;来&#xff01;我们来讨论下为什么戚风蛋糕要用玉米油而不用黄油&a…

中国服务器销售排名,IDC Q3:华为FusionServer Pro智能服务器发货量、销售额荣登中国区x86标准服务器排名双冠王...

据IDC发布的《中国区服务器季度跟踪报告》显示&#xff0c;2020年第三季度中国区x86标准服务器市场(标注1)&#xff0c;华为FusionServer pro智能服务器发货量及销售额双居中国区第一(标注2)&#xff0c;其中机架、高密型号服务器&#xff0c;均列单品类发货量、销售额第一&…

旅游流的概念_2020年去张家界凤凰古城旅游亲身体验经历分享——实用攻略(图文)...

张家界冬暖夏凉&#xff0c;一年四季都适合游玩&#xff0c;是国内旅游首选的休闲度假胜地&#xff0c;作为到过张家界几次的我&#xff0c;写了一份比较详细的旅游攻略&#xff0c;仅供参考&#xff01;不喜勿喷。我是靖宇&#xff0c;喜欢旅行和记录&#xff0c;每去一个地方…

服务器虚拟光驱无法加载,Proxmox/创建PVE/安装windows 2012r2系统无法识别硬盘/如何添加virtio驱动/...

前面一遍文章写了proxmox如何创建centos7系统的小鸡儿&#xff0c;那proxmox如何创建windows系统的小鸡儿呢&#xff1f;尤其是当我们小鸡的硬盘设置成virtio SCSI的时候&#xff0c;这时候windows ISO如果不包含virtio驱动&#xff0c;是无法识别硬盘&#xff0c;是无法装机的…

sudo: Cannot execute /usr/local/bin/zsh: No such file or directory 问题

参考&#xff1a;sudo: Cannot execute /usr/local/bin/zsh: No such file or directory 之前在美化Ubuntu的时候&#xff0c;下了个zsh&#xff0c;但是忘记改配置文件中的路径了&#xff0c;于是在su root的时候出现该情况。 解决方法&#xff1a; sudo vim /etc/passwd 将 r…

如何给对方邮箱发照片_朋友圈如何发心形拼图九宫格照片?

导读&#xff1a;经常会看到朋友圈里别人秀恩爱的爱心九宫格照片&#xff0c;此篇文章教你如何不用ps也可以制作心形拼图&#xff01;找了很多制作心形拼图的app&#xff0c;但都不是我在朋友圈看到别人发的那种心形制作的图&#xff0c;阅尽千帆&#xff0c;终于让我找到这种心…

触发起名字使用正则_好名字一定在字音、字形、字意上比较吉利

专注宝宝起名20年&#xff01;擅长结合生辰八字五行周易等综合起名&#xff0c;免费起名加专家微信 bbqm8888 (长按复制)起名字要说简单也简单&#xff0c;要说难确实也很难&#xff0c;主要取决于想如何起名字了。如果觉得名字只是一个代称&#xff0c;找几个自己喜欢的…

fanuc机器人四边形编程_中国工控 | FANUC 机器人码垛编程详解

(关注ID&#xff1a;chinak958888)(工控技术自媒体领导者)关注我们&#xff0c;结交自动化技术人中国工控技术学习媒体1. 码垛功能的定义对几个具有代表性的点进行示教&#xff0c;即可以从下层到上层按照顺序堆叠工件。2. 码垛的种类码垛 B:包括码垛B(单路径模式)和码垛BX(多路…

使用缓存的9大误区(上)(转)

如果说要对一个站点或者应用程序经常优化&#xff0c;可以说缓存的使用是最快也是效果最明显的方式。一般而言&#xff0c;我们会把一些常用的&#xff0c;或者需要花费大量的资源或时间而产生的数据缓存起来&#xff0c;使得后续的使用更加快速。 如果真要细说缓存的好处&…

cmake取消宏定义_Excel基础丨取消excel中宏安全提示框

很多高手都喜欢使用“宏”命令来提高办公工作效率。但在 Microsoft Office 程序中使用宏时&#xff0c;总会弹出宏安全警告&#xff0c;这让使用者倍感麻烦。而如果把宏的安全级设置为“低”&#xff0c;就可以取消excel中宏安全提示框了&#xff0c;又增加了恶意代码和病毒攻击…

5b计算机联锁系统_力控科技油库调度管理系统应用案例

一 、 项目概述"油库储油罐区具有分布空间范围广、安全防爆要求高、监控点多、布线复杂&#xff0c;自动化系统的水平和垂直集成难度大等特点。系统采用先进测控与管理技术&#xff0c;围绕储油罐区自动计量、监测与管理&#xff0c;进行储油罐区监测控制与数据采集系统的…

集合框架(九)----Map

从这篇开始就要学习Map了&#xff01; 先来看一下Map的继承体系&#xff1a; 如君所见&#xff0c;Maps的体系没有像Collections那么庞大 在接下来的两篇博文中将分别介绍HashMap和TreeMap 至于WeakHashMap,个人感觉文档中说的相当含糊&#xff0c;理解起来很有难度&#xff0c…

cpu java poi 导出_让 Java 开发更简单,提高工作效率 | Gitee 项目推荐

1、项目名称&#xff1a;基于 Spring Boot 的权限管理系统项目简介&#xff1a;Good 权限管理系统是作者学习 springBoot 时基于 springBoot 开发的一套轻量级的权限系统&#xff0c;其目的是形成一套属于自己的通用的开发框架 以后来项目的时候就可以直接基于此平台进行开发&a…

给图片下方加水印_别再看不起美图秀秀啦,想要做长图,批量加水印,用它超级方便...

Hello大家好&#xff0c;我是撒娇的小肉片。时隔超长时间的更新&#xff0c;不知道还有多少人记得我哈哈。今天想要和大家分享的是如何批量加水印&#xff0c;如何拼成长图&#xff0c;操作简单&#xff0c;你值得拥有哦~最重要的是免费&#xff01;免费&#xff01;完全免费&a…

加载顺序_Java的web.xml组件加载顺序

在配置项目组件的过程中&#xff0c; 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持&#xff0c; 数据库的加载肯定要在框架组件加载之前。经过查阅和Debug发现&#xff0c; web.xm组件加载顺序为&#xff1a;context-param -> listene…