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不一样么。