前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何创建一个RESTful WCF Service

如何创建一个RESTful WCF Service

作者头像
跟着阿笨一起玩NET
发布2018-09-19 16:51:10
5580
发布2018-09-19 16:51:10
举报

原创地址:http://www.cnblogs.com/jfzhu/p/4044813.html

转载请注明出处

(一)web.config文件

要创建REST WCF Service,endpoint binding需要用webHttpBinding,参见《webHttpBinding、basicHttpBinding和wsHttpBinding的区别》

web.config

代码语言:javascript
复制
<?xml version="1.0"?>
<configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.0" />
      authentication mode="None" />
    </system.web>
    <system.serviceModel>
        <behaviors>
            <endpointBehaviors>
                <behavior name="SandwichServices.CostServiceBehavior">                    
                    webHttp helpEnabled="true"/>
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
              <behavior name="SandwichServices.CostServiceServiceBehavior" >
                <serviceMetadata httpGetEnabled="true" />
              </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
            multipleSiteBindingsEnabled="true" />
        <services>
            <service name="SandwichServices.CostService" behaviorConfiguration="SandwichServices.CostServiceServiceBehavior">
                <endpoint address="" behaviorConfiguration="SandwichServices.CostServiceBehavior"
                    binding="webHttpBinding" contract="SandwichServices.CostService" />
              <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

《如何创建一个AJAX-Enabled WCF Service》中的web.config,因为需要AJAX,endpointBehaviors用了<enableWebScript />,但是enableWebScript 和REST需要的UriTemplate是有冲突的,所以这里不再使用。

endpointBehaviors中设置<webHttp helpEnabled="true"/>可以生成WCF Service的Help页面。

image
image

HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

对于PUT和DELETE,需要身份验证信息,所以我们先暂时只允许匿名访问,在web.config中将authentication mode设置为None。

(二)webHttpBinding的XML格式

Employee.cs

代码语言:javascript
复制
using System;
using System.Runtime.Serialization;

namespace SandwichServices
{
    [DataContract]
    public class Employee
    {
        private Guid id;
        private string name;
        private DateTime birthdate;

        [DataMember]
        public Guid Id
        {
            get { return id; }
            set { id = value; }
        }

        [DataMember]
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        [DataMember]
        public DateTime Birthdate
        {
            get { return birthdate; }
            set { birthdate = value; }
        }
    }
}

CostService.svc.cs

代码语言:javascript
复制
using System;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;

namespace SandwichServices
{
    [ServiceContract(Namespace = "SandwichServices")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class CostService
    {
        // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
        // To create an operation that returns XML,
        //     add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
        //     and include the following line in the operation body:
        //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        [OperationContract]
        [WebInvoke(Method = "PUT", UriTemplate = "Employees/AddEmployee", ResponseFormat = WebMessageFormat.Xml)]
        public Guid AddEmployee(Employee employee)
        {
            return Guid.NewGuid();
        }

        [OperationContract]
        [WebInvoke(Method = "DELETE", UriTemplate = "Employees/DeleteEmployee?id={id}", ResponseFormat = WebMessageFormat.Xml)]
        public void DeleteEmployee(string id)
        {
            return;
        }

        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "Employees/UpdateEmployee", ResponseFormat = WebMessageFormat.Xml)]
        public void UpdateEmployee(Employee employee)
        {
            return;
        }

        [OperationContract]
        [WebGet(UriTemplate = "Employees/GetEmployee?id={id}", ResponseFormat = WebMessageFormat.Xml)]
        public Employee GetEmployee(string id)
        {
            return new Employee() { Id = new Guid(id), Name = "Neil Klugman", Birthdate = new DateTime(1930, 1, 1) };
        }
    }
}
image
image
image
image
image
image
image
image

(三)webHttpBinding JSON格式

将每个方法的ResponseFormat改为Json

CostService.svc.cs

代码语言:javascript
复制
using System;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;

namespace SandwichServices
{
    [ServiceContract(Namespace = "SandwichServices")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class CostService
    {
        // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
        // To create an operation that returns XML,
        //     add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
        //     and include the following line in the operation body:
        //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        [OperationContract]
        [WebInvoke(Method = "PUT", UriTemplate = "Employees/AddEmployee", ResponseFormat=WebMessageFormat.Json)]
        public Guid AddEmployee(Employee employee)
        {
            return Guid.NewGuid();
        }

        [OperationContract]
        [WebInvoke(Method = "DELETE", UriTemplate = "Employees/DeleteEmployee?id={id}", ResponseFormat = WebMessageFormat.Json)]
        public void DeleteEmployee(string id)
        {
            return;
        }

        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "Employees/UpdateEmployee", ResponseFormat = WebMessageFormat.Json)]
        public void UpdateEmployee(Employee employee)
        {
            return;
        }

        [OperationContract]
        [WebGet(UriTemplate = "Employees/GetEmployee?id={id}", ResponseFormat = WebMessageFormat.Json)]
        public Employee GetEmployee(string id)
        {
            return new Employee() { Id = new Guid(id), Name = "Neil Klugman", Birthdate = new DateTime(1930, 1, 1) };
        }
    }
}
image
image
image
image
image
image
image
image

(四)总结

  1. RESTful WCF Service需要使用webHttpBinding
  2. endpointBehaviors不要用<enableWebScript />
  3. endpointBehaviors中设置<webHttp helpEnabled="true"/>可以生成WCF Service的Help页面
  4. GET(查),POST(改),PUT(增),DELETE(删)
  5. 对于PUT和DELETE,需要身份验证信息
  6. webHttpBinding的数据格式有两种:XML和JSON,可以通过ResponseFormat来设置
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-10-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)web.config文件
  • (二)webHttpBinding的XML格式
  • (三)webHttpBinding JSON格式
  • (四)总结
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档