zoukankan      html  css  js  c++  java
  • 元数据终结点

    绑定

    服务之间的通信方式多种多样,传输协议多种多样,消息编码格式多种多样,消息安全保障策略多种多样...等等这些如果组合起来,其数量非常之多,并且组合这些选项,有的彼此约束,有的互斥。对大多数应用程序而言,管理这么复杂的组合并无商业价值。然而,一旦做出错误的组合,就会影响系统的性能,质量,造成严重的后果。

    为了简化这些选项,方便管理,WCF引入了绑定(binding),将这些通信特征组合在一起。

    WCF定义了五种常用的绑定。

    • 基本绑定

    对应于BasicHttpBinding类。基本绑定使得服务看起来像是一个传统的Web服务,能够基于基本的Web服务信息进行通信。

    • TCP绑定

    对应于NetTcpBinding类。TCP绑定使用TCP协议实现在Intranet中跨机器的通信。

    • IPC绑定

    对应于NetNamedPipeBinding类。它使用命名管道为同意机器通信进行传输。

    • Web服务绑定

    对应于WSHttpBinding类。

    • MSMQ绑定

    对应于NetMsmqBinding类。

    有三种使用绑定的方式:(1)如果满足需要,可以直接使用内置的绑定类型;

               (2)重新配置绑定的属性;

               (3)编写自定义绑定;

    终结点(Endpoints)

    服务与地址,绑定,契约有关。其中,地址定义了服务的位置,绑定定义了服务通信的方式,契约则定义了服务的内容。所以,可以这样理解,终结点就是地址,绑定,契约的混合体(ABC)。 

    每一个终结点都包含了三个元素,而宿主则负责公开终结点。从逻辑上讲,终结点相当于服务的接口。

    每个服务至少公开一个业务终结点,每个终结点有且只能有一个服务契约。

    Address

    地址的三个典型功能(服务标识/定位,辅助寻址和服务身份标识)分别对应Uri,Headers和Identity三个只读属性。

    元数据交换终结点

    默认情况下,服务不会发布其元数据,那么如何获得元数据?

    有两种方式可以发布服务的元数据:一是基于HTTP-GET协议提供元数据,它是一种绝大多数平台都能支持的简单text-based协议;另一种是元数据交换终结点。

    • 基于HTTP-GET协议

    不发布元数据,我们当然就用不了服务,使用HTTP-GET协议,那么基地址中必须有一个http协议的,假如有这么一种情况,需要用HTTP-GET协议发布服务的元数据,但是通信却使用TCP,那么至少有两个基地址

    以下App.config配置如下

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="WCFServer.MyService" behaviorConfiguration="MEX">
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:5566/"/>
                <add baseAddress="http://localhost:6655/"/>
              </baseAddresses>
            </host>
            <endpoint address="HelloWorld"
                      binding="netTcpBinding"
                      contract="WCFServer.IMyService"/>
            <!--<endpoint address="MEX"
                      binding="mexTcpBinding"
                      contract="IMetadataExchange"/>-->
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MEX">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    •  元数据交换终结点

    基于HTTP-GET发布元数据仅仅是WCF的一个特性,它并不保证其他交互平台也会支持。元数据发布具有标准形式,即元数据交换终结点,称为MEX终结点。

    既然是终结点,那么就有address,binding,contract,只不过contract是IMetadataExchange。下面配置为使用元数据交换终结点的配置

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="WCFServer.MyService" behaviorConfiguration="MEX">
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:5566/"/>
              </baseAddresses>
            </host>
            <endpoint address="HelloWorld"
                      binding="netTcpBinding"
                      contract="WCFServer.IMyService"/>
            <endpoint address="MEX"
                      binding="mexTcpBinding"
                      contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MEX">
              <serviceMetadata/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>


    •  标准终结点

    WCF提供了几个预定义的服务终结点,即标准终结点,配置如下

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="WCFServer.MyService" behaviorConfiguration="MEX">
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:5566/"/>
              </baseAddresses>
            </host>
            <endpoint address="HelloWorld"
                      binding="netTcpBinding"
                      contract="WCFServer.IMyService"/>
            <endpoint address="MEX"
                      binding="mexTcpBinding"
                      kind="mexEndpoint"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MEX">
              <serviceMetadata/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
  • 相关阅读:
    安装 Docker Machine
    volume 生命周期管理
    data-packed volume container
    用 volume container 共享数据
    如何共享数据?- 每天5分钟玩转 Docker 容器技术(41)
    docker managed volume
    Data Volume 之 bind mount
    Docker 的两类存储资源
    外部世界如何访问容器?
    容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/3051999.html
Copyright © 2011-2022 走看看