今天主要写下  POST等其他方式 发送请求 以及 流方式 文件的上传与下载

一.Post 提交数据

先来想下 POST和Get 的不同   Get 方式 我们直接通过 url  来传递参数   先来看下我们的  创建方法吧

   [WebInvoke(UriTemplate = "Tasks/Add", Method = "POST", RequestFormat = WebMessageFormat.Json)]    void Create(PocoTask pocoTask);

我们需要接受一个实体类   格式为json格式  这就再次出现上文的问题  我们的客户端没有实体类  没法把实体类序列化为json  难道要自己拼接json么? 当然不用。那简直太痛苦了。

这里给大家推荐Json.Net  这里有两个类 可以帮我们完成  单个实体的转换 以及集合实体的转换 分别是 JObject 和 JArray

我们只需声明这两个类后  .toString 就可得到他的json格式了  很方便吧~ 看代码

这里完全可以不用dynamic的  像注释那样的写法就行 这样即使服务器不支持.net4.0 也可以使用的

知道了如何构建POST 提交的数据 就开始实现POST提交吧~ 上代码 依然是三种方式 放一起 对比

这三个方式 个人很推荐 第三种 也是目前最新的 .net4.5里集成的 访问REST 非常的方便 因为他支持 直接点出来 PUT 以及 DELETE请求

简直是为rest 量身定制的~~ 看下 PUT请求

这里需要注意下  因为我们发送的是json 不论是哪种发送请求的方式 都要记得 设置ContentType=application/json

否则会抛出 HTTP 400的错误  400-错误的请求 很多都是客户端请求不正确造成的  所以一般出来400错误 可以重点检查下 客户端请求的问题

因为 PUT 与 DELETE 和 POST 基本类似  我就不上代码了

二.REST 的文件上传 与下载

流文件的上传和下载

先来看服务端的接口与实现

我们要实现三个功能

1. 展示一张图片

2.下载一个文件

3.上传一个文件

一个一个说 先说展示图片 实现代码

aaarticlea/png;base64,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" alt="" />

这个是在浏览器中直接打开  比较简单  这里记得设置输出的 ContentType  有时我们想打开的是别的格式 这里有个小方法  根据文件扩展名获得输出的ContentType

也就是上面用到的GetContentType方法  在园子的知识库里发现的GetContentType

客户端 非常简单 直接引用连接即可

2.下载

上面的是直接把文件显示在浏览器中 如果我们希望下载资源呢 方法也很简单和以前的方法是一样的  直接上代码

文件下载

 public void GetExecl(string execlName)         {             string folder = System.Web.Hosting.HostingEnvironment.MapPath("~/Files");             var FullFileName = Path.Combine(folder, execlName);             if (File.Exists(FullFileName))             {                 FileInfo DownloadFile = new FileInfo(FullFileName);                 HttpContext.Current.Response.Clear();                 HttpContext.Current.Response.ClearHeaders();                 HttpContext.Current.Response.Buffer = false;                 HttpContext.Current.Response.ContentType = "application/octet-stream";                 HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.ASCII));                 HttpContext.Current.Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());                 HttpContext.Current.Response.WriteFile(DownloadFile.FullName);                                  HttpContext.Current.Response.Flush();                 HttpContext.Current.Response.End();               }         }

3.上传 这个文件上传 才是重点要说的  折腾了好久~

首先要说的是  一定要记得配置文件 如果用REST 模版 配置方法如下

  <system.serviceModel>     <serviceHostingEnvironment  aspNetCompatibilityEnabled="true"/>     <standardEndpoints >       <webHttpEndpoint >         <!--              Configure the WCF REST service base address via the global.asax.cs file and the default endpoint              via the attributes on the <standardEndpoint> element below         -->         <standardEndpoint   name="" maxReceivedMessageSize="3000000" defaultOutgoingResponseFormat="Json" helpEnabled="true"  automaticFormatSelectionEnabled="true">           <readerQuotas maxArrayLength="300000"/>         </standardEndpoint>                </webHttpEndpoint>     </standardEndpoints>   </system.serviceModel>

这样就可以上传大文件了

客户端实现上传很简单 借助 HttpClient

本来写到这  以为上传很简单的就能完成了 结果却弄了好久

先说下以前的写法

以前这样 都能成功  谁知道这次移到 REST WCF 中  竟然报错  发现不能读取Stream.Length   在这里问下各位高手 ~为什么读取Stream.Length 会报错?

CSDN 的  fangxinggood  给了解释 非常感谢

因为它被封装成了MessageBodyStream,就像WCF Streamed的数据一样,Length是不支持的。WCF里是客户端一边传服务端一边收。到达服务端开始写IO时,流并没有全部传输完,所以 MessageBodyStream不支持Length。但REST时是Http协议,所以其实Stream已经全部到达服务端了。如果你想取长度,可以 用: var len = WebOperationContext.Current.IncomingRequest.ContentLength;来获得。

如图

最后就会抛出Http 400的错误

百思不得其解  只好换了另一种方法这种方法不需要 长度length

可是却发现在 转化成byte 这次是报错  输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非空白字符。

再次请问原因?  希望遇到过的朋友告知

解决办法

后来 通过谷歌 发现另外一种 获得长度的方法 在WCF REST里   这样就能用第一种方法了

把最早方法里的

long ByteLength=stream.Length;

换成

long ByteLength = WebOperationContext.Current.IncomingRequest.ContentLength;

这样就可以得到长度了  上传问题也就解决了~~

这里说下 如果上传的是图片 有个很简单的方法   核心代码 简单两行即可~

三.Session与Cookie

在WCF 里  是可以使用session的  但是在REST 的WCF 里  貌似却不能使用session 查了些资料 没有发现使用session的办法

可能是因为使用session会让服务器和客户端耦合。 后来找到了 REST 常见误区  http://www.prescod.net/rest/mistakes/

里面提到了一条  session 是无关紧要的。

cookie 还是可以正常使用的  这里说下 客户端读取cookie的方法  webclient 貌似不能读到 要使用更加灵活的 HttpWebRequest

主要是这两句

CookieContainer Cookie = new CookieContainer();      request.CookieContainer = Cookie;

四.总结

在做这方面的工作  把经验分享给大家 也希望会的人 能解答下我问中的问题~~

REST WCF  体现了ROA 面向资源编程  感觉更好了解耦了客户端与服务端  而且调用 REST 服务  也简单了很多 没有了代理等 效率也提高了 喜欢这种风格的方式

参考:

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

原文:

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

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

  1. WCF服务二:创建一个简单的WCF服务程序

    在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WC ...

  2. WIN8+VS2013编写发布WCF之二(部署)

    上文简介了如何建立WCF工程并且调试,下面说一下如何部署. 本文将陆陆续续讲述三种部署方式,随着项目的进展将不断补全. 声明: 用管理员身份打开VS2013,发布前请将程序的.net版本改成与服务器相 ...

  3. WCF(二)

    摘自:http://www.cnblogs.com/yank/p/3666271.html WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK ...

  4. WCF入门二[WCF的配置文件]

    一.概述 往往在很多项目中数据库连接字符串.变量和一些动态的加载类会写在配置文件中.WCF也会在配置文件中写入一些配置参数,比如服务的地址.服务用于发送和接收消息的传输和消息编码等,通过配置文件可以灵 ...

  5. 【WCF系列二:如何调用WCF服务】WCF入门教程(图文)VS2012

    上一遍到现在已经有一段时间了,先向关注本文的各位“挨踢”同仁们道歉了.小生自认为一个ITer如果想要做的更好,就需要将自己的所学.所用积极分享出来,接收大家的指导和吐槽.网上也有很多WCF相关的教程, ...

  6. WCF(二)三种通信模式

    WCF在通信过程中有三种模式:请求与答复.单向.双工通信 请求与答复模式 客户端发送请求,然后一直等待服务端的响应答复(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序 请求 ...

  7. WCF基础二

    1:地址 . WCf 的每一个服务都有一个唯一地址,地址包括传输协议和服务位置. HTTP:采用http\https协议进行传输,默认端口为80. TCP:采用ne.tcp协议进行传输,默认端口为80 ...

  8. WCF(二)配置文件

    上篇文章中对WCF的配置放到App.config中,这样可以使程序更灵活.更具有扩展性. 下面说下配置文件中各个节点的含义. 服务端: WCF配置文件节点放在<system.serviceMod ...

  9. WCF学习(二)

    WCF通道模型 绑定的本质是一个配置好的通道栈,为了方便程序员专著与业务逻辑,WCF提高了一系列常用绑定.随后会有相应的自定义通道栈代码 无论交互的另一方具体位置在哪里,WCF都会为消息的发送和接收建 ...

  10. WIN8+VS2013编写发布WCF、一(编写)、二(部署)、三(调用)

    原文://http://www.cnblogs.com/tntboom/p/4348483.html 引言:上学期因为写服务器用WCF,所以连查资料再瞎调试勉强成功了,但是这学期又到了用WCF的时候, ...

随机推荐

  1. 【Docker自定制镜像之Dockerfile】

    镜像的定制,就是定制每一层所添加的配置.文件,如果可以把每一层修改.安装.构建.操作的命令都写入到一个脚本中,用脚本来构建.定制镜像,这个脚本就是Dockerfile Dockerfile是一个文本文 ...

  2. php, hhvm与odp & Unix domain Socket方式

    接上一篇,复习一下 启动php或hhvm: php/sbin/php-fpm start hhvm/bin/hhvm_control start 启动nginx或lighttpd: webserver ...

  3. Bounding Volume Hierarchy BVH in OpenCASCADE

    Bounding Volume Hierarchy BVH in OpenCASCADE eryar@163.com Abstract. Bounding Volume Hierarchy(BVH) ...

  4. Image与byte[]数组的相互转换

         近期项目有个需求是关于图片操作的,须要将图片保存到数据库中.经过尝试才知道Image类型文件是不能直接存储到数据库中的.保存之前须要我们做一步转换:将Image转换成字节数组类型Byte ...

  5. Docker+Jenkins持续集成

    Docker+Jenkins持续集成 使用etcd+confd实现容器服务注册与发现   前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇 ...

  6. js关于循环的理解

    学习任何语言都离不开循环,js也是一样,看了网上的资料,整理一份关于js循环的理解. 1.最基础循环,js和其他高级语言一样使用for.while循环 (function() { for(var i= ...

  7. C# 爬虫总结

    static void Main(string[] args) { //WebRequest request = WebRequest.Create("http://www.cnblogs. ...

  8. DM9000C网卡驱动

    目的:通过学习,掌握如何移植.编写DM9000C网卡驱动 一.概述: DM9000是一款高度集成低功耗快速以太网处理器,该芯片集成了MAC和PHY.DM9000可以和CPU直接连接,支持8位.16位和 ...

  9. C#之用户自定义控件

    一.新建用户自定义控件 如下图所示,想通过LED的点击来实现亮和灭使用去控制下位机. LED亮: LED灭: 首先新建一个用户控件类,如下图所示步骤: 在资源中,添加现有文件中加入图片 加入的图片可以 ...

  10. 【例题 8-15 UVA - 12174】Shuffle

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举第一段的范围[0..i] (0<=i<s) 然后看看[i+1..i+s-1],[i+s,i+s+s-1]..这些区间 ...