zoukankan      html  css  js  c++  java
  • 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.   
    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 plaincopy
     
    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 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

  • 相关阅读:
    可以自己设计和定的报表工具!
    金山词霸取词冲突
    SSRS 2008 Domain User Issue
    第一次用AX2009正式版!
    顶级会议及期刊
    Python基础常识
    Ubuntu系统下查看安装的CUDA和CUDNN的版本
    js内字符串转数组的基本方法
    JavaScript之逻辑分支
    JS入门
  • 原文地址:https://www.cnblogs.com/soundcode/p/3796656.html
Copyright © 2011-2022 走看看