WCF的简单

摘要:
简单WCF学习之旅1。WCF简介Windows Communication Foundation(WCF)是一组由Microsoft开发的用于数据通信的应用程序开发接口,具有兼容性。客户端和服务之间的基本关系1。客户端和服务服务是为客户端提供可用功能的一组端点。客户端根据与服务的约定格式化消息。

WCF的简单

WCF的学习之旅

一、WCF的简单介绍

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

    优点:

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

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

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

      WCF的简单第1张

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

     1、客户端与服务

     WCF的简单第2张 

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

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

    2、 服务的三要素(ABC)

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

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

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

    3、WCF中的地址   

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

          WCF的简单第3张

    4、元数据交换     

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

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

          2.使用MEX终结点

           WCF的简单第4张WCF的简单第5张

     5、WCF体系架构

         WCF的简单第6张

三、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托管浏览元数据效果图 

            WCF的简单第7张

九、客户端

      客户端引用服务的方法:

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

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

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

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

     客户端需要哪些文件:

         1.契约接口

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

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

  十、服务建立

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

WCF的简单第8张

              WCF的简单第9张 

           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]特性

           WCF的简单第10张

   
      步骤三:创建服务      

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

                 引用服务契约所在的dll

          WCF的简单第11张WCF的简单第12张

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

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

                 引用服务契约所在的dll

                 引用服务所在的dll

         WCF的简单第13张

         新建项,选择应用程序配置文件,文件名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

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

      步骤六:建立客户端程序

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

                  引用服务契约所在的dll

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

             WCF的简单第17张

            运行结果如下:

              WCF的简单第18张

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

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

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

     

 
 
 
 
 
分类: .Net
标签: WCF

免责声明:文章转载自《WCF的简单》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ThinkPad X1 Carbon无法识别第二屏幕es6语法---从提交的数据 找到对应list里面的 键值id 替换--find下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

消息队列-推/拉模式学习 &amp;amp; ActiveMQ及JMS学习

消息中间件的主要功能是消息的路由(Routing)和缓存(Buffering)。在AMQP中提供类似功能的两种域模型:Exchange 和 Message queue。 AMQP的更多内容可以看这里: http://www.cnblogs.com/charlesblc/p/6058799.html 一种分类是推和拉 。 还有一种分类是 Queue 和 P...

Android酷炫实用的开源框架(UI框架)

    原文链接:http://www.androidchina.net/1992.html 前言   忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮助,此博文介绍的都是UI上面的框架,接下来会有其他的开源框架(如:HTTP框架、DB框架)。 1.Side...

iOS安装Git:分布式代码托管----【GIt的使用与安装】【Xcode自带Git使用】【Git与GitHub】

首先,Git不是github,Git和github的关系就像是 英雄联盟和对战游戏平台  其次,Xcode内置了Git,我们可以利用github或者国内的开源中国进行代码托管,直接在Xcode上进行团队协作 客户端(pc/mac)想要和github(码云等托管网站)链接,需要在终端生成用户的SSH公钥,而项目的ssh key和用户的ssh key两处地方有...

阿里消息队列中间件 RocketMQ源码解析:Message发送&amp;amp;接收

关注微信公众号:【芋艿的后端小屋】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。 新的源码解析文章实时收到通知。每周更新...

webpack3向4升级中具体问题及解决办法

据说webpack4同比webpack旧版本构建速度提示至少一倍,于是开始webpack升级的尝试。 webpack4已经出来很长时间了,手头有一个基于webpack3的微信公众号项目,在项目的空档期自己在一个开发分支上做了webpack3向4的迁移。   首先将webpack升级到了4.28.2版本,因为线上项目基于webpack3的版本且为全局安装,不...

python基础学习-TCP的粘包问题

一、什么是粘包(粘包问题的原因) 所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。 只有TCP有粘包现象,UDP永远不会粘包,tcp的客户端与服务端进行通信的时候是以一种数据流的形式, 首先需要掌握一个socket收发消息的原理: 服务端把要发送的数据送到服务端的缓存,通过网卡把数据从服务端的缓存到客户端的缓存...