WCF4.0 –- RESTful WCF Services (1) (入门)
来源:互联网 发布:iphone图片整理软件 编辑:程序博客网 时间:2024/06/05 17:18
WCF 中通过 WebGetAttribute、WebInvokeAttribute (GET/PUT/POST/DELETE)、UriTemplate 定义 REST 的服务的调用方式, 通过WebMessageFormat (Xml/Json) 定义消息传递的格式。
using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; namespace WcfRESTfulSvc1 { [ServiceContract] public interface ITaskService { [OperationContract] [WebGet(UriTemplate="Tasks/Xml", ResponseFormat=WebMessageFormat.Xml)] List<Task> GetTasksXml(); [OperationContract] [WebGet(UriTemplate = "Tasks/Json", ResponseFormat = WebMessageFormat.Json)] List<Task> GetTasksJson(); [OperationContract] [WebInvoke(UriTemplate="Task/{title}", Method="GET", ResponseFormat=WebMessageFormat.Json)] Task GetTasksByTitle(string title); } [DataContract] public class Task { [DataMember] public string Title { get; set; } [DataMember] public string Detail { get; set; } [DataMember] public DateTime CreatedDate { get; set; } } }
using System;using System.Collections.Generic;using System.Linq;namespace WcfRESTfulSvc1{ public class TaskService : ITaskService { public List<Task> GetTasksXml() { return GetData(); } public List<Task> GetTasksJson() { return GetData(); } public Task GetTasksByTitle(string title) { return GetData().Where(t => t.Title == title).FirstOrDefault(); } private static List<Task> GetData() { return new List<Task> { new Task { Title="Task1", Detail="Do Something 1", CreatedDate=DateTime.Now }, new Task { Title="Task2", Detail="Do Something 2", CreatedDate=DateTime.Now }, new Task { Title="Task3", Detail="Do Something 3", CreatedDate=DateTime.Now }, new Task { Title="Task4", Detail="Do Something 4", CreatedDate=DateTime.Now }, new Task { Title="Task5", Detail="Do Something 5", CreatedDate=DateTime.Now }, }; } }}
通过 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了。
使用debug进行启动调试,或者发布到IIS中
发布到IIS中要注意 应用程序池修改成asp.net 4.0, 否则会报一些名词找不到的错误
OK,在浏览器中键入 http://localhost:2571/TaskService.svc/Tasks/Xml 就能得到结果:
<ArrayOfTask xmlns="http://schemas.datacontract.org/2004/07/WcfRESTfulSvc1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Task> <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate> <Detail>Do Something 1</Detail> <Title>Task1</Title> </Task> <Task> <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate> <Detail>Do Something 2</Detail> <Title>Task2</Title> </Task> <Task> <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate> <Detail>Do Something 3</Detail> <Title>Task3</Title> </Task> <Task> <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate> <Detail>Do Something 4</Detail> <Title>Task4</Title> </Task> <Task> <CreatedDate>2011-03-09T21:51:13.3376004+08:00</CreatedDate> <Detail>Do Something 5</Detail> <Title>Task5</Title> </Task></ArrayOfTask>
客户端的调用利用System.Net.WebClient也很容易:
var client = new WebClient();
this.txtResponse.Text = client.DownloadString(url); //请求这个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如何调用这个服务:
<mce:script type="text/javascript" language="JavaScript"><!-- $(document).ready(function () { $("#btnGet").click(function () { var url = $("#txtUrl").val(); $.get(url, function (data) { for (var i = 0; i < data.length; i++) $("#divResponse").append("<li>" + data[i].Title + " - " + data[i].Detail + "</li>"); }); }); });// --></mce:script>
- WCF4.0 –- RESTful WCF Services (1) (入门)
- WCF4.0 –- RESTful WCF Services (1) (入门)
- WCF4.0 –- RESTful WCF Services (1) (入门)
- WCF4.0 –- RESTful WCF Services
- WCF4.0 –- RESTful WCF Services
- WCF4.0 –- RESTful WCF Services (3) (Raw Stream)
- WCF4.0 –- RESTful WCF Services (4) (Basic Security)
- WCF4.0 –- RESTful WCF Services (5) (缓存)
- WCF4.0 –- RESTful WCF Services (3) (Raw Stream)
- WCF4.0 –- RESTful WCF Services (4) (Basic Security)
- WCF4.0 –- RESTful WCF Services (3) (Raw Stream)
- WCF4.0 –- RESTful WCF Services (4) (Basic Security)
- WCF4.0 –- RESTful WCF Services(Basic Security)
- WCF4.0 -- RESTful WCF Services(创建基于SSL的服务)
- WCF4.0 -- RESTful WCF Services 错误处理 (Error Handling)
- WCF4.0 -- RESTful WCF Services(创建基于SSL的服务)
- WCF4.0 -- RESTful WCF Services(创建基于SSL的服务)
- WCF4.0 -- RESTful WCF Services 错误处理 (Error Handling)
- C++ 泛型基础
- 开发者,你了解手机有多少种传感器?
- PCA主成分分析
- HDU 1018 Big Number
- DBLINK详解
- WCF4.0 –- RESTful WCF Services (1) (入门)
- Android应用快速开发有感
- error LNK1123: 转换到 COFF 期间失败
- linux种普通用户加入ROOT组的方法
- myeclipse 加载buiding workspace慢解决方案(解决内存不足)
- iOS5新增内容之支持文本输入的UIAlertView
- iOS5新增内容之UIStepper控件详解
- C#判断操作系统类型总结
- sencha 应用例子 http://jingub.com/