在WCF 4.0中,为我们创建Restful API有了更好的支持。通过定义UriTemplate,WebInvoke就可以快速开发API接口。

这里我记录一下HTTP POST数据时要如何接收POST过来的数据。

1,方法一:Stream inputStream 输入流方法(注意看方法

例如我的代码

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "json/ui/{projectName}/{entityName}?q={queryString}&id={indentity}")]
UpdateOrInsertEntityResponse UpdateOrInsertEntityResponse (String projectName, String entityName, String queryString,String indentity,Stream pstream);

UriTemplate定义了参数匹配关系。

"json/ui/{projectName}/{entityName}?q={queryString}&id={indentity}"

对应的参数

String projectName, String entityName, String queryString,String indentity

名称必须相同,否则不能匹配。所有字段必须是String类型。

如何获取POST过来的数据信息。

定义Stream pstream参数。

如果你现在运行应用程序的话,会在页面爆出一个错误信息:

System.InvalidOperationException: For request in operation UpdateOrInsertEntityResponse to be a stream the operation

 must have a single parameter whose type is Stream.

如何解决。

第一步,修改你自己的Service.svc文件。

将原始的

<%@ ServiceHost Language="C#" Debug="true" Service="Vine.DataMan.RestfulService.EntityService"

CodeBehind="EntityService.svc.cs" %>

增加新的属性:

Factory="System.ServiceModel.Activation.WebServiceHostFactory"

最后结果是:

<%@ ServiceHost Language="C#" Debug="true" Service="Vine.DataMan.RestfulService.EntityService"

CodeBehind="EntityService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

修改配置文件Web.config

<system.serviceModel>

<services>

<service name="Vine.DataMan.RestfulService.EntityService">

<endpoint binding="webHttpBinding"

contract="Vine.DataMan.RestfulService.ServiceContracts.IEntityCommonService"

behaviorConfiguration="webHttp"/>

</service>

</services>

<behaviors>

<endpointBehaviors>

<behavior name="webHttp">

<webHttp/>

</behavior>

</endpointBehaviors>

<serviceBehaviors>

<behavior>

<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->

<serviceMetadata httpGetEnabled="true"/>

<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->

<serviceDebug includeExceptionDetailInFaults="true"/>

</behavior>

</serviceBehaviors>

</behaviors>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

</system.serviceModel>

注意加粗的文字。必须定义webHttp的行为。

WCF使用小结:(1)WCF接收HTTP POST数据的处理方法的更多相关文章

  1. 小程序post请求,后台接收不到数据的解决方法

    wx.request({ url: 'myurl', method:'POST', dataType:'json', data: { mydata:mydata }, success(res) { c ...

  2. WCF学习之旅—WCF寄宿前的准备(八)

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类协定的定 ...

  3. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  4. WCF入门教程3——WCF通信模式

    本章内容 请求/响应模式 单工模式 双工模式 WCF异步调用 请求与响应模式 请求/响应     请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以前 ...

  5. WCF入门教程1——WCF简要介绍

    什么是WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了原有的windo ...

  6. WCF初探-26:WCF中的会话

    理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调 ...

  7. WCF初探-11:WCF客户端异步调用服务

    前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...

  8. WCF初探-15:WCF操作协定

    前言: 在前面的文章中,我们定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationCo ...

  9. WCF初探-22:WCF中使用Message类(上)

    前言 从我们学习WCF以来,就一直强调WCF是基于消息的通信机制.但是由于WCF给我们做了高级封装,以至于我们在使用WCF的时候很少了解到消息的内部机制.由于WCF的架构的可扩展性,针对一些特殊情况, ...

随机推荐

  1. iOS7程序内部如何打开评分页面

    测试发现项目在iOS7下 无法打开评价页面,但是iOS6是正常: 查了一下发现应该是iOS7 改变链接了,有个网友给出了以下的解决办法 把旧的链接改成 appString =[NSStringstri ...

  2. PureLayout和Masonry比较

    一年前那时我做iOS开发,为了自动布局适配多种屏幕,我一般使用Masonry,后来偶然地在一个视频教程中发现老师使用了UIView+Autolayout(现在作者改名为PureLayout)自动布局, ...

  3. iOS学习之GCD

    多线程编程 线程定义:一个CPU执行的CPU命令 列一条无分叉的路径就叫线程. 多线程:执行多个不同的CPU命令 有多条路径. 线程的使用:主线程(又叫作UI线程)主要任务是处理UI事件,显示和刷新U ...

  4. iOS 利用 Framework 进行动态更新

    http://nixwang.com/2015/11/09/ios-dynamic-update/ 前言 目前 iOS 上的动态更新方案主要有以下 4 种: HTML 5 lua(wax)hotpat ...

  5. 避免每次输入bundler Exec命令

    bundle在ruby的世界里是个好东西,它可以用来管理应用程序的依赖库.它能自动的下载和安装指定的gem,也可以随时更新指定的gem. rvm则是一个命令行工具,能帮助你轻松的安装,管理多个ruby ...

  6. [转]设置Android手机以使用ARM Streamline进行性能分析(一)

    本博客第一次转载的文章,原文访问不到了,这篇是从google cache里挖出来的,为有需要的同学准备.原文地址     Posted by Fang Bao,(鲍方) 4 Comments 11 J ...

  7. linux dns 连外网

    以下设置对所用的Linux系统如Redhat/Ubuntu/Debian/CentOS等都有效,但您必须是管理员root或者具有管理员权限 vim /etc/resolv.conf 在其中加入: na ...

  8. VMD_EI_API=>MAINTAIN_BAPI 去创建供应商主数据

    转自 http://blog.sina.com.cn/s/blog_9ae2f2940102uxyp.html VMD_EI_API=>MAINTAIN_BAPI 去创建供应商主数据的部分数据代 ...

  9. bootstrap-9

    图像: bootstrap中有以下几种样式风格: 1.img-responsive:响应式图片,主要针对响应式设计 2.img-rounded:圆角图片 3.img-circle:圆形图片 4.img ...

  10. POJ 2481 Cows(树状数组)

                                                                      Cows Time Limit: 3000MS   Memory L ...