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

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

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. {  
  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] 
 
  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,在浏览器中键入   就能得到结果:

[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://blog.csdn.net/fangxing80/article/details/6235662

转载于:https://www.cnblogs.com/chen110xi/p/4209103.html

你可能感兴趣的文章
第五天站立会议内容
查看>>
ATMEGA16 IOport相关汇总
查看>>
JAVA基础-多线程
查看>>
面试题5:字符串替换空格
查看>>
[Codevs] 线段树练习5
查看>>
Amazon
查看>>
component-based scene model
查看>>
Echart输出图形
查看>>
hMailServer搭建简单邮件系统
查看>>
从零开始学习jQuery
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射
查看>>
opacity半透明兼容ie8。。。。ie8半透明
查看>>
CDOJ_24 八球胜负
查看>>
Alpha 冲刺 (7/10)
查看>>
一款jQuery打造的具有多功能切换的幻灯片特效
查看>>
SNMP从入门到开发:进阶篇
查看>>
@ServletComponentScan ,@ComponentScan,@Configuration 解析
查看>>
unity3d 射弹基础案例代码分析
查看>>
thinksns 分页数据
查看>>
os模块
查看>>