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 plaincopy

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

2. 实现

[c-sharp] view plaincopy

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

通过 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 plaincopy

  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 plaincopy

  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 plaincopy

  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

WCF4.0 –- RESTful WCF Services (1) (入门),布布扣,bubuko.com

时间: 2024-12-21 01:35:14

WCF4.0 –- RESTful WCF Services (1) (入门)的相关文章

WCF4.0 –- RESTful WCF Services

转自:http://blog.csdn.net/fangxinggood/article/details/6235662 WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求,无需去实现复杂的客户端代理,无需使用复杂的数据通讯方式既可以将我们的服务暴露给任何需要的人,无论他使用 VB.Ruby.JavaScript,甚至是 HTML FORM,或者直接在浏览器地址

IIS8.0 部署WCF Services

今天在Win 8的IIS上部署WCF Services,访问SVC文件时出现找不到处理程序的错误,以前遇到这个问题时都是尝试通过注册asp.net的方式处理一下,但是在Win8下这招不灵了,出现如下提示: 在Windows功能中已经安装了asp.net4.5 要想正确使用WCF 服务,还需要启用.NET Framework的WCF服务,这个默认是不启用的. IIS8.0 部署WCF Services,布布扣,bubuko.com

CRUD using Spring MVC 4.0 RESTful Web Services and AngularJS

原文: http://www.tuicool.com/articles/MneeU3f Based on the requests from many readers, I am now presenting an article on how to make CRUD operations using Spring MVC 4.0 RESTFul web services and AngularJS. I had already written few articles on Spring M

JAVA RESTful Web Services - Jersey 入门

创建一个新项目: 使用maven  & Eclipse (Mars) Maven命令行创建一个新项目(maven环境搭建如不知晓自己查去) mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactI

WCF学习之旅—WCF4.0中的简化配置功能(十五)

六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提供一些默认配置功能的服务终结点.当然也包含默认的绑定和默认的服务行为.这一切都是为了简化配置过程,避免一 些不必要的错误. 下面我们就来通过代码示例来体验一下WCF4.0提供简化配置的功能. (1)默认终结点 默认终结点(Default Endpoints)指的是,如果开发人员没有为服务显示配置服务

WCF4.0安装 NET.TCP启用及常见问题

WCF4.0安装及NET.TCP启用 WCF 4.0 一般默认安装.net Framework 4.0的时候已经安装. 但如果先装.net framework 4.0,后装IIS,就会出现问题.需要重新注册WCF4.0. WCF4.0 已经是.net 4.0的一个内部组件,不需要.net3.5 那样麻烦先装windows组件. 一.确认是否安装WCF4.0: 如下图,查看*.svc 后缀的文件是否被svc-Integrated-4.0 或 svc-ISAPI-4.0_64/32bit 程序处理:

How To Easily Call WCF Services Properly z

Please note: this article has been superceded by the documentation for the ChannelAdam WCF Library. Background In my previous article, How To Call WCF Services Properly, I researched and highlighted the typical problems with using WCF clients (such a

RESTful Web Services测试工具推荐

命令行控的最爱:cURL cURL是一个很强大的支持各种协议的文件传输工具,用它来进行RESTful Web Services的测试简直是小菜一碟.这个工具基本上类Unix操作系统(各种Linux.Mac OS X)都自带了,而Windows用户就得去额外下载了. cURL的命令参数非常多,一般用于RESTful Web Services测试要用到下面四种参数: -d/–data <data>:POST数据内容 -X/–request <command>:指定请求的方法(使用-d时

wcf services host in a console application

一个serviceHost多个wcf服务,宿主为console 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.ServiceModel; 5 using System.ServiceModel.Activation; 6 using System.ServiceModel.Web; 7 using System.Text; 8 9 namespace WcfRestS