原創地址:http://www.cnblogs.com/jfzhu/p/4044813.htmlhtml
轉載請註明出處web
要建立REST WCF Service,endpoint binding須要用webHttpBinding,參見《webHttpBinding、basicHttpBinding和wsHttpBinding的區別》。服務器
web.config網絡
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <authentication mode="None" /> </system.web> <system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="SandwichServices.CostServiceBehavior"> <webHttp helpEnabled="true"/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="SandwichServices.CostServiceServiceBehavior" > <serviceMetadata httpGetEnabled="true" /> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> <services> <service name="SandwichServices.CostService" behaviorConfiguration="SandwichServices.CostServiceServiceBehavior"> <endpoint address="" behaviorConfiguration="SandwichServices.CostServiceBehavior" binding="webHttpBinding" contract="SandwichServices.CostService" /> <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> </service> </services> </system.serviceModel> </configuration>
在《如何建立一個AJAX-Enabled WCF Service》中的web.config,由於須要AJAX,endpointBehaviors用了<enableWebScript />,可是enableWebScript 和REST須要的UriTemplate是有衝突的,因此這裏再也不使用。post
endpointBehaviors中設置<webHttp helpEnabled="true"/>能夠生成WCF Service的Help頁面。ui
HTTP定義了與服務器交互的不一樣方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操做。GET通常用於獲取/查詢資源信息,而POST通常用於更新資源信息。spa
對於PUT和DELETE,須要身份驗證信息,因此咱們先暫時只容許匿名訪問,在web.config中將authentication mode設置爲None。debug
Employee.cscode
using System; using System.Runtime.Serialization; namespace SandwichServices { [DataContract] public class Employee { private Guid id; private string name; private DateTime birthdate; [DataMember] public Guid Id { get { return id; } set { id = value; } } [DataMember] public string Name { get { return name; } set { name = value; } } [DataMember] public DateTime Birthdate { get { return birthdate; } set { birthdate = value; } } } }
CostService.svc.csorm
using System; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Web; namespace SandwichServices { [ServiceContract(Namespace = "SandwichServices")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class CostService { // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json) // To create an operation that returns XML, // add [WebGet(ResponseFormat=WebMessageFormat.Xml)], // and include the following line in the operation body: // WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; [OperationContract] [WebInvoke(Method = "PUT", UriTemplate = "Employees/AddEmployee", ResponseFormat = WebMessageFormat.Xml)] public Guid AddEmployee(Employee employee) { return Guid.NewGuid(); } [OperationContract] [WebInvoke(Method = "DELETE", UriTemplate = "Employees/DeleteEmployee?id={id}", ResponseFormat = WebMessageFormat.Xml)] public void DeleteEmployee(string id) { return; } [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "Employees/UpdateEmployee", ResponseFormat = WebMessageFormat.Xml)] public void UpdateEmployee(Employee employee) { return; } [OperationContract] [WebGet(UriTemplate = "Employees/GetEmployee?id={id}", ResponseFormat = WebMessageFormat.Xml)] public Employee GetEmployee(string id) { return new Employee() { Id = new Guid(id), Name = "Neil Klugman", Birthdate = new DateTime(1930, 1, 1) }; } } }
將每一個方法的ResponseFormat改成Json
CostService.svc.cs
using System; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Web; namespace SandwichServices { [ServiceContract(Namespace = "SandwichServices")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class CostService { // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json) // To create an operation that returns XML, // add [WebGet(ResponseFormat=WebMessageFormat.Xml)], // and include the following line in the operation body: // WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; [OperationContract] [WebInvoke(Method = "PUT", UriTemplate = "Employees/AddEmployee", ResponseFormat=WebMessageFormat.Json)] public Guid AddEmployee(Employee employee) { return Guid.NewGuid(); } [OperationContract] [WebInvoke(Method = "DELETE", UriTemplate = "Employees/DeleteEmployee?id={id}", ResponseFormat = WebMessageFormat.Json)] public void DeleteEmployee(string id) { return; } [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "Employees/UpdateEmployee", ResponseFormat = WebMessageFormat.Json)] public void UpdateEmployee(Employee employee) { return; } [OperationContract] [WebGet(UriTemplate = "Employees/GetEmployee?id={id}", ResponseFormat = WebMessageFormat.Json)] public Employee GetEmployee(string id) { return new Employee() { Id = new Guid(id), Name = "Neil Klugman", Birthdate = new DateTime(1930, 1, 1) }; } } }