zoukankan      html  css  js  c++  java
  • 如何创建一个RESTful WCF Service

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

    转载请注明出处

    (一)web.config文件

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

    web.config

    <?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

    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

    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

    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

    (三)webHttpBinding JSON格式

    将每个方法的ResponseFormat改为Json

    CostService.svc.cs

    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

    (四)总结

    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来设置
  • 相关阅读:
    形象理解ERP(转)
    禁用windows server 2008 域密码复杂性要求策略
    How to adding find,filter,remove filter on display method Form
    Windows Server 2008 R2激活工具
    How to using bat command running VS development SSRS report
    Creating Your First Mac AppGetting Started
    Creating Your First Mac AppAdding a Track Object 添加一个 Track 对象
    Creating Your First Mac AppImplementing Action Methods 实现动作方法
    Creating Your First Mac AppReviewing the Code 审查代码
    Creating Your First Mac AppConfiguring the window 设置窗口
  • 原文地址:https://www.cnblogs.com/guohu/p/11112006.html
Copyright © 2011-2022 走看看