Wcf Restful Service服务搭建

  • 目的

使用Wcf(C#)搭建一个Restful Service

  • 背景

最近接到一个项目,客户要求使用Restful 方式接收到数据,并对数据提供对数据的统计显示功能,简单是简单,但必须要使用Restful方式,客户端传递数据就必须使用Rest ful的格式的url,提交方式为Post。

其实在之前的公司里边就开发过一个restful服务,但只记得自己使用的wcf,而今已经忘记的差不多了,还以为只是简单的搭建一个wcf就可以,今天起初就创建了一个wcf项目,发现wcf项目http://localhost:6001/Test.svc好像很让人纠结就是这个url就是多出一个。svc,wsd什么之类的,根本就不是restful,后来上网上搜到原来我们之前不是用的简单的wcf工程,而是通过Wcf rest service template工程创建的。

  • 创建Wcf rest service template工程:

在vs 新建工程-》online templates-》在搜索框中输入Wcf rest service template-》

创建好工程的工程:

  • 这个工程值得注意的有以下地方:

1, Gobal.asax文件中的代码:

 1  public class Global : HttpApplication
 2     {
 3         void Application_Start(object sender, EventArgs e)
 4         {
 5             RegisterRoutes();
 6         }
 7
 8         private void RegisterRoutes()
 9         {
10             // Edit the base address of Service1 by replacing the "Service1" string below
11             RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));
12         }
13     }

这里边是注册了url访问 route,这个访问格式就包含一下集中restful访问类型:

2.访问方式

备注:我默认的url host url为:http://localhost:6001/

访问url:http://localhost:6001/Service1           提交方式:GET      调用函数为:GetCollection

访问url:http://localhost:6001/Service1           提交方式:POST    调用函数为:Create

访问url:http://localhost:6001/Service1/1        提交方式:Get       调用函数为:Get(...)

访问url:http://localhost:6001/Service1/1        提交方式:PUT       调用函数为:Update(...)

访问url:http://localhost:6001/Service1/1        提交方式:PUT       调用函数为:Delete(...)
3.怎么注册访问方式

[WebGet(UriTemplate = "")]

List<SampleItem> GetCollection()

[WebInvoke(UriTemplate = "", Method = "POST")]
SampleItem Create(SampleItem instance)

[WebGet(UriTemplate = "{id}")]
SampleItem Get(string id)

[WebInvoke(UriTemplate = "{id}", Method = "PUT")]
SampleItem Update(string id, SampleItem instance)

[WebInvoke(UriTemplate = "{id}", Method = "DELETE")]
void Delete(string id)

其实我们可以注意到这些"访问url"访问到的“调用的函数”上的注解:

指定了访问url为:http://localhost:6001/Service1

WebGetAttribute

a. 决定了提交方式为Get,

b. UriTemplate ,决定了是否在http://localhost:6001/Service1后边追加其他路径

c. 其他参数RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Json等

WebInvokeAttribute

a.UriTemplate ,决定了是否在http://localhost:6001/Service1后边追加其他路径

b.Method,决定了提交方式,可选参数包含Get,Post,Put,Delete,当然也支持Header等其他方式。

c. 其他参数RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Json等

  • 关于请求、返回数据格式

REST被受到欢迎原因:

1,分布式架构

2,请求、返回格式支持xml,json。

3,支持异步请求/提交数据,这使得Javascript可以轻松调用RESTful服务。

A.如果手动配置请求、返回数据格式?

wcf rest service template内置了简单的注册方式:在上边我们提到的WebGetAttribute,WebInvokerAttribute中都支持参数RequestFormat,ResponseFormat,可以手动的在代码中制定他们的参数类型:

 1  // Summary:
 2     //     An enumeration that specifies the format of Web messages.
 3     public enum WebMessageFormat
 4     {
 5         // Summary:
 6         //     The XML format.
 7         Xml = 0,
 8         //
 9         // Summary:
10         //     The JavaScript Object Notation (JSON) format.
11         Json = 1,
12     }

B.如果动态配置请求、返回数据格式?

相比手动配置之下,动态选择格式还是更灵活。打开之前创建的项目,在web.config中,设置:

<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>

将automaticFormatSelectionEnabled设置为true

设置后,我们就可以通过url访问到当前我们可以访问的路径接口等.

  • 用Entity Framework和POCO Template实现数据模型及存储

未完,待续。。。。

参考资料:

http://www.cnblogs.com/xiarifeixue/archive/2011/04/27/restful.html

时间: 2024-10-31 19:40:48

Wcf Restful Service服务搭建的相关文章

[转]WCF RESTful service and WebGrid in ASP.NET MVC 5

使用WebClient调用WCF服务 流程:从View获取实体类-->序列化-->写入内存流中-->传给远端的WCF服务 Get.POST.PUT.DELETE using (WebClient wc = new WebClient()) { MemoryStream ms = new MemoryStream(); DataContractJsonSerializer serializerToUplaod = new DataContractJsonSerializer(typeof(

在IIS8.5的环境下配置WCF的Restful Service

今天在客户的环境中(Windows Server 2012 R2 + IIS 8.5)搭建Call WCF Restful Service的功能,发现了几个环境配置的问题,记录如下: 1):此环境先安装了.Net Framework,后安装的IIS,导致IIS site上无法运行.Net的程序, 因此我们要向IIS中注册.Net Framework,具体操作请参考如下链接: http://www.cnblogs.com/mingmingruyuedlut/archive/2011/11/04/2

[CI] 使用CodeIgniter框架搭建RESTful API服务

在2011年8月的时候,我写了一篇博客<使用CodeIgniter框架搭建RESTful API服务>,介绍了RESTful的设计概念,以及使用CodeIgniter框架实现RESTful API的方法.转眼两年过去了,REST在这两年里有了很大的改进.我对于前一篇博客中的某些方面不是很满意,所以希望能利用这次机会写一个更加完善的版本.我的项目基于Phil Sturgeon的CodeIgniter REST Server,遵循他自己的DBAD协议.Phil的这个项目很棒,干净利落,简单实用,并

使用CodeIgniter框架搭建RESTful API服务

使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12   |   分类于 翻译笔记   |   6条评论 在2011年8月的时候,我写了一篇博客<使用CodeIgniter框架搭建RESTful API服务>,介绍了RESTful的设计概念,以及使用CodeIgniter框架实现RESTful API的方法.转眼两年过去了,REST在这两年里有了很大的改进.我对于前一篇博客中的某些方面不是很满意,所以希望能利用这次机会写一个更加完善的版本. 我的项目基于P

【重学Node.js 第1&amp;2篇】本地搭建Node环境并起RESTful Api服务

本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://github.com/hellozhangran/happy-egg-server 说明:本想分两章讲环境搭建和起api服务,但操作下来确实过于简单.但考虑到整个系列的完整性也不能不讲,那就把这两篇合二为一吧 本地搭建Node环境 开发环境主要是指Node.MongoDB.本人是用的mac电脑,

spring boot 用maven搭建第一个RESTful Web 服务

spring boot的出现就是为了简化spring项目的构建,让你尽快的上手一个spring项目,并快速的生成一个可执行的spring微服务. 让我们来看看多简单,这里我们直接用spring的IDE,Spring Tool Suite,建第一个restful web服务. 1.在工作空间的右键,直接新建一个spring start project 2.选择构建spring boot 项目的工具,这里我们用maven 3.填好相关空格之后,选择你想构建的spring boot demo项目,这里

JAVA格物致知基础篇:用JAX-RS和Jersey打造RESTful Service

随着服务器的处理能力越来越强,业务需求量的不断累积,越来越多的公司开始从单一服务器,单一业务承载变成了多服务器,多业务承载的快速扩展的过程中.传统的方法很难满足和应付这种业务量的增长和部署方式的改变.所以RESTful service作为一种分布式服务的最佳实践,应运而生. 说到RESTful Service,我们这里首先来明白一下他的基本概念:它是用于创建分布式超文本媒体的一种架构方式,我们可以通过标准的HTTP(GET,POST,PUT,DELETE)操作来构建基于面向资源的软件架构方式(R

基于.Net FrameWork的 RestFul Service

关于本文 这篇文章的目的就是向大家阐述如何在.net framework 4.0中创建RestFul Service并且使用它. 什么是web Services,什么是WCF 首先讲到的是web Service, 它是一种能够让客户端程序在web页面上通过HTTP协议请求需要数据的部件.我们可以用Asp.net创建普通的Web Services并且让这些Services能够被客户端程序所调用. 其次说到的是Web Services,它是一个编程平台,它能够通过遵循Simple Object Ac

基于jersey和Apache Tomcat构建Restful Web服务(一)

基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来越多网站的采用.那么问题来了,它是什么呢? 起源 REST(Representational state transfer)在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一. REST 中最重要的概念是资源(resources