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

  • 相关阅读:
    类和对象代码练习1
    搬迁MSSQL出现的问题
    QQ群空间是我见过最烂的系统
    导出表数据脚本的存储过程 [转自CSDN]
    plesk for Linux 没有默认首页的优先级别设置
    传说中的otag开源是假的。BS!!!!!
    FTP关闭mput上传确认
    刚装的vs2008不能生成silverlight,郁闷中
    怎么查域名反向解析是否成功
    现在的黑客太有才了。。。/不喜欢开防火墙的要小心
  • 原文地址:https://www.cnblogs.com/soundcode/p/3796656.html
Copyright © 2011-2022 走看看