WCF创建RESTService
这篇博客将介绍在WCF中创建REST服务相关内容。首先先看一下的项目结构:

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 = , Name = "王大锤", Age = , Birthday = new DateTime(, , ), Gender = true}); _cache.Add(new User() { Id = , Name = "张全蛋", Age = , Birthday = new DateTime(, , ), Gender = true }); _cache.Add(new User() { Id = , Name = "赵铁柱", Age = , Birthday = new DateTime(, , ), Gender = true }); _cache.Add(new User() { Id = , Name = "小美", Age = , Birthday = new DateTime(, , ), 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的服务,

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所在目录即可,
在浏览器中访问结果如下:

获得了一组Json数据。
关于WCF的REST服务就先介绍到这里,后面的博客会介绍如何来Consume这个服务。
感谢您的阅读,代码点击这里下载。
WCF创建RESTService的更多相关文章
- 使用WCF 创建 Rest service
		
REST SERVICE 允许客户端修改url路径,并且web端功过url 请求数据. 他使用http协议进行通讯,想必大家都知道 . 并且我们可以通过设置进行数据类型转换, 支持XML,JSON 格 ...
 - 用C#基于WCF创建TCP的Service供Client端调用
		
本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Servi ...
 - 利用WCF创建简单的RESTFul Service
		
1):用VS2013创建一个WCF的工程,如下图所示: 2):我们来看一下默认状态下的config文件内容,这里的内容我们会再后续的步骤中进行修改 <?xml version="1.0 ...
 - WCF创建到使用到发布
		
1,在VS里面新建一个类库项目 2,向类库项目里添加WCF服务文件 3.按照WCF约束规范编写接口和实现类 using System; using System.Collections.Generic ...
 - 宿主在Windows Service中的WCF(创建,安装,调用) (host到exe,非IIS)
		
1. 创建WCF服务 在vs2010中创建WCF服务应用程序,会自动生成一个接口和一个实现类:(IService1和Service1) IService1接口如下: using System.Ru ...
 - WCF创建简单程序
		
1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc,当然你也可以直接 ...
 - WCF 创建WCF
		
一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...
 - C#中使用WCF创建面向网络的服务程序
		
如题. 这种东西基于微软的一整套东西,在.NET内使用特别方便.利弊自行衡量,是否使用自行决定. 步骤1.创建一组在网上发布的方法 新建项目,类型选择“WCF服务应用程序” 在项目里,你可以补充任意 ...
 - WCF 项目应用连载[2] - 创建Lig日志系统
		
WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample -序 现在我们创建一个Lig工程 - Litelog 2.1 创建Lig服务 _________________ ...
 
随机推荐
- Nginx高级使用
			
1.用户认证 客户端访问限制deny 客户端地址: 拒绝访问allow 客户端地址: 允许访问 rpm -q httpd-tools yum -y install httpd-tools user h ...
 - Leetcode 40. Combination Sum II
			
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
 - 解析Java类和对象的初始化过程
			
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...
 - Windows中创建桌面快捷方式
			
Windows中创建桌面快捷方式 -------------- -------------- -------------- --------------
 - entity1
 - 谷歌地图地理解析和反解析geocode.geocoder详解
			
地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国 ...
 - Twemproxy 缓存代理服务器
			
Twemproxy 缓存代理服务器 Twemproxy 概述 Twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数.T ...
 - 在Application中集成Microsoft Translator服务之优化
			
在一篇文章中我们已经实现了功能,但是一个明显的问题是响应时间非常长,用户体验非常糟糕,这篇文章将带你找出问题所在并进行优化 为了找出追魁祸首,这里使用 System.Diagnostics.Stopw ...
 - [NHibernate]一对多关系(级联删除,级联添加)
			
目录 写在前面 文档与系列文章 一对多关系 一个例子 级联删除 级联保存 总结 写在前面 在前面的文章中,我们只使用了一个Customer类进行举例,而在客户.订单.产品中它们的关系,咱们并没有涉及, ...
 - Angular2.0快速开始
			
参考资料: Angular2.0快速开始 AngularJS2 教程