RESTful Wcf是一种基于Http协议的服务架构风格,  RESTful 的服务通常是架构层面上的考虑。 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求,无需去实现复杂的客户端代理,无需使用复杂的数据通讯方式既可以将我们的服务暴露给任何需要的人,无论他使用 VB、Ruby、JavaScript,甚至是 HTML FORM,或者直接在浏览器地址栏输入

WCF 中通过 WebGetAttribute、WebInvokeAttribute (GET/PUT/POST/DELETE)、UriTemplate 定义 REST 的服务的调用方式, 通过 WebMessageFormat (Xml/Json) 定义消息传递的格式。

RESTful的几点好处(引用博文):

1、简单的数据通讯方式,基于HTTP协议。避免了使用复杂的数据通讯方式。

2、避免了复杂的客户端代理。

3、直接通过URI资源定向即可把服务暴露给调用者。

下面就通过一个简单的列子一步一步实现WCFRESTFul

1、  新建如下项目

  

2、  项目文件介绍

(1)     IService1.cs 定义服务契约,在接口方法中定义RestFul请求规则

(2)     Service1.svc 实现IService1.cs定义的服务契约。

(3)     People.cs 数据契约,定义的实体对象

(4)     Global.asax 全局资源文件中定义注册路由

(5)     Web.config 配置WCF服务。

3、  IService1.cs接口定义三个方法,包含GET和POST请求

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WcfRestFulService { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. [ServiceContract(Name="user")]
public interface IService1
{
[OperationContract] [WebInvoke(UriTemplate = "get/{value}", Method = "GET", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] string GetData(string value); [OperationContract] [WebInvoke(UriTemplate = "add", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] string addPeople(People p); [OperationContract] [WebInvoke(UriTemplate = "GetList/{value}", Method = "GET", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] List<People> GetList(string value); } }

注意:通过WebInvoke属性的Method值说明该请求的类型,UriTemplate值说明url路由。接口中[ServiceContract(Name="user")]的定义,我们的URL路径中将会用到user

4、  Service1.svc实现契约

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.ServiceModel.Activation;
namespace WcfRestFulService
{ // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together. [AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public string GetData(string value)
{
return string.Format("You entered: {0}", value);
} public string addPeople(People p)
{
if (p == null)
{
return "People is Null";
}
return p.Name;
} public List<People> GetList(string value) { return new List<People> { new People(){Id=,Name="eric"}}; }
}
}

注意:[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]的定义跟我们在webconfig中的一个配置相关,我们 在下文中详细介绍。

5、  Global全局资源文件,注册服务的路由:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.Routing;
using System.ServiceModel.Activation;
namespace WcfRestFulService
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RegistrRoutes();
}
private void RegistrRoutes()
{
//说明:ServiceRoute需要引用 System.ServiceModel.Activation.dll
RouteTable.Routes.Add(new ServiceRoute("user", new WebServiceHostFactory(), typeof(Service1)));
}
}
}

6、  Web.config配置文件

<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="defaultResultBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
<dataContractSerializer maxItemsInObjectGraph="6553500"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="defaultRestEndpointBehavior">
<webHttp helpEnabled="true" automaticFormatSelectionEnabled="true" />
<dataContractSerializer maxItemsInObjectGraph="6553500"/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="WcfRestFulService.Service1" behaviorConfiguration="defaultResultBehavior">
<endpoint binding="webHttpBinding" contract="WcfRestFulService.IService1" behaviorConfiguration="defaultRestEndpointBehavior"></endpoint>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>

说明:在配置文件中我们看<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />节点,如果使aspNetCompatibilityEnabled="true"必须在Service1.svc声明 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)],其中RequirementsMode的值也可以为 AspNetCompatibilityRequirementsMode. Required

至此我们的WCFRESFul搭建成功,运行服务看效果。

1、  http://localhost:9315/Service1.svc(传统的页面,是不是很熟悉)

2、http://localhost:9315/user/help(RESTFul的风格,是不是眼前一亮

3、  通过RESTFul风格调用服务

(1)、http://localhost:9315/user/get/1调用服务string GetData(string value),参数值为1

(2)、http://localhost:9315/user/add 调用string addPeople(People p)服务

下面我们开始创建一个简答的ajax调用列子测试一下WC FRESTFul服务

注意:如果你是用VS自带的IIS调试,WCF RESTFul生成的URL与调用WCF服务的URL端口号要保持一致,要不然用ajax调用浏览器会认为跨域。 比如:http://localhost:9315/user/get/1http://localhost:9315/Default.aspx

我是采用win7系统的IIS 7调试的。

服务地址配置为:http://localhost/wfcrestful/user/help

调用服务的Web页面的地址为:http://localhost/restfulTest/WebForm1.aspx

调用服务string GetData(string value)

$.get("http://localhost/wfcrestful/user/get/1", function (json) { alert(json) });

调用服务:string addPeople(People p)

$.ajax({
"url": "http://localhost/wfcrestful/user/add",
"type": "POST",
"contentType": "application/json",
"dataType": "json",
"data": '{\"Id\":1,\"Name\":\"我是输入的内容\"}',
"success": function (returnValue) {
alert(returnValue);
} });

调用服务GetList(string value)

$.get("http://localhost/wfcrestful/user/GetList/22", function (json) {
alert(json[0].Name);
})

至此整个DEMO已经完成,请点击下载源码。

PS:WCF RESTFul已经是过时的技术了,有兴趣的童鞋们可以研究一下 MVC WebApi

文中有些的不对的地方欢迎大家指正。

[收藏转贴]WCFRESTFul服务搭建及实现增删改查的更多相关文章

  1. WCFRESTFul服务搭建及实现增删改查

    WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格,  RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...

  2. 基于SSM搭建网站实现增删改查

    网站源码地址:https://github.com/MyCreazy/BasicOperateWebSite.git 使用maven搭建网站的时候,记得选用war包格式,有时候maven包没有引用进来 ...

  3. 使用 Spring Boot 搭建一套增删改查(无多余代码)

    前言 这是我学习 Spring Boot 的第三篇文章,终于可以见到效果了.错过的同学可以看看之前的文章 我们为什么要学习 Spring Boot Spring Boot 入门详细分析 在入门的基础上 ...

  4. Arcgis api for js实现服务端地图的增删改查

    < !DOCTYPE html > <html xmlns = "http://www.w3.org/1999/xhtml" > <head > ...

  5. 使用IDEA搭建SpringBoot进行增删改查

    功能环境:java1.8以上  .IntellJIDEA  First: 创建项目,请根据项目图一步一步完成建立. 二.配置数据库 三.创建实体对象建表或对应存在表,根据需要加入相应注解 四.创建应用 ...

  6. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  7. IDEA搭建SSM实现登录、注册,数据增删改查功能

     本博文的源代码:百度云盘/java/java实例/SSM实例/SSM实现登录注册,增删改查/IDEA搭建SSM实现登录,注册,增删改查功能.zip 搭建空的Maven项目 使用Intellij id ...

  8. 在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建

    通常,在同一个页面上实现增删改查,会通过弹出框实现异步的添加和修改,这很好.但有些时候,是不希望在页面上弹出框的,我们可能会想到Knockoutjs,它能以MVVM模式实现同一个页面上的增删改查,再辅 ...

  9. node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. Mongoose是在node.js ...

随机推荐

  1. react 资源汇总

    前端变化虽快,但其实一直都围绕这几个概念在转: URL - 访问什么页面 Data - 显示什么信息 View - 页面长成什么样 Action - 对页面做了什么操作 API Server - Da ...

  2. Linux操作系统搭建LAMP开发环境

    Step1. 安装 Apache 在terminal中输入命令 sudo apt-get install apache2 打开浏览器,在地址栏输入:127.0.0.1,如果出现了 “It works! ...

  3. 首页TAB页的技术选择与功能实现

    一般的选择是用viewpager,这个有开源库.不过因为要引入开源库,所以有时候显得比较大. 下面这段代码是用在一个BaseActivity上面的,下面继承的Activity直接使用该方法,就可以完成 ...

  4. 用 SQL 计算时间差值

    ;WITH res1 AS ( SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY F2 ORDER BY F1) AS rn,F1,F2 F ...

  5. MasterCard信用卡测试卡号-creditcard-1

    MasterCard信用卡测试卡号-creditcard-1 510510510510510051111111111111185454545454545454550000000000000455555 ...

  6. Socket 死连接详解

    Socket 死连接详解 当使用 Socket 进行通信时,由于各种不同的因素,都有可能导致死连接停留在服务器端,假如服务端需要处理的连接较多,就有可能造成服务器资源严重浪费,对此,本文将阐述其原理以 ...

  7. vim 配置文件 ,高亮+自动缩进+行号+折叠+优化

    vim 配置文件 ,高亮+自动缩进+行号+折叠+优化 将一下代码copy到 用户目录下 新建文件为  .vimrc保存即可生效: 如果想所有用户生效 请修改 /etc/vimrc (建议先cp一份)& ...

  8. Oracle数据库小知识,改数据库数据

    在一张表上面右键-->查询数据,会生成sql语句,表后面带有t,表示模糊查询, 后面跟上for update之后,执行语句-->小锁(编辑数据)就可以修改数据里面的数据了,修改之后--&g ...

  9. css3动画使用技巧之—JQ配合css3实现轮播之animation-delay应用

    <!DOCTYPE html> <html> <head> <title>css3动画使用技巧之—JQ配合css3实现轮播之animation-dela ...

  10. javascript 老王开车去东北

    [Decode error - output not utf-8] 魔女 飞 奔驰 去 华南 [Finished in 1.1s] 需要变化的对象进行隔离.正是编程的乐趣之处 /** * by Jac ...