• WCF的学习之旅


    一、WCF的简单介绍

         Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是MS为SOA (Service  Oriented Architecture)战略而设计的一套完整的技术框架。它是一种统一的编程模型,用来为微软平台编写分布式(Distributed)应用。涵盖了之前出现的多种技术,如ASMX,Remoting,MSMQ等等。

        优点:

        1.整合了多项技术,是MS SOA产品的集大成者。

        2.更为简单易用。(它囊括了关于服务的一切,无论是服务的创建,托管,消费和安全保障,还是保护与互通,甚至是提高开发效率)

        3.包含了 其他技术的所有优点(统一性,互操作性,可靠性,兼容性)

          

    二、客户端与服务的基本关系

         1、客户端与服务

          

            服务是一组向客户端提供可用功能的端点(Endpoints)。而端点(终结点)则是网络上的一个能将消息送达的资源。

            客户端按照与服务之间的契约(Contract)来格式化消息,并将消息发送给端点来访问端点的功能。服务在端点指定的地址(Address)上监听具有特定格式的送达消息。

        2、 服务的三要素(ABC)

            A:Address 意味着在哪里(也含有传输方式信息)

            B:Binding 意味着怎么做(与地址的传输方式要匹配)

            C:Contract意味着做什么(服务契约)

        3、WCF中的地址   

             •Http(basic,WS*)
             •Tcp  
             •Peer netWork(对等网)
             •IPC(基于命名管道的内部进程通信)
             •MSMQ

              

        4、元数据交换     

              WCF有两种方式可以发布自己的元数据:

              1.基于HTTP-GET协议提供元数据

              2.使用MEX终结点

               

         5、WCF体系架构

             

    三、WCF契约

         a).服务契约(SerciceContract)

             公布服务的功能。操作契约( OperationContract )则负责在方法级别公开。

        b).数据契约(DataContract)

            对传递的类对象进行XSD(XML Schema Definitions)定义,以便对其成员进行序列化。

        c).消息契约(MessageContract)

            自定义消息格式,包括消息头,消息体,还能指示是否对消息内容进行加密和签名。

        d).错误契约(FaultContract)

            自定义错误异常的处理方式。

    四、绑定   

          就是预先配置好的信道栈,它代表了客户端和服务器之间线路级别上的约定。每个绑定都会指定通信所用的传输、编码及协议。

          通过绑定,WCF封装了各种不同通信场所下所使用的配置。

          绑定的组成:Name,Namespace,BindingElement  

          BindElement:

            a)消息编码绑定元素(Message Encoding Binding Element)

            b)传输绑定元素(Transport Binding Element)

            c)协议绑定元素(Protocal Element):

             主要是包含设置事务流控制,安全,会话,排序,升级/帮助器等信息

    五、信道与信道栈

         信道:就是WCF应用程序之间传送消息的通道,它负责以一种一致的方式对消息进行整理和传送。信道被用于传输层,协议层及消息解惑。

         信道栈:所有各层次的信道一起,组成了信道栈。信道栈就是一个层次的通信栈,专门用于处理消息。

         主要包括:传输信道、协议信道

         信道模型

           a)请求响应模式(Request/Reply)

               客户端发送请求后,必须等待回应。

              1)同步—请求响应模式

              2)异步—请求响应模式

          b)单向通信模型(Oneway)

              客户端发送请求后,无需等待服务器回复,只需得到一个通知来确认消息已经成功发送即可

          c)双工通信(Duplex)

              通信双方都是客户端和服务器,双方都可以发送请求并回复消息。

    六、行为的分类

         a)服务行为

            运行于服务级别,能访问所有的端点。主要控制实例化与事务,还用于授权和审计。

          b)端点行为

             涉及服务端点,适用于对进出服务的消息进行审查和处理。(消息跟踪器)

          c)操作行为

             涉及操作级别,对于服务操作而说,他们适用于序列化、事务流和参数处理。(参数检验器)

    七、并发与实例化

            WCF中控制并发的行为

            1.实例上下文模式(InstanceContextMode)

               a)Single:一个服务类的实例处理所有入站请求,这实现为单例(Singleton).

               b)PerCall:为每个入站请求创建一个服务类的实例。

               c)PerSession:为每个客户端会话创建一个服务类的实例。(默认方式)

           2.并发模式(ConcurrencyMode)

              a)Single:在同一时刻只有一个线程访问服务类,这是最安全的设置,因为不用担心线程安全问题。

              b)Reentrant:在同一时刻只有一个线程访问类,但该线程能暂时离开服务类,稍后回来并继续访问。

              c)Multiple:多个线程能并发访问服务类

    八、托管

              服务并不能单独存在,必须寄存在宿主中。服务宿主(Service host)是一个负责WCF服务的生命周期(LiftTime)和上下文(Context)的操作系统进程。

        负责启动和停止WCF服务,并提供了一些控制服务的基本管理功能。

        托管的方式:

       1.控制台程序/WINDOWS程序(自托管)

            优点:开发简单

            缺点:在项目中应用并不常见,通常只用在测试阶段

       2.IIS

           优点:宿主进程可以在客户端提交第一次请求的时候自动启动,还可以借助IIS管理宿主进程的生命周期。

           缺点:只能支持HTTP协议。

            basicHttpBinding

            wsHttpBinding

            wsDualHttpBinding

      3.Windows服务(自托管)

           优点:随系统一同启动

      4、IIS托管浏览元数据效果图 

                

    九、客户端

          客户端引用服务的方法:

             1.使用svcutil.exe工具(生成ServiceBase)

             2.使用 Add Service Reference(控制台程序中没有) (生成ServiceBase)

             3.使用信道工厂channelFactory或channelFactory<T>

             4. 手工建立(手工添加继承ServiceBase)

         客户端需要哪些文件:

             1.契约接口

             2.配置文件(非必须,可编码实现同样功能)

             3.数据契约实现的类与系统支持的数据类型

      十、服务建立

             步骤一:构建整个解决方案

                   

               Contracts:类库项目,定义服务契约(Service Contract),引用System.ServiceMode程序集(WCF框架的绝大部分实现和API定义在该程序集中);
               Services:类库项目,对WCF服务的实现。定义在该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,所以Services具有对Contracts项目的引用
               Hosting:控制台应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集;
               Client:一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode程序集。

          步骤二:创建服务契约

              注意:需要引用System.ServiceModel.dll

                      添加[ServiceContract]与[OperationContract]特性

               

       
          步骤三:创建服务      

             注意:需要引用System.ServiceModel.dll

                     引用服务契约所在的dll

              

          步骤四:通过自我寄宿的方式寄宿服务

             注意:需要引用System.ServiceModel.dll

                     引用服务契约所在的dll

                     引用服务所在的dll

             

             新建项,选择应用程序配置文件,文件名App.config保持不变。
             修改app.config内容如下:

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3   <system.serviceModel>
     4     <services>
     5       <service name="Services.CalculatorService" behaviorConfiguration="behaviorConfiguration">
     6         <host>
     7           <baseAddresses>
     8             <add baseAddress="http://localhost:8013/"/>
     9           </baseAddresses>
    10         </host>
    11         <endpoint address="" binding="basicHttpBinding" contract="Contracts.ICalculator"></endpoint>
    12       </service>
    13     </services>
    14     <behaviors>
    15       <serviceBehaviors>
    16         <behavior name="behaviorConfiguration">
    17           <serviceMetadata httpGetEnabled="true"/>
    18         </behavior>
    19       </serviceBehaviors>
    20     </behaviors>
    21   </system.serviceModel>
    22 </configuration>

          步骤五:创建客户端调用服务

             使用微软的svcutil工具CalculatorService服务的客户端代理类,
             通过开始菜单/Microsoft Visual Studio 2010/Visual Studio Tools/Visual Studio 2010命令提示,启动命令环境。
             确认CalculatorService服务已启动
             切换当前路径到解决方案目录:cd G:ProgramWCFWCFDeomClient
             输入命令:svcutil http://localhost:8013/?wsdl /o:CalculatorService.cs
             执行成功后,会在解决方案目录下生成两个文件:CalculatorService.cs 和output.config

             
            中止Host项目的调试,回到Client项目,选择添加 现有项 ,然后选择这两个文件,添加后,将output.config重命名为App.config
            Client项目中添加引用,选择System.ServiceModel
            修改program.cs代码如下:

          步骤六:建立客户端程序

              注意:需要引用System.ServiceModel.dll

                      引用服务契约所在的dll

                      (这里建立的方式是:信道工厂)

                 

                运行结果如下:

                  

          希望能够帮到各位园友们!精彩内容整理中..............

          成功路上最心酸的是要耐得住寂寞、熬得住孤独,总有那么一段路是你一个人在走,一个人坚强和勇敢。

         人的一生没有过不去的坎,跨坎的源动力在自已。

         

  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/1312mn/p/3757969.html
Copyright © 2020-2023  润新知