• WCF(四) Configuration file (配置文件)


    前面大致介绍了点wcf的几个小小的基本概念. 任何一个新技术,都能给我们带来一大堆的基本概念. 当然WCF也不例外. 关于WCF更多的概念,在以后再讨论.我们先讨论如何在不深入了解这一大堆学术定义的前提下,使用这项技术.

    在开发过程中,使用configuration file (配置文件)具有很灵活的好处:以后有关于配置的改变,不必重新编译代码,只需打开configuration file 改一下就行了,省时省力.

    WCF中configuration file的地位不可忽视.当然我们可以使用code的方式,实现WCF的服务的每个阶段. 但我们的软件产品是需要给客户在实际工作中使用的. 我们要让软件产品的后期维护尽可能的简单,省时省力.

    WCF的核心是Service. 一个service有包含多个endpoint, 如下图:

    打开VS2010,File-->New project. 选择WCF Service Library 模板. Solution Name 和project Name我们都用默认的. 点击OK.

    此时创建了一个WCF Library project. 打开App.config 文件,你会看到以下内容:

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3 
     4   <system.web>
     5     <compilation debug="true" />
     6   </system.web> 
     7   <system.serviceModel>
     8     <services>
     9       <service name="WcfServiceLibrary4.Service1">
    10         <host>
    11           <baseAddresses>
    12             <add baseAddress = "http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary4/Service1/" />
    13           </baseAddresses>
    14         </host> 
    15         <endpoint address ="" binding="wsHttpBinding" contract="WcfServiceLibrary4.IService1">
    16           <identity>
    17             <dns value="localhost"/>
    18           </identity>
    19         </endpoint>    
    20         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    21       </service>
    22     </services>
    23     <behaviors>
    24       <serviceBehaviors>
    25         <behavior>
    26           <serviceMetadata httpGetEnabled="True"/>       
    27           <serviceDebug includeExceptionDetailInFaults="False" />
    28         </behavior>
    29       </serviceBehaviors>
    30     </behaviors>
    31   </system.serviceModel>
    32 
    33 </configuration>

    注:

    第1行,定义该xml file的版本和使用的字符集. 是关于该配置文件的基本信息,与程序配置无关,只管保持默认即可.

    第2行,<configuration> node,关于程序内的配置,都必须包含在此node里面.

    第5行,是关于debug配置. 如果是在开发阶段,把它设为true,这样调试起来方便.

    第7--31行,是<system.serviceModel> node, 关于wcf service的核心配置都在这个node里面. 该node下面有两个子node:一个是<services>,另一个是<behaviors>. 除此以外,还可以有<bindings>等.<services>是<service>的集合;<behaviors>是<behavior>的集合;<bindings>是<binding>的集合.

    多说一句: WCF程序设计需要注意两方面的模型:一是编程模型;二是通信模型. 一般我们做web开发只需要编程模型,通信就交给http了. 但是wcf允许我们使用http以外的其他通信协议.所以,我们考虑了编程还必须考虑通信模型.好在wcf给我们提供了方便之处:它屏蔽了开发人员对通信模型的处理,只需要我们通过bindings API创建通信模型即可. 所以,我们对bindings的指定,就是在处理通信模型.

    第8--22行,是<services>node,该node下面有多个<service>node.

    第9--21行,是<service>node,它的name指定了实现这个service的类名(全名,包括namespace).该<services>下面有一个<host>node,和多个<endpoint>node.(如上面我们提到的那张图) .

    第10行,是<host>node, <host>下面有<baseAddress>.

    第11-13行,<baseAddress> node, <add>增加一个该service的基址,<endpoint>里面的address就相对于这个baseAddress的. 如果有多个baseAddress的话是根据<endpoint>所指定的binding方式与baseAddress的形式匹配的.(如,<endpoint>所指定的binding方式是netTcpBinding,就会匹配以net.tcp://打头的baseAddress.)

     第15行,<endpoint>node,<endpoint>除了name以外,还有最重要的三部分组成,简称:ABC. A是Address,B是Binding,C是Contract. Address可以是一个完整的URL,或是一个相对于基址的URL,如果为空,则使用基址.Binding指定通信模型比如:http,tcp,mssq等. Contract就是服务的contract(就是前面我们使用[OperationContract]修饰的那个服务接口).

    第20行,是元数据的<endpoint>,用与发布一些元数据信息.

    先到这吧.....

  • 相关阅读:
    Google基本利用
    sqlmap
    kali中wireshark打开后错误
    Python Flask Jinja2模板引擎
    Python Flask学习
    Python 豆瓣日记爬取
    Python 函数装饰器
    Python 生成器
    ss源码学习--从协议建立到完成一次代理请求
    ss源码学习--工作流程
  • 原文地址:https://www.cnblogs.com/marksun/p/2646438.html
Copyright © 2020-2023  润新知