Welcome

首页 / 软件开发 / WCF / 一个简单的WCF RESTFul服务

一个简单的WCF RESTFul服务2010-11-10 博客园 chinajuanbobWCF的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不一样么。