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服务 _________________ ...
随机推荐
- angularJs模块ui-router之路由控制
在你的应用中大多数状态都有与其相关联的 url,路由控制不是设计完成 state 之后的事后想法,而是开始开发时就应该考虑的问题. 这里是如何设置一个基本url. $stateProvider .st ...
- 【USACO 2.4】Overfencing(bfs最短路)
H行W列的迷宫,用2*H+1行的字符串表示,每行最多有2*W+1个字符,省略每行后面的空格.迷宫的边界上有且仅有两个出口,求每个点出发到出口的最短路. +-+-+-+-+-+ | | +-+ +-+ ...
- Map工具系列-04-SQL合并执行工具
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- List集合的迭代器方法
1.后台JAVA代码的实现 //获取所有的支付方式的迭代器 // 获取支付方式 @RequestMapping(value = "get/payed/type", method = ...
- 20145204&20145212信息安全系统实验一
信息安全系统实验报告 博客链接
- flask-whooshalchemy需要注意的一点
在学习mega—tutorial时全文搜索模块遇到了问题,那就是使用全文搜索查询出来的数据为空的列表,输出了sql语句后发现where后没有条件,困扰了许久,后来才发现是自己不细心,在进行全文索引时应 ...
- 文件夹锁定(Source)
文件夹锁定(Source)private void Lock(string folderPath){ try { string adminUserName = Environ ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
- tyvj1144 股票
描述 2130年,股神巴菲特投胎了!他投胎到你身上!你作为股神转世,能力比原股神还要强,你可以预测到今后n天的股价.假设刚开始你的手上有1元钱,你想知道n天后你最多可以赚到多少钱.作为股神转世,你准备 ...
- [Java] Java执行Shell命令
Methods ProcessBuilder.start() 和 Runtime.exec() 方法都被用来创建一个操作系统进程(执行命令行操作),并返回 Process 子类的一个实例,该实例可用来 ...