WCF4.0 –- RESTful WCF Services (1) (入门)
WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构层面上的考虑。 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求,无需去实现复杂的客户端代理,无需使用复杂的数据通讯方式既可以将我们的服务暴露给任何需要的人,无论他使用 VB、Ruby、JavaScript,甚至是 HTML FORM,或者直接在浏览器地址栏输入。
WCF 中通过 WebGetAttribute、WebInvokeAttribute (GET/PUT/POST/DELETE)、UriTemplate 定义 REST 的服务的调用方式, 通过WebMessageFormat (Xml/Json) 定义消息传递的格式。
1. 契约
- using System;
- using System.Collections.Generic;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- using System.ServiceModel.Web;
- namespace WcfRESTfulSvc1
- {
- [ServiceContract]
- public interface ITaskService
- {
- [OperationContract]
- [WebGet(UriTemplate="Tasks/Xml", ResponseFormat=WebMessageFormat.Xml)]
- List<Task> GetTasksXml();
- [OperationContract]
- [WebGet(UriTemplate = "Tasks/Json", ResponseFormat = WebMessageFormat.Json)]
- List<Task> GetTasksJson();
- [OperationContract]
- [WebInvoke(UriTemplate="Task/{title}", Method="GET", ResponseFormat=WebMessageFormat.Json)]
- Task GetTasksByTitle(string title);
- }
- [DataContract]
- public class Task
- {
- [DataMember]
- public string Title { get; set; }
- [DataMember]
- public string Detail { get; set; }
- [DataMember]
- public DateTime CreatedDate { get; set; }
- }
- }
2. 实现
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace WcfRESTfulSvc1
- {
- public class TaskService : ITaskService
- {
- public List<Task> GetTasksXml()
- {
- return GetData();
- }
- public List<Task> GetTasksJson()
- {
- return GetData();
- }
- public Task GetTasksByTitle(string title)
- {
- return GetData().Where(t => t.Title == title).FirstOrDefault();
- }
- private static List<Task> GetData()
- {
- return new List<Task>
- {
- new Task { Title="Task1", Detail="Do Something 1", CreatedDate=DateTime.Now },
- new Task { Title="Task2", Detail="Do Something 2", CreatedDate=DateTime.Now },
- new Task { Title="Task3", Detail="Do Something 3", CreatedDate=DateTime.Now },
- new Task { Title="Task4", Detail="Do Something 4", CreatedDate=DateTime.Now },
- new Task { Title="Task5", Detail="Do Something 5", CreatedDate=DateTime.Now },
- };
- }
- }
- }
通过 WCF 4.0 里创建的 WCF Service Application 发布REST服务很简单,只需要在 svc 的 Markup 里加上 Factory:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfRESTfulSvc1.TaskService" CodeBehind="TaskService.svc.cs"Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
BTW: 不过这样,WCF的Metadata就不能访问到了,也就说不能访问到svc的wsdl了。
OK,在浏览器中键入 http://localhost:2571/TaskService.svc/Tasks/Xml 就能得到结果:
- <ArrayOfTask xmlns="http://schemas.datacontract.org/2004/07/WcfRESTfulSvc1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
- <Task>
- <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
- <Detail>Do Something 1</Detail>
- <Title>Task1</Title>
- </Task>
- <Task>
- <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
- <Detail>Do Something 2</Detail>
- <Title>Task2</Title>
- </Task>
- <Task>
- <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
- <Detail>Do Something 3</Detail>
- <Title>Task3</Title>
- </Task>
- <Task>
- <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
- <Detail>Do Something 4</Detail>
- <Title>Task4</Title>
- </Task>
- <Task>
- <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>
- <Detail>Do Something 5</Detail>
- <Title>Task5</Title>
- </Task>
- </ArrayOfTask>
客户端的调用利用System.Net.WebClient也很容易:
- var client = new WebClient();
- this.txtResponse.Text = client.DownloadString(url);
Json的返回结果:
[{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 1","Title":"Task1"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 2","Title":"Task2"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 3","Title":"Task3"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 4","Title":"Task4"},{"CreatedDate":"//Date(1299687080328+0800)//","Detail":"Do Something 5","Title":"Task5"}]
再来看看利用jQuery如何调用这个服务:
- <mce:script type="text/javascript" language="JavaScript"><!--
- $(document).ready(function () {
- $("#btnGet").click(function () {
- var url = $("#txtUrl").val();
- $.get(url, function (data) {
- for (var i = 0; i < data.length; i++)
- $("#divResponse").append("<li>" +
- data[i].Title + " - " +
- data[i].Detail + "</li>");
- });
- });
- });
- // --></mce:script>
【REST WCF系列】
RESTful WCF Services (1) (入门)
RESTful WCF Services (2) (实现增,删,改,查)
RESTful WCF Services (3) (Raw Stream)
RESTful WCF Services (4) (Basic Security)
RESTful WCF Services (实例) (并发同步服务 SyncService)
http://blog.csdn.net/fangxing80/article/details/6235662
WCF4.0 –- RESTful WCF Services (1) (入门)的更多相关文章
- WCF4.0 –- RESTful WCF Services
转自:http://blog.csdn.net/fangxinggood/article/details/6235662 WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构 ...
- CRUD using Spring MVC 4.0 RESTful Web Services and AngularJS
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- IIS8.0 部署WCF Services
今天在Win 8的IIS上部署WCF Services,访问SVC文件时出现找不到处理程序的错误,以前遇到这个问题时都是尝试通过注册asp.net的方式处理一下,但是在Win8下这招不灵了,出现如下提 ...
- WCF学习之旅—WCF4.0中的简化配置功能(十五)
六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...
- .NET RESTful Web Services入门
很早之前看到过RESTful Web Services,并未在意,也没找相关资料进行学习.今天偶尔有一机会,就找了点资料进行研究,发现RESTful真是“简约而不简单”.下面用示例来说明: 1 项目结 ...
- 如何创建一个RESTful WCF Service
原创地址:http://www.cnblogs.com/jfzhu/p/4044813.html 转载请注明出处 (一)web.config文件 要创建REST WCF Service,endpoin ...
- WCF4.0安装 NET.TCP启用及常见问题
WCF4.0安装及NET.TCP启用 WCF 4.0 一般默认安装.net Framework 4.0的时候已经安装. 但如果先装.net framework 4.0,后装IIS,就会出现问题.需要重 ...
- Jersey the RESTful Web Services in Java
Jersey 是一个JAX-RS的实现, JAX-RS即Java API for RESTful Web Services, 支持按照表述性状态转移(REST)架构风格创建Web服务. REST 中最 ...
- 使用 Spring 3 来创建 RESTful Web Services
来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...
随机推荐
- 捡火柴的Nova君(n个线段相交问题)
题目来源:https://biancheng.love/contest-ng/index.html#/41/problems 捡火柴的Nova君 题目描述 南方没暖气,怕冷的的宝宝们只能用火柴取暖.然 ...
- 【mysql】关于innodb_file_format
一.几条mysql命令 通过以下命令看一下mysql中 innodb_file_format的配置 mysql> show engines; +--------------------+---- ...
- Java异常信息处理
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.jun ...
- 烂泥:KVM虚拟机克隆
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了有关KVM虚拟机快照的创建与恢复,这篇文章我们来介绍有关KVM虚拟机克隆. KVM虚拟机的克隆,我们可以分以下几步: 1. 使用virt ...
- C语言的函数
"函数"在英文的翻译是"function",无论在自然科学还是计算机科学都是这个词,而"function"的本意是"功能" ...
- mysql大小写问题
以前做企业项目的时候,用的都是oracle数据库,在新公司项目用的是mysql,有关mysql大小写的问题 1 windows下默认mysql是不区分大小写的,要想让其支持大小写.更改方法 在my ...
- rabbitmq server的安装以及常用的命令
Centos 源代码编译 安装 ErlangErlang依赖哪些库? A fully working GCC compiler environment Ncurses developm ...
- 标准库shared_ptr智能指针的实现
目前测试功能正常.若有不完善的地方在改进吧.时候不早了睡觉去,哎,翘课会被抓,不冒险了.晚安全世界O(∩_∩)O /****************************************** ...
- hadoop yarn configure
<property> <description>The minimum allocation for every container request at the RM, ...
- cnblogs美化及插件
1.vp计数 http://www.amazingcounters.com 2.来源地图 http://clustrmaps.com 2.1来源地图 http://www.flagcounter.co ...