最近工作中学习使用了WCF REST,REST 有很多好处 高效 简约  面向资源  而客户端调用 也变得非常简单。REST 入门的资料等 大家可以去网上找 这里主要分享下遇到的问题以及解决~

一.环境准备

使用WCF REST 可以先下载一个模版 并大致预览

下载好这个模版后  新建项目 选择这个模版 会默认帮我们生成一个 CRUD 的代码  新手朋友可以用这个快速熟悉下REST风格的WCF.

这这里还给我们提供了一个很方便的功能 help  只需在我们的服务后面 加上help 就能显示服务的详情与介绍了

二.搭建REST WCF服务

1.接口的实现

当我们的请求为 Get时  一般用来获取数据时  使用[WebGet]  而 增加 修改 删除 则使用[WebInvoke]  里面的Method 来决定使用POST 或PUT等 这里要注意下

Method 里的一定要为大写  POST PUT等  否则会出现 HTTP 错误 405 405 不允许此方法 对于请求所标识的资源,不允许使用请求行中所指定的方法。

我们在这里 还可以通过 ResponseFormatRequestFormat 来指定接受的参数与返回的参数格式

2.类继承接口 这里先贴一部分 最基础的CRUD

3. Global 里注册路由

用过mvc的朋友  是不是发现这样写完后 非常的像mvc呢~

三.实现调用服务

1.实现get 服务

很简单  我们可以直接通过浏览器 输入 http://localhost:55914/ITaskService/Tasks/State/1    即可获得state为1的所有数据  以json格式传输过来

  rest 风格的wcf  使得我们不用再像以前一样 客户端 添加 服务引用了  没有了wsdl  简洁了许多 效率也提高了很多  使得我们访问更容易

REST 由于没有了代理   而是发送请求   我们的客户端可以是 js 访问    如果是 jquery  只需$.get  即可发送请求   这里我主要说下C#的访问方式

通过WebClient 方式  这个类封装的比较好  调用起来简单  但由于封装的过多 实现一些功能时则不太容易

通过WebRequest方式 这个则比较灵活

上面两个是经常用到的两个类 这里再推荐给大家一个 是wcf工具里的其中一个 专门用来访问 rest 服务 也非常的简单

通过HttpClient 这个也是微软开发的工具类  而且在最新的 .net 4.5里 集成了进去

通过上面三个任意其中一个就可以实现提交了

但是 这里有一个问题 我们以前有代理类  通过调用方法 得到代理类 可是现在呢  我们没有类  我们得到的是一串json 格式的数据 我们怎么把他变成像类一样的 方便操作呢?

比如 A公司发布了rest wcf服务 数据格式 json    公司B 要调用A公司的服务   以前ws 或wcf都有代理  可以生成代理类  现在却得到的是json数据 而我们还没有要反序列化的实体类

比如 我现在想把得到的数据 像表格一样的展示出来

有两种方法

  1.对照json数据  客户端新建个类 然后通过反序列化  把json 反序列化为类对象  

这样比较麻烦 类少还可以  要是多了 则需要新建很多实体类   更关键的是 服务端的实体类 更新了  以前WCF或ws 更新下服务即可 而现在 还要更新客户端实体类岂不是很麻烦?

所以推荐用下面的方法

  2.将json 反序列话为 dynamic 类型

json 转换为dynamic 类型   起初 我用的是 第三方的 json.net  经过尝试 发现再把json 转换为集合类型时 总是出错  如果有朋友知道怎么弄 还望告知下

后来经过尝试 我采用了 微软自带的 JavaScriptSerializer  下面展示代码

 

使用方法很简单 经过  不论是序列化 集合 还是单个的  都没有问题 这个时间也会正常显示 没有问题~  结果上面的代码  就可以把接受的json 类型 展示为一个 table了

好了 这个问题解决了 可以上三种方式发送get请求了 这个毕竟简单 大家直接看代码

可以看到 第一个 和第三个 都是非常简单的  这里要注意的是  要注意编码问题 因为传递的有中文 会有乱码问题

所以要注意编码问题  再第二个里 可以通过得到response.ContentType 先得到编码  这样就可以自动识别编码格式了

再说下HttpClient  这个真正发送请求  是在 message.EnsureStatusIsSuccessful();  这句话

通过上面任意一种方法 我们都可以得到json  这样再通过将json 反序列话为 dynamic 类型 就可以像有实体类一样简单的操作了~~

今天先写到这

下面讲post 等提交数据 以及 原生流文件的上传 下载 等

最后 祝大家周末愉快 欢迎一起交流技术

参考:

http://blog.csdn.net/fangxinggood/article/details/6235662

原文:

http://www.cnblogs.com/wlflovenet/archive/2011/10/28/WCFREST.html

WCF REST (一)的更多相关文章

  1. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  2. 【WCF】使用“用户名/密码”验证的合理方法

    我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...

  3. 【WCF】错误协定声明

    在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...

  4. 【WCF】自定义错误处理(IErrorHandler接口的用法)

    当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...

  5. [WCF]缺少一行代码引发的血案

    这是今天作项目支持的发现的一个关于WCF的问题,虽然最终我只是添加了一行代码就解决了这个问题,但是整个纠错过程是痛苦的,甚至最终发现这个问题都具有偶然性.具体来说,这是一个关于如何自动为服务接口(契约 ...

  6. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  7. Ajax使用WCF实现小票pos机打印源码

    通过ajax跨域方式调用WCF服务,实现小票pos机的打印,源码提供web方式,客户端方式测试,服务驻留右侧底部任务栏,可控制服务开启暂停,用户可自定义小票打印模板,配合零售录入. qq  22945 ...

  8. C# 用SoapUI调试WCF服务接口(WCF中包含用户名密码的验证)

    问题描述: 一般调试wcf程序可以直接建一个单元测试,直接调接口. 但是,这次,我还要测试在接口内的代码中看接收到的用户名密码是否正确,所以,单一的直接调用接口方法行不通, 然后就想办法通过soapU ...

  9. WCF基础

    初入职场,开始接触C#,开始接触WCF,那么从头开始学习吧,边学边补充. SOA Service-Oriented Architecture,面向服务架构,粗粒度.开放式.松耦合的服务结构,将应用程序 ...

  10. Mono下的WCF的Bug?

    最近一段时间,一直在折腾Mono,折腾Linux.让我无比痛苦的是Mono下的WCF的坑真的是太多了,这不又遇到了一个莫名其妙的问题. 环境:mono 3.2.1,Jexus 5.4.3,OS Cen ...

随机推荐

  1. 2018上半年GitHub上最热门的开源项目

    关注GitHub的人都知道,这个平台上面有太多优秀的值得学习的开源项目了,这里总结了2018上半年GitHub上最热门的开源项目. 1: tensorflow https://github.com/t ...

  2. cz.msebera.android.httpclient.conn.ConnectTimeoutException: Connect to /192.168.23.1:8080 timed out(Android访问后台一直说链接超时)

    明明之前还是可以运行的练习,过段时间却运行不了,一直说访问后台超时, 对于这个问题我整整弄了两天加一个晚上,心酸...,上网找了很多但是都解决不了,我就差没有砸电脑了. 首先 : 第一步:Androi ...

  3. NOIP2009 最优贸易(BFS)

    本题正解是tarjan.我没有去写 之前的代码是错误的不好意思,因为数据太弱一直没有发现. 相同还是两遍bfs,一次正向,一次反向.在正向的时候我们求出从起点走到各个点的最小值.在反向的时候求出从终点 ...

  4. 关于EM的理解

    任意浏览器的默认字体高度16px(16像素). 所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的 ...

  5. FFT之大数乘法

    #include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> ...

  6. 51nod1004 n^n的末位数字

    题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个整数N,输出N^N(N的 ...

  7. 【Python学习】爬虫报错处理bs4.FeatureNotFound

    [BUG回顾] 在学习Python爬虫时,运Pycharm中的文件出现了这样的报错: bs4.FeatureNotFound: Couldn’t find a tree builder with th ...

  8. Java数据传递实验

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在开发过程中,我们经常会遇到对象传递的问题,有时仅仅传递数据,有时却要实现数据同步:这时,就要分清两 ...

  9. Directx9.0 学习教程3 -图形学之创建点 线 三角形 等

    1.首先 介绍点的表示方法 struct CUSTOMVERTEX { float x,y,z; }; CUSTOMVERTEX Vertices[] = { {-5.0, -5.0, 0.0}, { ...

  10. 阿里云 django的一次web维护记录

    首先, 丢给我一个阿里云的server的账号/password,之前没有玩过阿里云,想想应该也是ssh服务来远程登陆. 环境: centos+nginx+uwsgi+python2.7+django. ...