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 ...
随机推荐
- C语言-04-函数
函数 函数是一组一起执行任务的语句,函数是一个可执行C程序必不可少的条件(至少一个main()函数),函数的定义形式 returnType functionName() { bodyOf of the ...
- virtualbox 中ubantu虚拟机范文win7文件夹
宿主机操作系统: windows7_x64 旗舰版 Oracle VM virtualBox版本:5.0.12 虚拟机操作系统: Ubantu15.12_x64 Desktop版本 让虚拟机可以访 ...
- Python yield 使用浅析(iterable generator )
http://blog.csdn.net/preterhuman_peak/article/details/40615201 如何生成斐波那契數列 斐波那契(Fibonacci)數列是一个非常简单的递 ...
- android中实现view可以滑动的六种方法
在android开发中,经常会遇到一个view需要它能够支持滑动的需求.今天就来总结实现其滑动的六种方法.其实每一种方法的 思路都是一样的,即:监听手势触摸的坐标来实现view坐标的变化,从而实现vi ...
- MaxMin搜索
- 【SQL查询】集合查询之INTERSECT
[SQL查询]集合查询之INTERSECT 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~ ...
- Linux 本地文件或文件夹上传服务器
Linux 本地文件或文件夹上传服务器 一.权限设置 本地文件或文件夹上传服务器,你首先需要获取到root权限: 二.上传方式 上传方式有两种 : 1.通过 FTP 客户端上传文件或文件夹: 2.通过 ...
- SQL SERVER 2012 使用订阅发布同步数据库
软件做大了,客户就多了,一个数据库服务器是远远不够的,当有一台数据服务器卦掉,那整个系统就会崩溃,所以必须考虑到数据库的自动同步与备份,当一台数据库服务 器宕机,自然就有用一台数据服务器启动起来保证整 ...
- Learning c section 1
#include<stdio.h> void main() { puts("hello world"); int x=4; //the %p format will p ...
- 用javascript得到客户端IP的新方法
javascript得到客户端IP的新方法 很久以来,我都是经过http://fw.qq.com/ipaddress来得到客户端用户的IP,这个方法简单.快速.实用 . 我们调用它的写法是: < ...