WCF创建RESTService
2016-04-11 23:58
387 查看
这篇博客将介绍在WCF中创建REST服务相关内容。首先先看一下的项目结构:
![](https://images2015.cnblogs.com/blog/622438/201604/622438-20160411233825301-495044753.png)
Contract,Service两个工程为类库工程,需要添加System.ServiceModel, System.ServiceModel.Web, System.Runtime.Serialization名称空间,代码如下:
User Class:
IUserService
这个和以往普通的WCF服务不一样,在方法名上面的Attribute为WebGet/WebInvoke,请求的参数放置在UriTemplate中。
UserService
模拟实现了一个CURD的REST服务。下面就可以对服务进行承载。介绍两种方式,
1. 控制台程序:
App.config:
Program.cs
运行服务,在浏览器中访问获取所有User的服务,
![](https://images2015.cnblogs.com/blog/622438/201604/622438-20160411234838910-4016341.png)
2. 在IIS中承载服务,
在Service工程下添加Web.config文件:
这里address不需要指定,IIS会分配一个地址给服务。
新建UserService.svc文件,
将Service编译路径指向到Bin目录下。然后再IIS中新建一个Application指向Service所在目录即可,
在浏览器中访问结果如下:
![](https://images2015.cnblogs.com/blog/622438/201604/622438-20160411235410035-758311258.png)
获得了一组Json数据。
关于WCF的REST服务就先介绍到这里,后面的博客会介绍如何来Consume这个服务。
感谢您的阅读,代码点击这里下载。
![](https://images2015.cnblogs.com/blog/622438/201604/622438-20160411233825301-495044753.png)
Contract,Service两个工程为类库工程,需要添加System.ServiceModel, System.ServiceModel.Web, System.Runtime.Serialization名称空间,代码如下:
User Class:
using System; using System.Runtime.Serialization; namespace Contract { [DataContract] public class User { [DataMember] public int Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] public DateTime Birthday { get; set; } [DataMember] public bool Gender { get; set; } [DataMember] public int Age { get; set; } } }
IUserService
using System; using System.Collections.Generic; using System.ServiceModel; using System.ServiceModel.Web; namespace Contract { [ServiceContract] public interface IUserService { [WebGet(UriTemplate="Api/Users",RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] IEnumerable<User> GetAll(); [WebGet(UriTemplate="Api/Users/{id}",RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] User Get(string id); [WebInvoke(UriTemplate="Api/Users/{id}",Method ="DELETE",RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)] bool Delete(String id); [WebInvoke(UriTemplate ="Api/Users",Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] bool Add(User user); [WebInvoke(UriTemplate ="Api/Users",Method = "PUT",RequestFormat = WebMessageFormat.Json,ResponseFormat =WebMessageFormat.Json)] bool Update(User user); } }
这个和以往普通的WCF服务不一样,在方法名上面的Attribute为WebGet/WebInvoke,请求的参数放置在UriTemplate中。
UserService
using Contract; using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel.Web; namespace Service { public class UserService : IUserService { private List<User> _cache = new List<User>(); public UserService() { _cache.Add(new User() { Id = 1, Name = "王大锤", Age = 20, Birthday = new DateTime(2012, 12, 31), Gender = true}); _cache.Add(new User() { Id = 2, Name = "张全蛋", Age = 21, Birthday = new DateTime(2012, 12, 31), Gender = true }); _cache.Add(new User() { Id = 3, Name = "赵铁柱", Age = 23, Birthday = new DateTime(2012, 12, 31), Gender = true }); _cache.Add(new User() { Id = 4, Name = "小美", Age = 22, Birthday = new DateTime(2012, 12, 31), Gender = false }); } public bool Add(User user) { bool result = false; try { var first = _cache.FirstOrDefault(u => u.Id == user.Id); if(first == null) { _cache.Add(user); result = true; WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Created; } else { result = false; } } catch (Exception) { result = false; } return result; } public bool Delete(string id) { bool result = false; try { var first = _cache.FirstOrDefault(u=>u.Id.ToString() == id); if(first != null) { _cache.Remove(first); WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Created; result = true; } else { result = false; WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.NotFound; } } catch (Exception) { result = false; } return result; } public User Get(string id) { var target = _cache.FirstOrDefault(u => u.Id.ToString() == id); WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; return target; } public IEnumerable<User> GetAll() { WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; return _cache; } public bool Update(User user) { bool result = false; var target = _cache.FirstOrDefault(u => u.Id == user.Id); if(target != null) { _cache.Remove(target); _cache.Add(target); WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; } else { WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.NotFound; } return result; } } }
模拟实现了一个CURD的REST服务。下面就可以对服务进行承载。介绍两种方式,
1. 控制台程序:
App.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <system.serviceModel> <services> <service name="Service.UserService"> <endpoint address="http://192.168.1.100/UserService" binding="webHttpBinding" contract="Contract.IUserService" /> </service> </services> </system.serviceModel> </configuration>
Program.cs
static void Main(string[] args) { using (WebServiceHost host = new WebServiceHost(typeof(UserService))) { host.Opened += delegate { Console.WriteLine("Service is opened."); }; host.Open(); Console.Read(); } }
运行服务,在浏览器中访问获取所有User的服务,
![](https://images2015.cnblogs.com/blog/622438/201604/622438-20160411234838910-4016341.png)
2. 在IIS中承载服务,
在Service工程下添加Web.config文件:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="Service.UserService"> <endpoint address="" binding="webHttpBinding" contract="Contract.IUserService" /> </service> </services> </system.serviceModel> </configuration>
这里address不需要指定,IIS会分配一个地址给服务。
新建UserService.svc文件,
<%@ ServiceHost Service="Service.UserService" Language="C#" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
将Service编译路径指向到Bin目录下。然后再IIS中新建一个Application指向Service所在目录即可,
在浏览器中访问结果如下:
![](https://images2015.cnblogs.com/blog/622438/201604/622438-20160411235410035-758311258.png)
获得了一组Json数据。
关于WCF的REST服务就先介绍到这里,后面的博客会介绍如何来Consume这个服务。
感谢您的阅读,代码点击这里下载。
相关文章推荐
- SQL Server 2012不支持从SQL Server 2000的备份进行还原
- SpringMVC简单例子
- 数据结构-队列
- [线程]——死锁
- 低功耗蓝牙(BLE)之开发步骤
- Deibian8安装微软雅黑字体
- Leetcode #40. Combination Sum II 组合求和2 解题报告
- Qt面向对象的程序设计(二)
- 监听器
- SQLAlchemy 操作数据库
- hdu1495
- [前端 4] 使用Js实现图片上传预览
- [前端 4] 使用Js实现图片上传预览
- popupwindow的学习
- 单调递增子序列(二)(nyoj214)
- 1003快速排序
- java多态和动态绑定
- 射频中经常是用50欧姆作为阻抗匹配的标准的原因
- 线程运行机制
- WPF