• Web.config引用外部配置文件,实现模块化配置


       大型项目中,可能有多个Service,也就是会有一堆配置,而这些配置文件如果散落在各个项目的web.config里,那维护量将是非常巨大的,所以有人使用configSource将各咱文件分开放,然后Copy到各处,这样以来配置文件看起来就很模块化了,但这样Copy维护起来还是很麻烦,所以有高人提出公共配置的概念,将这些配置文件放到一个公用目录,然后在各个目录下建立一个虚拟文件夹指向那个公共目录(Junctionhttp://technet.microsoft.com/en-us/sysinternals/bb896768.aspx,如想了解更多可访问:多站点共享:共享配置)天下太平了,要添加修改只用改这一个文件夹的内容就可以了。

    我们用到的有:

        <appSettings configSource="VConfigsDEVappSettings.config" /> 
        <system.serviceModel>
          <services  configSource="VConfigsDEVWCF.services.config" /> 
          <bindings  configSource="VConfigsDEVWCF.bindings.config" />
          <behaviors configSource="VConfigsDEVWCF.behaviors.config" />
          <client    configSource="VConfigsDEVWCF.client.config" />
        </system.serviceModel>
    注:在services、bindings、behaviors、client下使用configSource配置外部的配置文件时,VS上可能会提示没有该属性,没有关系,程序可以照常运行。
    参考内容:

    ConfigSource attribute on system.serviceModel section

    The configSource attribute was firstly introduced in .NET framework 2.0 to support external configuration files.

    This attribute can be added to any configuration section to specify a an external file for that section. Using an external configuration source can be useful in many scenarios. For instance, you could place a section into an external configSource if you need an easy method to swap settings for the section depending on the environment (development, test, or production), or  you need granular control over permissions.

    Unfortunately, the system.serviceModel section group does not support this attribute. If you try to add it, you will receive the following exception:

    The attribute 'configSource' cannot be specified because its name starts with the reserved prefix 'config' or 'lock'

    "configSource" attribute is a property comes from the  section Information class.
    Every ConfigurationSection in .net framework 2.0 configuration scheme system
    has a property of a section Information where the config source is declared.

     you can use this attribute on the different sections under system.serviceModel such as services, behaviors or bindings.

    For instance, the configuration file could look like this,

    <configuration>

      <system.serviceModel>

        <services configSource="Services.config" />

        <bindings configSource="Bindings.config" />

        <behaviors configSource="Behaviors.config" />

      </system.serviceModel>

    </configuration>

     And then, each file contains the corresponding section.

    Services.config

    <services>

      <service name="Microsoft.ServiceModel.Samples.CalculatorService"

              behaviorConfiguration="CalculatorServiceBehavior">

        <host>

          <baseAddresses>

            <addbaseAddress="http://localhost:8000/servicemodelsamples/service"/>

          </baseAddresses>

        </host>

        <!-- this endpoint is exposed at: net.tcp://localhost:9000/servicemodelsamples/service  -->

        <endpointaddress="net.tcp://localhost:9000/servicemodelsamples/service"

                  binding="netTcpBinding"

                  bindingConfiguration="Binding1"

                 contract="Microsoft.ServiceModel.Samples.ICalculator" />

        <!-- the mex endpoint is exposed at http://localhost:8000/ServiceModelSamples/service/mex -->

        <endpoint address="mex"

                  binding="mexHttpBinding"

                  contract="IMetadataExchange" />

      </service>

    </services>

    Bindings.config

    <bindings>

      <netTcpBinding>

        <binding name="Binding1"

                closeTimeout="00:01:00"

                openTimeout="00:01:00"

                receiveTimeout="00:10:00"

                sendTimeout="00:01:00"

                transactionFlow="false"

                transferMode="Buffered"

                transactionProtocol="OleTransactions"

                hostNameComparisonMode="StrongWildcard"

                listenBacklog="10"

                maxBufferPoolSize="524288"

                maxBufferSize="65536"

                maxConnections="10"

                maxReceivedMessageSize="65536">

          <readerQuotas maxDepth="32"

                        maxStringContentLength="8192"

                        maxArrayLength="16384"

                        maxBytesPerRead="4096"

                        maxNameTableCharCount="16384" />

          <reliableSession ordered="true"

                          inactivityTimeout="00:10:00"

                          enabled="false" />

          <security mode="Transport">

            <transport clientCredentialType="Windows"protectionLevel="EncryptAndSign" />

          </security>

        </binding>

      </netTcpBinding>

    </bindings>

    Behaviors.config

    <behaviors>

      <serviceBehaviors>

        <behavior name="CalculatorServiceBehavior">

          <serviceMetadata httpGetEnabled="true" />

          <serviceDebug includeExceptionDetailInFaults="False" />

        </behavior>

      </serviceBehaviors>

    </behaviors>

     

  • 相关阅读:
    temp
    Windows如何利用输入法简单的打出 ‘↑’ ‘↓’ ‘↖’等箭头
    Win10系统特别卡的一个原因
    巨蟒python全栈开发-第16天 核能来袭-初识面向对象
    在pycharm中误删了Python文件,怎么办,挺急的?
    巨蟒python全栈开发-第15天 装饰器
    巨蟒python全栈开发-第13天 内置函数 匿名函数lambda
    巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from
    360浏览器的收藏夹隐藏了,怎么处理?
    如何解决安装好的google浏览器打不开网页的问题?
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604960.html
Copyright © 2020-2023  润新知