如何创建一个RESTful WCF Service
(一)web.config文件
要创建REST WCF Service,endpoint binding需要用webHttpBinding,参见《webHttpBinding、basicHttpBinding和wsHttpBinding的区别》。
web.config
复制代码
复制代码
在《如何创建一个AJAX-Enabled WCF Service》中的web.config,因为需要AJAX,endpointBehaviors用了
endpointBehaviors中设置
image
HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
对于PUT和DELETE,需要身份验证信息,所以我们先暂时只允许匿名访问,在web.config中将authentication mode设置为None。
(二)webHttpBinding的XML格式
Employee.cs
复制代码
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.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.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) };
}
}
(三)webHttpBinding JSON格式
将每个方法的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) };
}
}
}
(四)总结
RESTful WCF Service需要使用webHttpBinding
endpointBehaviors不要用
endpointBehaviors中设置
GET(查),POST(改),PUT(增),DELETE(删)
对于PUT和DELETE,需要身份验证信息
webHttpBinding的数据格式有两种:XML和JSON,可以通过ResponseFormat来设置
希望能帮到你,求采纳。