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. 契约

[c-sharp]  view plain copy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Runtime.Serialization;  
  4. using System.ServiceModel;  
  5. using System.ServiceModel.Web;  
  6.   
  7. namespace WcfRESTfulSvc1  
  8. {  
  9.     [ServiceContract]  
  10.     public interface ITaskService  
  11.     {  
  12.         [OperationContract]  
  13.         [WebGet(UriTemplate="Tasks/Xml", ResponseFormat=WebMessageFormat.Xml)]  
  14.         List<Task> GetTasksXml();  
  15.   
  16.         [OperationContract]  
  17.         [WebGet(UriTemplate = "Tasks/Json", ResponseFormat = WebMessageFormat.Json)]  
  18.         List<Task> GetTasksJson();  
  19.   
  20.         [OperationContract]  
  21.         [WebInvoke(UriTemplate="Task/{title}", Method="GET", ResponseFormat=WebMessageFormat.Json)]  
  22.         Task GetTasksByTitle(string title);  
  23.     }  
  24.   
  25.   
  26.     [DataContract]  
  27.     public class Task  
  28.     {  
  29.         [DataMember]  
  30.         public string Title { get; set; }  
  31.         [DataMember]  
  32.         public string Detail { get; set; }  
  33.         [DataMember]  
  34.         public DateTime CreatedDate { get; set; }  
  35.     }  
  36. }  

 
2. 实现

[c-sharp]  view plain copy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4.   
  5. namespace WcfRESTfulSvc1  
  6. {  
  7.     public class TaskService : ITaskService  
  8.     {  
  9.         public List<Task> GetTasksXml()  
  10.         {  
  11.             return GetData();  
  12.         }  
  13.   
  14.         public List<Task> GetTasksJson()  
  15.         {  
  16.             return GetData();  
  17.         }  
  18.   
  19.         public Task GetTasksByTitle(string title)  
  20.         {  
  21.             return GetData().Where(t => t.Title == title).FirstOrDefault();  
  22.         }  
  23.   
  24.         private static List<Task> GetData()  
  25.         {  
  26.             return new List<Task>  
  27.             {  
  28.                 new Task { Title="Task1", Detail="Do Something 1", CreatedDate=DateTime.Now },  
  29.                 new Task { Title="Task2", Detail="Do Something 2", CreatedDate=DateTime.Now },  
  30.                 new Task { Title="Task3", Detail="Do Something 3", CreatedDate=DateTime.Now },  
  31.                 new Task { Title="Task4", Detail="Do Something 4", CreatedDate=DateTime.Now },  
  32.                 new Task { Title="Task5", Detail="Do Something 5", CreatedDate=DateTime.Now },  
  33.             };  
  34.         }  
  35.     }  
  36. }  


通过 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  就能得到结果:

[xhtml]  view plain copy
 
  1. <ArrayOfTask xmlns="http://schemas.datacontract.org/2004/07/WcfRESTfulSvc1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">  
  2.   <Task>  
  3.     <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>  
  4.     <Detail>Do Something 1</Detail>  
  5.     <Title>Task1</Title>  
  6.   </Task>  
  7.   <Task>  
  8.     <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>  
  9.     <Detail>Do Something 2</Detail>  
  10.     <Title>Task2</Title>  
  11.   </Task>  
  12.   <Task>  
  13.     <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>  
  14.     <Detail>Do Something 3</Detail>  
  15.     <Title>Task3</Title>  
  16.   </Task>  
  17.   <Task>  
  18.     <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>  
  19.     <Detail>Do Something 4</Detail>  
  20.     <Title>Task4</Title>  
  21.   </Task>  
  22.   <Task>  
  23.     <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate>  
  24.     <Detail>Do Something 5</Detail>  
  25.     <Title>Task5</Title>  
  26.   </Task>  
  27. </ArrayOfTask>  



客户端的调用利用System.Net.WebClient也很容易:

[c-sharp]  view plain copy
 
  1. var client = new WebClient();  
  2. 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如何调用这个服务:

[javascript]  view plain copy
 
  1. <mce:script type="text/javascript" language="JavaScript"><!--  
  2.     $(document).ready(function () {  
  3.         $("#btnGet").click(function () {  
  4.             var url = $("#txtUrl").val();  
  5.             $.get(url, function (data) {  
  6.                 for (var i = 0; i < data.length; i++)  
  7.                     $("#divResponse").append("<li>" +  
  8.                     data[i].Title + "&nbsp;-&nbsp;" +  
  9.                     data[i].Detail + "</li>");  
  10.             });  
  11.         });  
  12.     });  
  13. // --></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

 

分类:  ASP.NET, WCF
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/3796656.html ,如需转载请自行联系原作者

相关文章
|
7月前
|
Python API 网络架构
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
|
7月前
|
JSON 网络架构 数据格式
SpringMVC-REST风格简介及RESTful入门案例
SpringMVC-REST风格简介及RESTful入门案例
78 0
|
前端开发 NoSQL Java
SpringBoot从入门到精通(二十)快速构建Restful Web API 服务
随着互联网化等逐渐深入,应用系统也变得越来越复杂,系统架构正在朝着微服务化,中台化的方向发展。这就需要各个系统、各个厂家之间的数据频繁交互。所以,使用 Restful 风格构建的应用接口适用于移动互联网厂商的业务场景,正在被越来越多的企业推荐使用。那么什么是 RESTful 呢?
SpringBoot从入门到精通(二十)快速构建Restful Web API 服务
|
6月前
|
JavaScript API 开发者
GraphQL API开发入门:比RESTful更高效的数据查询方式
**GraphQL API开发入门摘要** GraphQL是一种更高效的数据查询方式,解决RESTful API的过度或不足获取数据问题。它允许客户端按需获取数据,减少网络传输,支持一次请求获取多资源。强类型和自描述特性方便了开发。文章通过一个简单的Node.js示例,展示如何使用`apollo-server-express`搭建GraphQL服务器,包括定义Schema、实现Resolver和创建服务器。通过测试,显示了GraphQL如何提供精确数据和优化查询效率。对于复杂数据需求,GraphQL是现代API设计的有效选择。
74 0
|
4月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
4月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
Oracle 关系型数据库 API
C# LIS检验系统源码,接口技术:RESTful API + Http+WCF
LIS检验系统一种专门用于医院化验室的计算机系统,它致力于提高医院化验室的工作效率和检测准确率。LIS系统由多个子系统组成,包括样本管理系统、质控系统、检验结果管理系统、报告管理系统等。体系结构:Client/Server架构 SaaS模式 客户端:WPF+Windows Forms 服务端:C# +.Net 数据库:Oracle 接口技术:RESTful API + Http+WCF
114 2
|
存储 JSON API
Go语言:RESTful API 服务,急速入门!
REST即表述性状态传递(英文:Representational State Transfer,简称REST),它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性
501 0
Go语言:RESTful API 服务,急速入门!
|
前端开发 JavaScript Java
RESTFul从入门到精通超全解析(全)
目录前言1. 定义2. 实战代码2.1 前期工作3. HiddenHttpMethodFilter3.1 源码3.2 实现方式3.3 细节 前言 RESTFul(Representational State Transfer)表现层资源状态转移。 (也就是前端的视图界面和后端的控制层界面的转移) 在客户端和服务器端之间转移(transfer)代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的 1. 定义 一种协议 主要是形式比较方便 访问一个 http 接口:http://localh
154 0
RESTFul从入门到精通超全解析(全)
下一篇
无影云桌面