WCF系列(一)地址与绑定

地址
    地址指定了接收消息的位置,WCF中地址以统一资源标识符(URI)的形式指定。URI由通讯协议和位置路径两部分组成,如示例一中的:
http://localhost:8000/
表明通讯协议为http,位置是localhost(本机)的8000端口。
    注意上述提到的消息是指一个独立的数据单元,一般由消息正文和消息头组成,而服务端与客户端的交互都是通过消息来进行的。
    WCF中支持的传输协议包括HTTP、TCP、Peer network(对等网)、IPC(基于命名管道的内部进程通信)以及MSMQ(微软消息队列),每个协议对应一个地址类型:
    HTTP地址
        即使用HTTP协议进行传输(包括https安全传输协议)。其地址形式为
        http://localhost:8000/
        如果地址中为制定端口号,则默认端口为80

    TCP地址
        使用TCP协议进行传输,其形式为:
        net.tcp://localhost:8000/

    IPC地址
        使用net.pipe进行传输,其形式为:
        net.pipe://localhost/

    MSMQ地址
        使用Microsoft Message Queue机制进行传输,其形式为:
        net.msmq://localhost/

    对等网地址
        使用net.p2p进行传输,其形式为:
        net.p2p://localhost/

绑定
    绑定定义终结点与外界进行通讯的方式,它由一组称为绑定元素的要素构造而成,绑定最起码应该定义传输协议(如http、TCP等)和所使用的编码方式(如文本或二进制等)
绑定元素
    绑定元素表示绑定的特定部分,如传输协议、编码、基础结构级协议(如 WS-ReliableMessaging)的实现以及通信堆栈的其他任何要素。
预定义绑定
    即WCF基库中提供的绑定。 这些绑定是针对特定方案进行优化的绑定元素的集合。 例如,WSHttpBinding 是为了与实现各种 WS* 规范的服务进行互操作而专门设计的。 通过仅提供那些可以正确应用于特定方案的选项,这些预定义的绑定可以节省时间。 如果预定义的绑定不能满足您的要求,则可以创建您自己的自定义绑定。示例一中我们使用了basicHttpBinding预定义绑定。
下面列表包含了当前WCF基库中预定义的所有绑定

绑定 配置元素 说明 传输协议 编码格式
BasicHttpBinding 一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。 此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。 HTTP/HTTPS Text,MTOM
WSHttpBinding 一个安全且可互操作的绑定,适合于非双工服务约定。 HTTP/HTTPS Text,MTOM
WS2007HttpBinding 一个安全且可互操作的绑定,可为 Security, ReliableSession 的正确版本和 TransactionFlow 绑定元素提供支持。 HTTP/HTTPS Text,MTOM
WSDualHttpBinding 一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。 HTTP Text,MTOM
WSFederationHttpBinding 一个安全且可互操作的绑定,支持 WS 联合协议并使联合中的组织可以高效地对用户进行身份验证和授权。 HTTP/HTTPS Text,MTOM
WS2007FederationHttpBinding 一个安全且可互操作的绑定,它派生自 WS2007HttpBinding 并支持联合安全性。 HTTP/HTTPS Text,MTOM
NetTcpBinding 一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。 TCP Binary
NetNamedPipeBinding 一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。 IPC Binary
NetMsmqBinding 一个排队绑定,适用于 WCF 应用程序之间跨计算机的通信。 MSMQ Binary
NetPeerTcpBinding 一个支持多计算机安全通信的绑定。 P2P Binary
MsmqIntegrationBinding 一个绑定,适用于 WCF 应用程序和现有消息队列(也称为 MSMQ)应用程序之间跨计算机的通信。 MSMQ Binary

显然绑定与地址是对应的:比如NetTcpBinding绑定只能使用TCP地址。而上表中所有WS开始的绑定都支持TEXT的SOAP消息编码,这表明选择这些绑定的服务,可以由其他技术和平台使用,如Java等。而其他采用二进制SOAP编码的绑定则只支持WCF到WCF的交互。

 

示例二
为示例一中服务添加一个TCP绑定及IPC绑定,并在客户端中使用新的绑定调用服务
1.请将示例一的文件夹复制,将其名称修改为XfrogWCFStudy002
2.打开Host项目的App.config文件,将其内容修改如下:

 

我们在baseAddress节点内增加了两个基地址,并新定义了两个终结点endpoint。由于绑定是和特定的协议地址对应的,所以WCF能够根据绑定类型找到相应的基地址,即在上述配置中netNamedPipeBinding绑定会自动找到对应的net.pipe://localhost/地址。
3.在Client项目中打开App.config,将内容修改如下:

 

我们在client节点内增加了两个终结点,分别指定了终结点的地址和绑定类型,并未终结点指定了一个名称(name)
4.修改Client项目中的Program.cs代码如下:

 

在原有代码上,我们新实例化了两个客户端代理类,注意在调用构造时我们传入了相应在配置文件中指定的终结点名称。通过该名称WCF将使用对应的终结点来与服务端交互。

5.调试:在Host项目上单击右键,选择调试--启动新实例,待服务启动完成后,在Client项目上单据右键,选择调试--启动新实例。

是不是很简单呢?我们几乎没有编写任何代码就为以前的服务新增了两个通讯协议。有兴趣的朋友可以为服务添加其他几个ws*绑定,不过呢,由于需要相应特定的Windows服务或特殊服务行为的支持,NetMsmqBinding、NetPeerTcpBinding及MsmqIntegrationBinding绑定现在还无法直接添加。

 

你可能感兴趣的:(学习总结,wcf,soap,microsoft,tcp,通讯,优化)