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

  • 相关阅读:
    SQL函数union,union all整理
    Oracle中的having()函数
    SQL函数count(),sum()理解
    Office Online Server 和 SharePoint 2016配置时报错
    Manjaro 黑苹果网卡BCM4360折腾记
    Manjaro安装与基本配置
    在Arch Linux/Manjaro上安装KVM、QEMU和Virt Manager的方法
    Nginx 优化详解
    xargs 使用详解
    Centos7 搭建lnmp环境 (centos7+nginx+MySQL5.7.9+PHP7)
  • 原文地址:https://www.cnblogs.com/soundcode/p/3796656.html
Copyright © 2011-2022 走看看