zoukankan      html  css  js  c++  java
  • WCF之Binding

    本文的出发点:

    通过阅读本文,您能了解以下知识:

    1. WCF中的Binding是什么?
    2. Binding的组成?
    3. Binding Element 的分类?
    4. Binding描述了那些层面的信息?
    5. 选择正确的Binding

    本文适合的读者:

    本文适合WCF的初学者

    WCF中的Binding是什么?

    在弄清Binding是什么之前,我们先看一下WCF的中的Endpoint结构,一个Endpoint就类似于xml web service中的一个asmx文件,它包括三个组成部分1)Address 2) Binding 3) Contract,此三者被称为组成Endpoint的"ABC",下图阐述了Endpoint的组成结构:

    ABC分别解决了Endpoint的如下问题:

    A解决了Endpoint在哪的问题,也就是"Where is the endpoint?"

    B 解决的是如何与Endpoint通讯的问题,也就是"How to communicate with endpoint?"

    C解决了Endpoint提供什么功能的问题,也就是"What functionalities do the endpoint provide?"

    上面的两篇文章WCF从理论到实践三:八号当铺之黑色契约WCF从理论到实践四:路在何方分别阐述了Contract和Address,本文着重讨论Binding, Binding实现的是在客户端和服务端进行通讯的底层细节,包括数据如何传输(比如采用Tcp,Http等),如何解决安全问题(SSL,Message Level Security等),传输的消息的格式(如text/xml,MTOM,binary等)。

    Binding的组成?

    Binding包括三个组成部分:NameSpace,Name和BindingElement,如下图所示:

    Name和NameSpace是服务元数据(meta date)的唯一标志,换句话说,二者就像Binding的姓名一样,而BindingElement则描述Binding的特征,我们说Binding能解决通讯方式的问题,关键是靠BindingElement来进行描述。

    Binding Element 的分类

    Binding Element中最核心的组成部分,它分为以下三种类型

    1. Encoding Binding Element:它用于描述传输数据的编码方式,比如用text/xml进行编码,用binary编码,用MTOM进行编码都是在这个上面定义,每个Binding Element必须包含一个Encoding Binding Element。
    2. Transport Binding Element:它用于描述数据的传输方式,例如使用tcp进行传输,还是用http进行传输,还是用msmq,这些都是由Transport Binding Element来定

      义,每一个Binding Element 必须包含一个Transport Binding Element

    3. Protocol Binding Element: 指定诸如安全性、可靠性、上下文流设置(context flow settins)

    Binding描述了哪些层面的信息

    一个Binding包含着丰富的信息,每种信息都描述了服务端和客户端交互过程中的一方面,如下表所示,Binding描述了这些层面的信息:

    层次

    备注说明

    Transactions(事务)

    TransactionFlowBindingElement,用于指定事务流程

    Reliability(信赖)

    ReliableSessionBindingElement,用于指定对会话方式

    Security(安全)

    SecurityBindingElement,指定安全方式

    Encoding(编码)

    Text, Binary, MTOM, Custom,指定数据传输格式

    Transport(传输)

    TCP, Named Pipes, HTTP, HTTPS, MSMQ, Custom,指定传输方式

    选择正确的Binding

    Binding是可以自定义实现的,可WCF框架已经为我们实现了足够多的Binding,供我们来选择,如下表所示:

    Binding名称

    Configuration Element

    描述

    BasicHttpBinding

    basicHttpBinding

    一个指定用符合基本网络服务规范通讯的binding,它用http进行传输,数据格式为text/xml

    WSHttpBinding

    wsHttpBinding

    一个安全的通用的binding,但它不能在deplex中使用

    WSDualHttpBinding

    wsDualHttpBinding

    一个安全的通用的binding,但能在deplex中使用

    WSFederationHttpBinding

    wsFederationHttpBinding

    一个安全的通用的支持WSF的binding,能对用户进行验证和授权

    NetTcpBinding

    netTcpBinding

    在wcf应用程序中最适合跨机器进行安全通讯的binding

    NetNamedPipeBinding

    netNamedPipeBinding

    在wcf应用程序中最适合本机进行安全通讯的binding

    NetMsmqBinding

    netMsmqBinding

    在wcf应用程序中最适合跨机器进行安全通讯的binding,并且支持排队

    NetPeerTcpBinding

    netPeerTcpBinding

    一个支持安全的,多机交互的binding

    MsmqIntegrationBinding

    msmqIntegrationBinding

    一个用于wcf与现有msmq程序进行安全通讯的binding

    下面的表格分别删除了上表中的Binding在互操作性(Interoperability), 安全性(Security), 是否支持会话(Session), 是否支持事务(Transactions)和是否为全双工(Duplex)上不同。

    Bingding

    Interoperability

    Security

    Session

    Transactions

    Duplex

    BasicHttpBinding

    Basic Profile 1.1

    (None), Transport, Message

    None, (None)

    None

    n/a

    WSHttpBinding

    WS

    Transport, (Message), Mixed

    (None), Transport, Reliable Session

    (None), Yes

    n/a

    WSDualHttpBinding

    WS

    (Message)

    (Reliable Session)

    (None), Yes

    Yes

    WSFederationHttpBinding

    WS-Federation

    (Message)

    (None), Reliable Session

    (None), Yes

    No

    NetTcpBinding

    .NET

    (Transport), Message

    Reliable Session, (Transport)

    (None), Yes

    Yes

    NetNamedPipeBinding

    .NET

    (Transport)

    None, (Transport)

    (None), Yes

    Yes

    NetMsmqBinding

    .NET

    Message, (Transport), Both

    (None)

    (None), Yes

    No

    NetPeerTcpBinding

    Peer

    (Transport)

    (None)

    (None)

    Yes

    MsmqIntegrationBinding

    MSMQ

    (Transport)

    (None)

    (None), Yes

    n/a

    例外,《Programming WCF Services》有一幅图也能说明各自的特征:

    下面的图给出了我们选择Binding的方式

    转载自:http://adrian.w.h.blog.163.com/blog/static/880145920099199819557/?fromdm&fromSearch&isFromSearchEngine=yes  

    类似文章介绍:http://www.cnblogs.com/wayfarer/archive/2006/04/10/370957.html

  • 相关阅读:
    CentOS中怎样卸载旧版本Git并安装高版本Git
    下载抖音无水印视频工具 python webdriver 2020.09.02
    axel-2.17.9 aria2c-1.35.0 wget-1.20.3 curl-7.72.0 最新CLI下载工具在win10环境测试下载速度
    wget-1.20.3 static for win32
    undefined reference to `inet_pton' under MSYS
    undefined reference to `gnutls_protocol_set_priority'
    wget2 for windows 2020.08.28
    Unicode转义(uXXXX)的编码和解码 go-nascii 类似于 native2ascii
    正则表达式零宽断言 grep sift ripgrep(rg)
    编译 jq git版本
  • 原文地址:https://www.cnblogs.com/mistor/p/3040692.html
Copyright © 2011-2022 走看看