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 ...
随机推荐
- iOS-多线程之NSThread详解
前言 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B.为了同时执行两个任务,产生了多线程. 我打开一个视频软件,我开辟一个线程A让它执行下载任务,我开辟一个线程B,用来播放视频.我开辟两个 ...
- 我体验过的可以用的XCode插件
XCode版本:7.0.1 其实插件的使用,如果能得到直接的xclugin后缀文件,是可以直接放置在隐藏文件夹中: /Users/HeYang/Library/Application Support/ ...
- 快速与MySQL交互,使用XMAPP打开MySQL数据库,并用shell进行与MySQL交互<Window 10>
1.如果想要通过XAMPP shell登录MySQL,还需要下载安装好XAMPP. 2.双击打开xampp-control.exe,会出现以下界面,点击开启Apache和MySQL,这样我们就开启服务 ...
- iOS开发网络篇—网络编程基础(二)
下面叙述的是关于几个必须要知道的iOS网络编程入门级别的要点: 1.客户端如何找到连接的服务器 客户端通过URL找到想要连接的服务器 2.什么是URL URL的全称是Un ...
- android textview 设置不同的颜色和大小
1.定义不同的style <style name="approval_detail_info_style1"> <item name="android: ...
- nginx安装过程,报错处理:make[1]: *** [objs/addon/src/bson.o] Error 1
nginx安装过程中,经常会有各种错误: 具体安装步骤这里不做说明,网上一搜大把: 主要分析安装过程中遇到的问题 在make编译的时候,若报如下错误: cc1: warnings being trea ...
- Git+GitHub 使用小结
1.Git安装完成后需要做的配置 $ git config --global user.name "Your Name" $ git confi ...
- 在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证
背景 创建需要通过Windows用户进行身份认证的Asp.net MVC应用 要点 在Asp.net MVC应用基于Windows用户进行身份认证的方法有很多,如MVC自带的Windows认证就经常被 ...
- InfluxDB Cli中查询结果中time格式显示设置
InfluxDB Cli中,time默认显示为19位时间戳格式,平时查询起来特不方便,那么,如何设置成为我们人类能看懂的时间格式呢? 方法有二: 1.$ influx -precision rfc33 ...
- 关于google电子地图跟卫星地图位置不重合
再做项目时,用到了google地图的显示位置,就是在网页上插入事物在地图上的位置,点击卫星地图跟电子地图时发现不是重合,网上GOOGLE了下,说是加密的问题给偏移了500米左右,用google测量工具 ...