博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF4.0 –- RESTful WCF Services (1) (入门)
阅读量:2386 次
发布时间:2019-05-10

本文共 7460 字,大约阅读时间需要 24 分钟。

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

WCF 中通过 WebGetAttribute、WebInvokeAttribute (GET/PUT/POST/DELETE)、UriTemplate 定义 REST 的服务的调用方式, 通过 WebMessageFormat (Xml/Json) 定义消息传递的格式。
1. 契约

[c-sharp]
  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.     [ServiceContract] 
  9.     public interface ITaskService 
  10.     { 
  11.         [OperationContract] 
  12.         [WebGet(UriTemplate="Tasks/Xml", ResponseFormat=WebMessageFormat.Xml)] 
  13.         List<Task> GetTasksXml(); 
  14.  
  15.         [OperationContract] 
  16.         [WebGet(UriTemplate = "Tasks/Json", ResponseFormat = WebMessageFormat.Json)] 
  17.         List<Task> GetTasksJson(); 
  18.  
  19.         [OperationContract] 
  20.         [WebInvoke(UriTemplate="Task/{title}", Method="GET", ResponseFormat=WebMessageFormat.Json)] 
  21.         Task GetTasksByTitle(string title); 
  22.     } 
  23.  
  24.  
  25.     [DataContract] 
  26.     public class Task 
  27.     { 
  28.         [DataMember] 
  29.         public string Title { get; set; } 
  30.         [DataMember] 
  31.         public string Detail { get; set; } 
  32.         [DataMember] 
  33.         public DateTime CreatedDate { get; set; } 
  34.     } 
2. 实现
[c-sharp]
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4.  
  5. namespace WcfRESTfulSvc1 
  6.     public class TaskService : ITaskService 
  7.     { 
  8.         public List<Task> GetTasksXml() 
  9.         { 
  10.             return GetData(); 
  11.         } 
  12.  
  13.         public List<Task> GetTasksJson() 
  14.         { 
  15.             return GetData(); 
  16.         } 
  17.  
  18.         public Task GetTasksByTitle(string title) 
  19.         { 
  20.             return GetData().Where(t => t.Title == title).FirstOrDefault(); 
  21.         } 
  22.  
  23.         private static List<Task> GetData() 
  24.         { 
  25.             return new List<Task> 
  26.             { 
  27.                 new Task { Title="Task1", Detail="Do Something 1", CreatedDate=DateTime.Now }, 
  28.                 new Task { Title="Task2", Detail="Do Something 2", CreatedDate=DateTime.Now }, 
  29.                 new Task { Title="Task3", Detail="Do Something 3", CreatedDate=DateTime.Now }, 
  30.                 new Task { Title="Task4", Detail="Do Something 4", CreatedDate=DateTime.Now }, 
  31.                 new Task { Title="Task5", Detail="Do Something 5", CreatedDate=DateTime.Now }, 
  32.             }; 
  33.         } 
  34.     } 
通过 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,在浏览器中键入   就能得到结果:
[xhtml]
  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]
  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]
  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系列】

转载地址:http://jejab.baihongyu.com/

你可能感兴趣的文章
2018年前端性能优化总结,这也是我做程序员的第五个年头了
查看>>
前端进阶(三)从0到1学AJAX,这篇就够了!
查看>>
强大的CSS:实现平行四边形布局效果
查看>>
强大的CSS:var变量的局部作用域(继承)特性
查看>>
强大的CSS: 使用“变量种子计数器”扩展动画更多可能性
查看>>
强大的CSS:focus-visible伪类真的太6了!
查看>>
强大的CSS:3种姿势实现26个英文字母的案例
查看>>
强大的CSS:placeholder-shown伪类实现Material Design占位符交互效果
查看>>
强大的CSS:图形绘制合集,方便你我!
查看>>
强大的CSS:scroll-snap滚动事件停止及元素位置检测
查看>>
程序员30岁前,月薪达不到30K,该何去何从?
查看>>
只要记住这五点,学习任何新编程语言都不是问题
查看>>
常见的前端开发CSS 面试题及回答策略
查看>>
缺前端是假的,缺优秀前端是真的
查看>>
前端入门那么容易,工作很难找吗?
查看>>
Web前端很难学?html、css t、JavaScrip知识架构图分享
查看>>
常见的前端开发:Javascript 面试题及回答策略
查看>>
web前端开发学习推荐这5本书
查看>>
Windows资源管理器相关信息获取
查看>>
windows资源管理器及ie监听
查看>>