• WCF学习笔记之 搭建WCF技术知识框架


    • 一个WCF服务向WCF客户提供一些可用的功能。WCF客户通过终结点(endpoint)来访问WCF服务。因此,一个WCF服务至少要包含一个终结点。如果允许服务端反过来调用客户端的代码(即所谓回调callback),则客户端也应该提供回调所使用的终结点。
    • WCF服务与客户程序要想成功通讯,必须遵循特定的协议,WCF规定,在WCF服务与WCF客户间发送的所有消息都遵循SOAP协议。
    • 终结点与它的“ABC”每个终结点都向外界提供一个服务的访问点。

    每个终结点都定义着一个地址(A:Address),指明“到哪儿可以找到服务”。

    绑定(B:Binding)指明“如何与服务进行通讯”。

    契约(C:Contract)定义了“服务能干哪些事”。契约定义了一个终结点向外界发布的操作,以及WCF服务与客户相互通讯时的消息格式。WCF中有四种类型的契约。

    服务契约(Service Contract)

    实现“服务契约”很容易:定义一个接口,给接口附加[ServiceContract],给接口方法附加[OperationContract]。
    [ServiceContract]
    public interface IHelloWCFService
    {
    [OperationContract]
    string GetServiceMessage();
    }

    [ServiceContract]还可以直接施加于类之上。但不推荐这么做。另外,一个类可以实现多个[ServiceContract]。

    数据契约(DataContract)

    数据契约定义将在客户端与服务器端传送的各种数据类型。
    [DataContract]

    structContact

    {

        [DataMember]

        public string FirstName;

        [DataMember]

        public string LastName;

    }

    定义数据契约时需要使用[DataContract]和[DataMember]。

    消息契约(Message Contract):可以使用消息契约来定制WCF服务与WCF客户间相互通讯的SOAP消息格式。

    错误契约(Fault Contract):定义在服务中如何处理异常,以及这些异常又如何传送到客户端。

    A:地址(Address)地址指明在哪儿可以找到特定的WCF服务。地址的格式如下:
    http://localhost:8000/HelloWCFService

    [通讯协议]://[服务器名或IP地址][:端口号]/[可选的其他URI]

    只要子地址不同,不同的服务可以共享同一个TCP端口。

     WCF地址类型与通讯协议对应

    使用TCP:地址以“net.tcp”打头,多用于局域网环境

    使用HTTP:地址以“http”和“https”打头,多用于互联网环境

    使用消息队列:地址以“net.msmq”打头。消息队列用于提供离线的消息服务,即调用服务时WCF服务程序可以还没运行,调用请求被放到一个消息队列中,WCF服务程序启动后取出此请求,解析后向WCF客户提供服务。适用于局域网环境。

    使用命名管道:地址以“net.pipe”打头。当WCF服务与WCF客户都位于同一台计算机时,这种通讯方式可以获得好的性能

    服务的基地址与子地址

    一个服务,可以有多个终结点,服务的地址称为“基地址”,而终结点地址是在此基础上再追加一个子地址而确定的。

    B:绑定(Binding)绑定定义了客户端与服务端交换信息所需要的通讯配置参数,比如传输协议,消息编码方式等。

    简单地说:绑定定义了客户端如何与服务端通讯。WCF服务可以使用多种类型的绑定,.NET提供了一些现成的绑定可供使用。

    此外,.NET还提供了一个CustomBinding类,用于自定义绑定。真的是非常灵活!

    WCF预定义绑定

    BasicHttpBinding、WSHttpBinding和WSFederationHttpBinding:使用HTTP

    WSDualHttpBinding:使用两个HTTP通道实现双向通讯

    NetTcpBinding:使用TCP

    NetPeerTcpBinding:使用P2P(很Cool的一个绑定,后面会用它来开发有趣的应用)

    NamedPipeBinding:使用命名管道

    NetMsmqBinding和MsmqIntegrationBinding:使用消息队列

    有关绑定需要注意的……

    绑定定义了与终结点进行通讯的通道(channel )。

    可以把通道想象是自来水管,信息就是在管中流动的水。

    WCF提供不同用途的“管子”,有的管子只管传输信息,有的管子负责保证数据安全,有的管子负责压缩数据,……,把这些不同用途的管子接在一块,就形成了一个“信息水管”。WCF服务与WCF客户分别位于这个管子的两端。

    整个“信息水管”是一段段的,每一段都可以被取走或替换为另一种功能的“管子”(你也可以创建自己的“管子”),通过管子的动态组合可以实现高度的灵活性。

    服务的宿主

    概述WCF服务应有一个宿主程序。可选的宿主程序类型有:IIS,WAS,Windows Form/WPF Application,Console Application,Windows Service。

    在客户端可以访问服务之前,服务宿主进程必须启动。

    一个服务宿主程序可以同时承载多个服务。

    ServiceHost对象

    在WCF中,由ServiceHost对象负责启动和停止服务。每个服务都对应着一个ServiceHost对象,调用ServiceHost.Open方法启动服务,这时可以接收客户端的服务请求,调用ServiceHost.Close方法停止服务,这时,不再理会客户端的服务请求。

    注意对应关系!

    一个服务宿主程序可以同时承载多个服务,每个服务对应着一个ServiceHost对象。

    一个ServiceHost可以拥有多个终结点(牢记终结点的“ABC”),通过调用ServiceHost.AddServiceEndPoint()方法添加终结点。

    使用配置文件定义服务为了方便起见,我们一般使用配置文件来定义服务的终结点。 

  • 相关阅读:
    Java核心API需要掌握的程度
    JAVA开发者最常去的20个英文网站
    Java .class files decompile tools
    让aptget到网络上查找源,避免经常插入光盘
    Google Job : Research Engineer Beijing
    教你亚健康该如何饮食
    tcpdump w 和 r 的使用
    黑客发布iOS 4.1永久越狱程序 狼人:
    微软将迎来迄今最大补丁日 一次修补49个漏洞 狼人:
    百度瞄准客户端 迅雷、360、腾讯皆是目标 狼人:
  • 原文地址:https://www.cnblogs.com/lzjsky/p/2008945.html
Copyright © 2020-2023  润新知