WCF学习之旅

 一、什么是REST

       表述性状态转移(Representational
State Transfer,REST),不是一种标准,而是壹种软件架构风格。

      
基于REST的服务与基于SOAP的服务相比,质量、效用和易用性上都越来越高,而SOAP协议非凡的复杂和不透明。REST受到越多的Web服务供应商欢迎。如今大多供应商,如天猫商城、腾讯、google、亚马逊等都提供REST风格的劳动。

 REST的重点条件是:

 1.互联网上的有着东西都可被架空为资源;

 2.每种财富都有八个唯1的能源标记符UHavalI;

 3.使用正式方法操作能源;

 肆.全体的操作皆以无状态的;

 5.通过缓存来狠抓品质。

       
REST (Representation State Transfer) 描
述了五个架构样式的网络类别,比如Web应用程序。它第贰回面世在3000年 罗伊 Fielding 的大学生散文中,他是HTTP规范的主要编写者之壹。REST 指的是1组架构约束原则和标准化。满足那些约束规范和规格的应用程序或设计正是 RESTful。

      
使用REST做为业务逻辑接口是因为,从客户端到服务器的种种请求都必须带有理解请求所不可缺少的消息。假使服务器在伸手之间的其他时间点重启,客户端不会获得通报。此外,无状态请求能够由其他可用服务器回答,那万分适合云总结之类的条件。客户端能够缓存数据以立异品质。

       
在劳务器端,应用程序状态和效益能够分成各个能源。能源是贰个有意思的概念实体,它向客户端公开。能源的例子有:应用程序对象、数据库记录、算法等等。每种能源都使用 U奥迪Q3I (Universal Resource Identifier) 获得贰个无比的地址。客户端选择的是标准的 HTTP协议实行财富访问,同时还足以选用标准的HTTP方法,比如 GET、PUT、POST 和 DELETE。

      
REST的1个第三条件是系统一分配层,那象征组件不可能了然它与之并行的中间层以外的零件。通过将系统的一些意义界定在某1层,由此能够界定整个类其他扑朔迷离,促进了底部的独立性。

      
当 REST 架构的自律原则作为二个完好无缺应用时,将生成八个能够扩张到大气客户端的应用程序。它还下降了客户端和服务器之间的互动延迟。统壹分界面简化了任何种类架构,立异了子系统之间互相的可知性。REST 简化了客户端和服务器的达成。

      
REST的财富表述情势得以是XML、HTML、JSON,可能其余随意的样式,那取决于服务提供商和消费服务的用户。

      
但是REST不是全能的。操作无状态也会推动巨大的平安难题,怎么样授权和证明用户?若是须要每趟请求都含有完整的地方和验证消息,又如何制止音信败露?复杂的效应挑战架构的易用性,那就供给在性质与功力间权衡,毕竟该用REST依旧SOAP。  

 一、什么是REST

       表述性状态转移(Representational
State Transfer,REST),不是一种标准,而是一种软件架构风格。

      
基于REST的劳务与基于SOAP的劳务相比较,品质、成效和易用性上都更加高,而SOAP协议非凡的扑朔迷离和不透明。REST受到更增添的Web服务供应商欢迎。最近大多数供应商,如天猫商城、腾讯、google、亚马逊(Amazon)等都提供REST风格的劳动。

 REST的最主要条件是:

 1.网络上的保有东西都可被架空为能源;

 2.各类资源都有二个唯1的财富标记符U本田UR-VI;

 三.使用专业措施操作财富;

 四.全数的操作都以无状态的;

 伍.通过缓存来增加品质。

       
REST (Representation State Transfer) 描
述了3个框架结构样式的网络体系,比如Web应用程序。它第三次出现在三千年 罗伊 Fielding 的硕士故事集中,他是HTTP规范的首要编写者之1。REST 指的是一组架构约束规范和标准。满足这几个约束原则和规则的应用程序或设计就是 RESTful。

      
使用REST做为业务逻辑接口是因为,从客户端到服务器的各样请求都必须带有精通请求所不可或缺的音讯。借使服务器在伸手之间的其他时间点重启,客户端不会得到通报。别的,无状态请求能够由其他可用服务器回答,那特别适合云计算之类的条件。客户端能够缓存数据以创新质量。

       
在服务器端,应用程序状态和效益能够分成各个能源。能源是2个妙不可言的定义实体,它向客户端公开。能源的例证有:应用程序对象、数据库记录、算法等等。每种财富都应用 UOdysseyI (Universal Resource Identifier) 得到2个独一无二的地点。客户端应用的是正规的 HTTP协议实行财富访问,同时还能使用专业的HTTP方法,比如 GET、PUT、POST 和 DELETE。

      
REST的四个至关心珍贵要原则是系统一分配层,这代表组件无法精晓它与之相互的中间层以外的零部件。通过将系统的有个别职能范围在某一层,因此能够界定整个类别的复杂性,促进了尾部的独立性。

      
当 REST 架构的束缚原则作为一个完好无损接纳时,将生成一个足以增加到大方客户端的应用程序。它还下落了客户端和服务器之间的互相延迟。统①分界面简化了全套系列架构,革新了子系统里面相互的可知性。REST 简化了客户端和服务器的贯彻。

      
REST的财富表述情势能够是XML、HTML、JSON,可能别的随意的花样,那取决于服务提供商和消费服务的用户。

      
可是REST不是全能的。操作无状态也会带来巨大的平安主题材料,怎么着授权和表明用户?要是需要每趟请求都饱含完整的地位和表明音讯,又怎么防止新闻外泄?复杂的成效挑衅架构的易用性,这就需求在性质与效益间权衡,毕竟该用REST依旧SOAP。  

二、Rest的优点

  一)缓存,使用 HTTP 向 RESTful
端点申请数量时,用到的 HTTP 动词是 GET。对于 GET
请求响应中回到的能源,能够用四种分裂的措施张开缓存。Conditional GET
正是可供选取的一种达成细节,客户端能够向劳动验证他的数量是不是为流行版本;RESTful
端点能够透过它进一步提升速度和可伸缩性。

  二)扩充,REST
鼓励每项财富蕴藏处理万分请求所需的保有要求状态。满意那1羁绊时,RESTful
服务更便于增加且能够未有动静。

  三)副作用,使用 GET 请求能源,RESTful
服务应该没有副效率(遗憾的是,与别的一些 REST
约束比较,那1封锁更易于被打破)。

  四)幂等,统一接口其余八个常用到的机要
HTTP 动词是 PUT 和 DELETE。用户代理想要修改财富时最常使用 PUT,DELETE
能够自个儿描述。要点(也便是“幂等”一词所重申的)是你能够对特殊财富数十次应用那多个动词,效果与第三遍利用同样——至少不会有其余别的影响。构建可靠的分
布式系统时(即错误、网络故障或延迟也许引致多次施行代码),那一亮点可提供保险。

  5)互操作性许,几人将 SOAP
捧为建立客户端-服务器程序最具互操作性的法子。但有的语言和环境现今仍尚未
SOAP
工具包。有壹对固然有工具包,但接纳的是旧标准,不能确定保障与使用更新标准的工具包可信调换。对于许多操作,REST
仅必要有 HTTP 库(当然,XML 库经常也很有援救),它的互操作性肯定强过任何
帕杰罗CP 本事(包罗 SOAP)。

  陆)简易性与别的优点比较,那壹独到之处更主观一些,分歧的人大概有分歧的感想。对自笔者来讲,使用
REST 的简易性涉及到代表财富的 U逍客I 和集合接口。作为一名 Web
冲浪高手,作者知道在浏览器中输入分歧的 UXC60I
能够赢得分化的财富(有时也被号称 ULANDI 或 ULX570L
黑客,但绝无恶意)。由于有多年行使 U揽胜I 的经历,所以为财富规划 U安德拉I
对自笔者来讲百步穿杨。使用统1接口简化了付出进度,因为自身不必为每一个须求建立的服务营造接口、约定或
API。接口(客户端与我的劳务交互的法子)由系统布局约束设置。

 

二、Rest的优点

  1)缓存,使用 HTTP 向 RESTful
端点申请数量时,用到的 HTTP 动词是 GET。对于 GET
请求响应中回到的能源,能够用种种区别的点子开始展览缓存。Conditional GET
就是可供选拔的①种完成细节,客户端可以向劳动验证他的数额是或不是为流行版本;RESTful
端点可以通过它进一步升高速度和可伸缩性。

  二)扩张,REST
鼓励每项财富蕴藏处理分外请求所需的兼具要求状态。知足这一束缚时,RESTful
服务更易于扩张且能够未有动静。

  3)副功用,使用 GET 请求财富,RESTful
服务应该没有副效率(遗憾的是,与别的部分 REST
约束比较,那一封锁更便于被打破)。

  4)幂等,统一接口此外八个常用到的首要HTTP 动词是 PUT 和 DELETE。用户代理想要修改财富时最常使用 PUT,DELETE
可以自个儿描述。要点(也正是“幂等”1词所重申的)是您可以对卓殊能源多次运用那七个动词,效果与第3遍使用同样——至少不会有别的别的影响。创设可靠的分
布式系统时(即错误、网络故障或延缓大概导致多次实践代码),那1独到之处可提供保障。

  伍)互操作性许,多个人将 SOAP
捧为建立客户端-服务器程序最具互操作性的措施。但部分言语和环境至今仍没有SOAP
工具包。有局地尽管有工具包,但运用的是旧标准,不能够确定保证与运用更新标准的工具包可相信交换。对于半数以上操作,REST
仅须求有 HTTP 库(当然,XML 库平日也很有帮带),它的互操作性鲜明强过任何
MuranoCP 手艺(包蕴 SOAP)。

  六)简易性与其余优点相比较,那一优点更主观1些,差别的人只怕有两样的感触。对自作者来说,使用
REST 的简易性涉及到表示财富的 U奥德赛I 和合并接口。作为一名 Web
冲浪高手,作者清楚在浏览器中输入不一致的 USportageI
可以拿走分裂的能源(有时也被称之为 U福睿斯I 或 U中华VL
黑客,但绝无恶意)。由于有多年选拔 UTiguanI 的经验,所感到能源统一筹划 UPAJEROI
对自作者的话百步穿杨。使用统壹接口简化了开垦过程,因为本身不用为各种须要建立的劳务营造接口、约定或
API。接口(客户端与自身的劳动交互的点子)由系统布局约束设置。

 

叁、WCF如何支撑Rest

      
WCF怎么样落实对于Rest扶助的吗?弄清那一点是读书Rest WCF的机要。

       为了促成于对Rest的支撑,在 .NET
Framework 中,WCF 在 System.ServiceModel.Web
组件中新增添了编制程序模型和部分基础架构部件。WCF
Web编制程序模型几个主重要项目目便是:

   1)  WebGetAttribute 和
WebInvokeAttribute:

      
咱们了然,在WCF中,对于措施的调用是依照SOAP的Action的,每一种客户端发送的SOAP音讯都供给内定一个Action
的值。这些Action的值和WCF服务的艺术对应。每一个WCF服务端的操作都有二个特定的Action。通过
OperationContractAttribute.Action 属性设置。

  在Rest
WCF中,基于Action的点子调用调换为了基于UCRUISERI+Http动词的调用。相当于SOAP
Action=U福特ExplorerI+Http动词。

  那种映射会由WebHttpDispatchOperationSelector
类型来形成,它会把客户端请求的UHavalI+Http动词,映射到一定的劳动章程上。

  WebGetAttribute 告诉服务方法应该响应
HTTP GET 请求。

  WebInvokeAttribute 暗许映射为 HTTP
POST,但可将WebInvokeAttribute.Method 属性设置为永葆具备其余 HTTP
动词(PUT 和 DELETE 等)。例如:

     

    

   [WebGet(UriTemplate = "/Books/Get/{BookId}", BodyStyle = WebMessageBodyStyle.Bare)]
          [OperationContract]
          List<Books> GetBook(string BookId);



        [WebInvoke(Method = "POST", UriTemplate = "/Books/Add", BodyStyle = WebMessageBodyStyle.Bare)]
         [OperationContract]
         Result AddBook(Books book);

   2)  UriTemplate 和
UriTemplateTable:

      UriTemplate 一个意味统一能源标记符
(URI) 模板的类。能够定义服务操作的路子和HTTP动词。

  UriTemplateTable一个意味着壹组关联
UriTemplate
对象的类。也正是UriTemplate表。

     
从上边的例子代码,大家也能收看哪些利用UriTemplate
定义服务操作的U卡宴I和HTTP动词。

 

      3)   WebHttpBinding 和
WebHttpBehavior:

       WebHttpBinding允许开垦人士通过
HTTP 请求(这么些请求使用“Plain old XML”(POX) 样式新闻,而不是选取基于
SOAP 的音讯)来公开 WCF Web 服务,能够很便宜的实现REST。

       
与任何绑定分化的是:必须使用WebHttpBehavior对服务的终结点进行配备。还需要利用WebGetAttribute或WebInvokeAttribute属性将次第服务操作映射到
U奥德赛I,同时定义调用和重临结果的音信格式。

 

   WCF Web 编制程序模型允许开拓人士通过
HTTP 请求(那个请求使用节能的旧的“Plain old XML”(POX)
样式新闻,而不是SOAP 的新闻)来公开 WCF服务。为了让客户端采纳 HTTP
请求与劳动开始展览通讯,必须采取附加了
WebHttpBehavior
WebHttpBinding 对服务的终结点实行布局。

   WebHttpBehavior 行为与
WebHttpBinding
绑定一同利用时,协助 WCF 公开和走访 Web
样式服务。WebServiceHost
会自动将此行为增添到应用
WebHttpBinding
的终结点。例如:

        

<system.serviceModel>
    <bindings>
       <webHttpBinding>
         <binding name="RestWebBinding">

         </binding>

       </webHttpBinding>

     </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8888/BookService/metadata" />
          <serviceDebug includeExceptionDetailInFaults="True" />

        </behavior>
          <behavior name="RestServiceBehavior">

         </behavior>

      </serviceBehaviors>
       <endpointBehaviors>
         <behavior name="RestWebBehavior">
           <!--这里必须设置-->

           <webHttp />

         </behavior>

       </endpointBehaviors>
    </behaviors>

    <services>   

      <service name="SCF.WcfService.BookRestService" behaviorConfiguration="RestServiceBehavior">
         <endpoint address="http://127.0.0.1:8888/" behaviorConfiguration="RestWebBehavior"
                   binding="webHttpBinding" bindingConfiguration="RestWebBinding" contract="SCF.Contracts.IBookRestService">
         </endpoint>
       </service>
    </services>
  </system.serviceModel>

 

   4)WebServiceHost 和
WebServiceHostFactory:

     
为了扶助Web编程模型,WCF框架提供二个新的宿主类型:WebServiceHost。它是贰个
ServiceHost
派生类,它是对WCF Web 编制程序模型的补偿。尽管 WebServiceHost
在服务表达中找不到终结点,则它将要劳务的基址中机动为 HTTP 和 HTTPS
基址创设三个暗中同意终结点。借使用户已在基址中显然安顿终结点,则它不会自行创造终结点。WebServiceHost
会自动配置终结点的绑定,以便在平安虚拟目录中选择时与关系的 Internet
音信服务 (IIS) 安全设置一同使用。

  WebServiceHostFactory在可动态创立WebServiceHost
Web宿主实例以响应传入音信的托管宿主环境中提供
WebServiceHost
的实例的厂子。

     

 

③、WCF怎样支撑Rest

      
WCF如何完成对于Rest协助的吗?弄清这点是读书Rest WCF的根本。

       为了实现于对Rest的支撑,在 .NET
Framework 中,WCF 在 System.ServiceModel.Web
组件中新扩张了编制程序模型和某些基础架构部件。WCF
Web编程模型多少个十分重要项目正是:

   1)  WebGetAttribute 和
WebInvokeAttribute:

      
大家精通,在WCF中,对于艺术的调用是基于SOAP的Action的,每一种客户端发送的SOAP音讯都亟待内定二个Action
的值。这几个Action的值和WCF服务的措施对应。各个WCF服务端的操作都有三个一定的Action。通过
OperationContractAttribute.Action 属性设置。

  在Rest
WCF中,基于Action的办法调用转换为了基于U帕杰罗I+Http动词的调用。也便是SOAP
Action=UEnclaveI+Http动词。

  那种映射会由WebHttpDispatchOperationSelector
类型来完毕,它会把客户端请求的USportageI+Http动词,映射到特定的服务方法上。

  WebGetAttribute 告诉服务方法应该响应
HTTP GET 请求。

  WebInvokeAttribute 私下认可映射为 HTTP
POST,但可将WebInvokeAttribute.Method 属性设置为支撑具有其余 HTTP
动词(PUT 和 DELETE 等)。例如:

     

    

   [WebGet(UriTemplate = "/Books/Get/{BookId}", BodyStyle = WebMessageBodyStyle.Bare)]
          [OperationContract]
          List<Books> GetBook(string BookId);



        [WebInvoke(Method = "POST", UriTemplate = "/Books/Add", BodyStyle = WebMessageBodyStyle.Bare)]
         [OperationContract]
         Result AddBook(Books book);

   2)  UriTemplate 和
UriTemplateTable:

      UriTemplate 四个表示统壹能源标志符
(URubiconI) 模板的类。可以定义服务操作的不2诀要和HTTP动词。

  UriTemplateTable3个意味一组关联
UriTemplate
对象的类。也正是UriTemplate表。

     
从地点的事例代码,我们也能来看哪些运用UriTemplate
定义服务操作的ULacrosseI和HTTP动词。

 

      3)   WebHttpBinding 和
WebHttpBehavior:

       WebHttpBinding允许开垦职员通过
HTTP 请求(那么些请求使用“Plain old XML”(POX) 样式新闻,而不是利用基于
SOAP 的音讯)来公开 WCF Web 服务,能够很有益于的落到实处REST。

       
与其余绑定差异的是:必须选拔WebHttpBehavior对服务的终结点进行布置。还要求使用WebGetAttribute或WebInvokeAttribute属性将相继服务操作映射到
U卡宴I,同时定义调用和重临结果的音讯格式。

 

   WCF Web 编制程序模型允许开垦职员通过
HTTP 请求(这一个请求使用节约财富的旧的“Plain old XML”(POX)
样式新闻,而不是SOAP 的音讯)来公开 WCF服务。为了让客户端采用 HTTP
请求与劳动进行通讯,必须利用附加了
WebHttpBehavior
WebHttpBinding 对服务的终结点进行布局。

   WebHttpBehavior 行为与
WebHttpBinding
绑定一齐利用时,援助 WCF 公开和走访 Web
样式服务。WebServiceHost
会自动将此行为充裕到应用
WebHttpBinding
的终结点。例如:

        

<system.serviceModel>
    <bindings>
       <webHttpBinding>
         <binding name="RestWebBinding">

         </binding>

       </webHttpBinding>

     </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8888/BookService/metadata" />
          <serviceDebug includeExceptionDetailInFaults="True" />

        </behavior>
          <behavior name="RestServiceBehavior">

         </behavior>

      </serviceBehaviors>
       <endpointBehaviors>
         <behavior name="RestWebBehavior">
           <!--这里必须设置-->

           <webHttp />

         </behavior>

       </endpointBehaviors>
    </behaviors>

    <services>   

      <service name="SCF.WcfService.BookRestService" behaviorConfiguration="RestServiceBehavior">
         <endpoint address="http://127.0.0.1:8888/" behaviorConfiguration="RestWebBehavior"
                   binding="webHttpBinding" bindingConfiguration="RestWebBinding" contract="SCF.Contracts.IBookRestService">
         </endpoint>
       </service>
    </services>
  </system.serviceModel>

 

   4)WebServiceHost 和
WebServiceHostFactory:

     
为了帮助Web编制程序模型,WCF框架提供一个新的宿主类型:WebServiceHost。它是1个
ServiceHost
派生类,它是对WCF Web 编制程序模型的补偿。假如 WebServiceHost
在劳务表明中找不到终结点,则它将要劳务的基址中自行为 HTTP 和 HTTPS
基址制造三个暗许终结点。假诺用户已在基址中分明安顿终结点,则它不会自行创造终结点。WebServiceHost
会自动配置终结点的绑定,以便在安全虚拟目录中动用时与涉及的 Internet
音讯服务 (IIS) 安全设置一同行使。

  WebServiceHostFactory在可动态创制WebServiceHost
Web宿主实例以响应传入音讯的托管宿主环境中提供
WebServiceHost
的实例的厂子。