zoukankan      html  css  js  c++  java
  • [转载]WCF4.0 – RESTful WCF Services (1) (入门) .

    http://blog.csdn.net/fangxinggood/article/details/6235662

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

    1. 契约

    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 { getset; }  
    31.         [DataMember]  
    32.         public string Detail { getset; }  
    33.         [DataMember]  
    34.         public DateTime CreatedDate { getset; }  
    35.     }  
    36. }  

     
    2. 实现

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

    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也很容易:

    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如何调用这个服务:

    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)

  • 相关阅读:
    maven 错误:HttpServlet was not found on the Java
    maven 配置Project Facets时further configuration available不出来问题
    maven 解决Cannot change version of project facet Dynamic web module to 2.5
    maven 怎么在MyEclipse中打开Navigator视图
    maven web项目不能创建src/main/java等文件夹的问题
    Maven 使用Eclipse构建Maven的SpringMVC项目
    Maven 异常:Project configuration is not up-to-date with pom.xml解决方案
    Eclipse 配置Maven以及修改默认Repository
    Android Java Mail与Apache Mail发送邮件对比
    Android JavaMail介绍及发送一封简单邮件
  • 原文地址:https://www.cnblogs.com/fx2008/p/2241436.html
Copyright © 2011-2022 走看看