一个简单的WCF RESTFul服务

WCF的REST实例网上很多,这里是我这几天学习并实践通过的,算是个笔记吧 。

1、服务契约

[ServiceContract]public interface  IRESTService{}

具体操作定义中,有如下几个参数要注意:

1、WebGet和WebInvoke的区别好像就是Method的定义不同,WebGet使用 "GET",WebInvoke则更灵活。

2、UriTemplate用{value}对应 参数列表。

3、WebMessageFormat包括XML和JSON,网上有篇实现RAW的文 章,还没仔细研究。

所谓简 单的例子嘛,就自定义一个返回对象的

1 [OperationContract]
2 [WebGet(UriTemplate = "{name}?token={token}",  ResponseFormat = WebMessageFormat.Json)]
3 Person GetPerson(string name, string token);

和一个 返回图片的

1 [OperationContract]
2 [WebGet(UriTemplate = "Data/{id}?token={token}")]
3 Stream GetData(string id, string token);

注意定义中 的变量类型为string,另外token是想以后做个简单的认证用的,还没有想清楚, 不在本次讨论范畴内。

2、宿主

直接用WebServiceHost最好,

WebServiceHost restHost = new WebServiceHost(typeof (RESTService),new Uri ("http://localhost/RestService"));

用ServiceHost 麻烦一些,不过更灵活。

1 ServiceHost GetRestHost(Uri  baseAddress)
2 {
3         ServiceHost host = new ServiceHost(typeof (RESTService), baseAddress);
4         WebHttpBinding binding = new WebHttpBinding();
5         ServiceEndpoint endpoint =  host.AddServiceEndpoint(typeof(IRESTService), binding,  baseAddress);
6         WebHttpBehavior httpBehavior = new  WebHttpBehavior();
7         endpoint.Behaviors.Add(httpBehavior);
8         return host;
9 }

3、具体操作实例

3.0 先定义一个简单的数据契约

1 [DataContract]
2 public class Person
3 {
4     [DataMember]public string Name{get;set;}
5     [DataMember]public DateTime Birthday{get;set;}
6 }

留了个DateTime类型的数据,准备以后研究客户端的时候用 ,不是都说js下处理json日期和WCF不一样么。

时间: 2024-09-08 09:39:22

一个简单的WCF RESTFul服务的相关文章

WCF后续之旅(13) 创建一个简单的WCF SOAP Message拦截、转发工具

WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式.从Messaging的角度讲,WCF可以看成是对Message进行发送.传递.接收.基础的工具.对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端.实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发挥中重要的作用.比如,我们可以创建路由器(Router)进行消息的转发,甚至是Load Balance:可以创

WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具[上篇]

WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式.从Messaging的角度讲,WCF可以看成是对Message进行发送.传递.接收.基础的工具.对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端.实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发挥中重要的作用.比如,我们可以创建路由器(Router)进行消息的转发,甚至是Load Balance:可以创

WCF RESTful服务的Google Protocol Buffers超媒体类型

Protocol Buffers 是在一个很理想的结构化数据的语言中立的序列化格式.你可以考虑一下XML或JSON,但更轻,更小的协议缓冲区. 这种格式的广应用于谷歌不同的系统之间交换数据. 由于其结构化数据的最佳表现,protocol buffers 是一个代表RESTful服务处理的数据很好的选择.要遵循REST的原则, protocol buffers 应作为一个新的超媒体类型的代表. 在当前版本(.NET 4) 的Windows通讯基础(WCF),包含一个新的媒体类型,需要相当数量的努力

我的WCF之旅(1):创建一个简单的WCF程序

写在前面 在Microsoft提出.NET战略以来, 先后推出了一系列产品和技术, 这些产品和技术为我们在.NET平台下建立企业级的分布式应用提供了很大的 便利.这些技术和产品包括:.NET Remoting,XML WebSerivce,WSE(2.0,3.0),Enterprise Service, MSMQ ...... 我们知道,和一个相对独立的应用不同,我们开发一个分布式应用, 尤其是开发一个企业级的分布式应用, 我们需要考虑较多的东西.比如我们要考虑数据在不同的应用之间传递时采取什么

WCF后续之旅(13):创建一个简单的SOAP Message拦截、转发工具[下篇]

在Part I 中,我们创建了一个InterceptService,并且通过一个特殊的EndpointBehavior,ClientViaBehavior实现了message的拦截.转发功能.在本节中,我们将讨论另外一种不同的实现方式.如何说ClientViaBehavior是基于Client端的实现方式,那么我们今天讨论的是基于Service的实现方式. 在对新的实现方式展开介绍之前,我们先来介绍一下关于逻辑地址和物理地址. 一.逻辑地址和物理地址 我们知道,WCF通过Endpoint进行通信

实践重于理论——创建一个监控程序探测WCF的并发处理机制

由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的(参考<并发的本质><并发中的同步>),所以在不同的实例上下文模式下,会表现出不同的并发行为.接下来,我们从具体的实例上下文模式的角度来剖析WCF的并发处理机制,如果对WCF实例上下文模式和实例上下文提供机制不了解的话,请参阅<WCF技术剖析(卷1)>第9章. 为了使读者对采用不同实例上下文对并发的影响有一个深刻的认识,会创建一个简单的WCF应用,并在此基础上添加监控功能,主要监控各种事件的执

IBM Worklight适配器与RESTful服务的集成

在第三篇文章中,Bhargav Perepa 介绍了三个重要主题:在 Rational Application Developer for WebSphere 中开发和测试一个 JPA 公开的 RESTFul 服务应用程序:使用该应用程序创建一个应用程序逻辑包,将它作为库在移动应用程序开发中使用的库:使用 Worklight Studio 开发和测试一个使用该库的服务器端移动应用程序组件. 通过阅读本文,您将学习如何使用 IBM® Rational® Application Developer

创建一个简单的web服务器

Web服务器也称为超文本传输协议(HTTP)服务器,因为它使用HTTP来跟客户端进行通信的.既然说到通信那就离不了Java里的两个重要的类java.net.Socket和java.net.ServerSocket.这里浏览器一方可以认为是一个客户端,接收HTTP请求的一方可以认为是服务端.在这之前我们先说一下HTTP协议. HTTP协议允许web服务器和浏览器通过网络来进行发送和接收数据.它是一种请求和响应协议.客户端发送一个请求,服务端响应这个请求.HTTP请求由三部分组成,分别是:请求行.消

使用Node.js实现一个简单的FastCGI服务器实例_node.js

本文是我最近对Node.js学习过程中产生的一个想法,提出来和大家一起探讨. Node.js的HTTP服务器 使用Node.js可以非常容易的实现一个http服务,最简的例子如官方网站的示例: 复制代码 代码如下: var http = require('http');http.createServer(function (req, res) {    res.writeHead(200, {'Content-Type': 'text/plain'});    res.end('Hello Wo