5个步骤创建你的第一个RESTFul 服务

         RESTful 服务遵循REST(Representational State Transfer)的架构风格。

在实现你第一个Restful 服务之前,让我们先理解它的概念。就像我们知道的那样,WCF(Windows通讯接口)让我们能够使用基于一系列协议的SOAP来打电话和交换信息,这些协议包含HTTP,TCP,Named Pipes 和MSMQ等等。在一个脚本中,如果我们使用基于HTTP的SOAP,我们只是把HTTP作为一个运输工具。但是,HTTP并不仅仅是个传输的工具。所以,当我们将RESY架构形式的时候,那就决定了“我们知识简单的使用HTTP来进行通讯,而不是使用一些复杂的机制,像CORBA,RPC或者SOPA,来通讯”。

对于所有的CRUD(Read/Create/Update/Delete),RESTFul架构基于HTTP的简单动作(GET,POST,PUT,And DELETE)来实现。它简单而且轻巧。为了简单一些,我将通过Get请求来实现一个服务,这个服务返回有限的几个类型的XML格式的数据。 

下面是5步创建你的rest服务并且返回xml格式

  • 创建WCF Service Project.
  • 准备数据
  • 创建Service Contract
  • 继承Service
  • 配置服务和行为

1.创建一个WCF服务功能

  •  打开vs-新建项目-选择WCF服务应用程序    名字叫做: MyRESTService

2. 组织要返回的数据

  • 为新建的工程添加一个类. 命名为 Products.cs.

现在这个类 Products.cs file 包含两个部分. 第一个是数据的定义. 

  [DataContract]
    public class Product
    {
        [DataMember]
        public int ProductId { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string CategoryName { get; set; }
        [DataMember]
        public int Price { get; set; }
    }
第二部分是这个类的单例实现,它从数据库中获取产品信息让后返回产品列表。为了简单一些,我们在类中组织数据而不是从数据库取得。如下
  public partial class Products
    {
        private static readonly Products _instance = new Products();
        private Products() { }

        public static Products Instance
        {
            get { return _instance; }
        }

        public List<Product> ProductList
        {
            get { return products; }
        }

   private List<Product> products = new List<Product>() 
  { 
    new Product() { ProductId = 1, Name = "Product 1", CategoryName = "Category 1", Price=10}, 
    new Product() { ProductId = 1, Name = "Product 2", CategoryName = "Category 2", Price=5}, 
    new Product() { ProductId = 1, Name = "Product 3", CategoryName = "Category 3", Price=15}, 
    new Product() { ProductId = 1, Name = "Product 4", CategoryName = "Category 1", Price=9} };
    }

3.创建服务协议

新建一个 WCF 服务:   名字叫做ProductRESTService

系统将新建两个文件,包括IProductRESTService.cs 接口文件如图所示

  public interface IProductRESTService
    {
        //WebInvoke的属性和参数
        //Method = "GET", 代表HTTP GET 请求.
        //ResponseFormat = WebMessageFormat.Xml, 代表接收下面两个是的内容。但我们可以将值修改为WebMessageFormat.Json。来接收就送格式的内容
        //BodyStyle = WebMessageBodyStyle.Wrapped,表明 request和 response 请求将被包装.
        //UriTemplate = "GetProductList/",由两部分。URL路径和查询路径
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetProductList/")]
        List<Product> GetProductList();
    }

 

IProductRESTServicecontains 只包含一个方法即GetProductList.需要重点了解的是 WebInvoke的属性和参数

  • Method = "GET", 代表HTTP GET 请求.
  • ResponseFormat = WebMessageFormat.Xml, 代表接收下面两个是的内容。但我们可以将值修改为WebMessageFormat.json。来接收就送格式的内容
  • BodyStyle = WebMessageBodyStyle.Wrapped,表明 request和 response 请求将被包装.
  • UriTemplate = "GetProductList/",由两部分。URL路径和查询路径

不要忘记在顶部添加 System.ServiceModel.Webat .

 

4. 实现 RESTful 

在这个步棸里面我们将实现服务.只有一个方法GetProductListis 在协议的定义中,因此服务类实现如下:

   public class ProductRESTService : IProductRESTService
    {
        public List<Product> GetProductList()
        {
            return Products.Instance.ProductList;
        } 
    }

5. 配置服务与特性

最后一步是用配置文件配置服务和他的操作以及它的特性. 以下是完整的ServiceModel配置。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <!--配置文件配置服务和他的操作以及它的特性. 以下是完整的ServiceModel配置。-->
  <system.serviceModel>
    <services>
      <service name="MyRESTService.ProductRESTService"
               behaviorConfiguration = "serviceBehavior">
        <endpoint address=""
                  binding="webHttpBinding"
                  contract="MyRESTService.IProductRESTService"
                  behaviorConfiguration="web">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="serviceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

配置自己写写就明白了  此处的webHTTPBinding 是rest 服务专用的绑定模式

 

现在创建 RESTful 服务已经完成。你可以简单的运行或者测试一下。

右击ProductRESTService.svc 文件选择 "View in Browser(在浏览器中查看)". 你将看到如下图像。这证明服务已启动。

 

只需修改浏览器的URl增加上 "GetProductList/".这是一个 定义 UriTemplete 服务协议的方法.       

 如:http://localhost:2884/ProductRESTService.svc/GetProductList/     得到的结果如下:

 

如果要接收一个JSON的数据,将ResponseFormat = WebMessageFormat.Xml的值修改为WebMessageFormat.Json

 

 这样第一个rest 服务就好了,希望可以帮助到你

 

posted @ 2018-06-03 18:11  ParanoiaApe  阅读(363)  评论(0编辑  收藏  举报