65.9K
CodeProject 正在变化。 阅读更多。
Home

创建你的第一个 RESTful 服务 5 个简单步骤

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.67/5 (4投票s)

2013年9月23日

CPOL

3分钟阅读

viewsIcon

22261

创建你的第一个 RESTful 服务 5 个简单步骤

RESTful 服务是那些遵循 REST(Representational State Transfer,表述性状态转移)架构风格的服务。

在实现您的第一个 RESTful 服务之前,让我们先了解其背后的概念。我们知道 WCF 允许我们使用 SOAP 通过各种协议(例如 HTTP、TCP、命名管道和 MSMQ 等)进行调用和交换消息。在这种情况下,如果我们使用 SOAP over HTTP,我们只是将 HTTP 用作传输。但是 HTTP 不仅仅是传输。因此,当我们谈论 REST 架构风格时,它规定“不使用像 CORBA、RPC 或 SOAP 这样的复杂机制进行通信,而应该简单地使用 HTTP 进行调用”。

RESTful 架构使用 HTTP 进行所有 CRUD 操作(读取/创建/更新/删除),使用简单的 HTTP 动词(如 GET、POST、PUT 和 DELETE)。它既简单又轻量级。为了简单起见,我将仅实现一个 GET 请求,该请求将以 XML 格式返回某些类型的数据(即产品数据)。

以下是创建您的第一个以 XML 格式返回数据的 RESTful 服务的 5 个简单步骤。

  • 创建一个 WCF 服务项目。
  • 准备要返回的数据(例如,产品)。
  • 创建服务合同
  • 实现服务。
  • 配置服务和行为

1. 创建一个 WCF 服务项目

  •  打开 Visual Studio。
  •  从文件 -> 新建项目。 从左侧选择 WCF 并创建一个新的 WCF 服务应用程序
     

2. 准备要返回的数据

  • 现在向新创建的项目添加一个类。将其命名为Products.cs



     

     

现在,此Products.cs文件将包含两件事。第一个是数据协定。

[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 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 服务,如下所示

它会将合同和服务文件添加到项目中。 以下是服务合同的代码,即IProductRESTService.cs

public interface IProductRESTService 
{ 
  [OperationContract]
  [WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Xml,
      BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetProductList/")] 
  List<Product> GetProductList();
}

IProductRESTService 仅包含一个方法,即 GetProductList。 关于此方法需要了解的重要点是 WebInvoke 属性参数。

  • Method = "GET",表示一个 HTTP GET 请求。
  • ResponseFormat = WebMessageFormat.Xml,响应格式将是 XML,但我们也可以通过将其值更改为 WebMessageFormat.json 来返回 JSON。
  • BodyStyle = WebMessageBodyStyle.Wrapped,表示请求和响应都被包装。
  • UriTemplate = "GetProductList/",它有两个部分,URL 路径和查询。

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

4. 实现 RESTful 服务

在此步骤中,我们将要实现该服务。 合同中只定义了一个方法 GetProductList,因此实现服务类将如下所示:

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

5. 配置服务和行为

最后一步是使用配置文件配置服务及其行为。 以下是完整的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>           

webHTTPBinding 是用于 RESTful 服务的绑定。

现在,关于创建 RESTful 服务的所有工作都已完成。 您可以轻松地运行和测试它。

右键单击ProductRESTService.svc文件,然后单击“在浏览器中查看”。 您将看到以下屏幕,这意味着服务正常。

只需修改浏览器中的 URL 并添加“<span style="white-space: pre-wrap;">GetProductList/</span>”即可。 因此,这是我们定义为服务合同方法的 UriTemplete。

希望这个简单的 WCF 教程对读者有所帮助。 为了保持简单,我将其限制为仅使用 HTTP GET 动词获取记录。 在我即将发表的文章中,我将提供使用 RESTful 服务的所有 CRUD(创建、读取、更新、删除)操作。

其他 WCF 和相关教程

© . All rights reserved.