【WCF】深入理解配置文件

     在我上一篇文章中介绍了创建第一个WCF应用程序,接下来我们讲一下如何利用配置文件通信的,上篇文章之所以没有提到,是因为IDE自动将客户端的配置文件中的Endpoint与引用服务的Endpoint匹配了。所以客户端和服务端可以通信。服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用。承载服务有两种方式,一种通过配置文件,一种通过代码进行配置(见上面链接)。

   一、在讲配置文件之前我们必须了解一个概念那就是服务三要素ABC

 (1)A:Adress(地址)在哪里、在计算机中是通过一个URI唯一地址标识,通过这个地址我们可以找到我们要调用的WCF服务。

      A解决了:Where to locate the WCF Service?

 (2)B:Binding 怎么实现(与地址的传输方式要匹配), Binding实现在Client和Service通信的所有底层细节。如:我们在客户端与服务端传输的时候采用的是什么样的编码,XML?Text?二进制?...采用哪种传输协议进行传输,TCP?Http?以及采用什么样的机制解决安全问题,SSL?加密?

      B解决了:How to communicate with service?

 (3)C:Contract(服务契约)告诉我们哪些事能做,如些事不能做,Contract实际上是把每个方法的转化成为相对应的消息。

      C解决了:What functionalities do the Service provide?

   在这里我们得到一个公式:Endpoint=A+B+C


 二、接下来讲解配置文件。

 (1)配置文件概要:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <!-- 部署服务库项目时,必须将配置文件的内容添加到 
  主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
  <system.serviceModel>
    <!--配置服务节点Start-->
    <services>
      <!--配置某一服务,在这里可以指定服务名称-->
      <service name="WCFDemo.Service1">
      </service>
    </services>
    <!--配置服务节点End-->

    <!--配置绑定节点Start-->
    <bindings>
      <basicHttpBinding></basicHttpBinding>
      <mexHttpBinding></mexHttpBinding>
      <wsHttpBinding></wsHttpBinding>
    </bindings>
    <!--配置绑定节点End-->

    <!--配置行为节点Start-->
    <behaviors>
      <serviceBehaviors>
        <behavior>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!--配置行为节点End-->
    
    <!--路由设置Start-->
    <routing>
      <filters>
        <filter name="filter1" filterType="Action"/>
      </filters>
    </routing>
    <!--路由设置End-->   
  </system.serviceModel>
</configuration>

(2)Service节点

name - 指定这个service配置是针对的那个服务,为一个实现了某些Contract的服务类的名,ServiceHost载入一个服务后,会到配置文件中的<services>下找有没有name属性跟服务匹配的<service>的配置 behaviorConfiguration - 指定在<serviceBehaviors>下的一个<behavior>的name。

<!--属性设置,name:服务的完全限定名,命名空间+实现类名;behaviorConfiguration行为配置,取设置的behavior的名称,具体可见behaviors节点-->
<service name="SecondWCFSample.Service1" behaviorConfiguration="basicBehavior">
</service>

(3)Endpoint节点

指定三个要素ABC,地址(Address),绑定(Binding)以及契约(Contract)

<!--定义endpoint,指定地址(address),绑定(binding)以及协定(contract)-->       
        <endpoint address ="" binding="wsHttpBinding" contract="WCFDemo.IService1">
          <!--服务标识。 部署时,应删除或替换下列标识元素,以反映用来运行所部署服务的标识。删除之后,WCF将自动推断相应标识。-->
        </endpoint>

(3)Binging节点

绑定包含以下元素:
协议堆栈确定用于发送到终结点的消息的安全性、可靠性和上下文流设置。
传输确定将消息发送到终结点时使用的基础传输协议,例如 TCP 或 HTTP。
编码确定用于发送到终结点的消息的网络编码,例如,文本/XML、二进制或消息传输优化机制 (MTOM)。

<!--配置绑定节点Start-->
    <bindings>
      <basicHttpBinding>
        <binding name="basic" transferMode="Streamed" messageEncoding="Text" allowCookies="false" textEncoding=""></binding>
      </basicHttpBinding>
      <netTcpBinding>        
      </netTcpBinding>
      <customBinding>       
      </customBinding>
    </bindings>
<!--配置绑定节点End-->

(4)Behavior节点

Behavior的主要作用是定制Endpoint在运行时的一些必要的Behavior。比如Service回调Client的Timeout;Client采用的Credential type;以及是否支持Transaction等

 <!--配置行为节点Start-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="basicBehavior">
          <!-- 为避免泄漏元数据信息,
          请在部署前将以下值设置为 false 并删除上面的元数据终结点  -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- 要接收故障异常详细信息以进行调试,
          请将以下值设置为 true。在部署前设置为 false 
            以避免泄漏异常信息-->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!--配置行为节点End-->


 小结:这篇博客中感觉Endpoint和ABC非常的重要,要彻底的理解,并且binding应该知道在什么情况用什么binding性能最高,最合适,以后再实战的情况下多多注意使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值