zoukankan      html  css  js  c++  java
  • 读书笔记 ASP.NET 2.0高级编程 第31章 配置

    昨天读到.NET中关于配置信息的读写,今天有空就动手写几个例子。光看不练,印象不深刻,
    直接拷贝书中的例子也没有多大的效果。联系到最近项目中的实际要求,总结一下遇到的问题。
    先看代码的文件结构图,下面会有详细的讲解。
    image

    1  .NET的标准方法(1.0)
    配置信息直接存放到Web.config文件中
    <appSettings>
      <add key="DefaultDaysLate" value="7" />
    </appSettings>
    <connectionStrings>
      <add name="MyDB" connectionString="server=myServer;uid=myuser;password=***;database=MyDB" />
    </connectionStrings>
    读取方法
    string DefaultDaysLate = ConfigurationManager.AppSettings["DefaultDaysLate"];
    string MyDB = ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString;

    2  使用外部配置文件的方式(1.1)
    把配置信息放到一个外部文件中,在Web.config文件中引用配置文件
    image
    如图,将Web.config需要的appSettings和connectionStrings配置信息分别放到
    外部文件AppSetttings.config和Connection.config中,
    Web.config的写法如下
    <appSettings file="AppSetttings.config"> </appSettings>
    <connectionStrings configSource="Connection.config"></connectionStrings> 
    技巧不多,下次学会用就可以。

    3 自定义配置节(1.2,1.3)
    不依赖于.NET提供的配置节,而是使用自定义配置节
    把前两个例子中提供的配置信息组合到一个新的配置节中去,在Web.config中做如下修改。
    设置配置节信息
    <section name="PermissionSettting" type="Configuration.PermissionSetttingSection,Configuration"/>
    定义配置节的具体内容
    <PermissionSettting>
        <Setting  DefaultDaysLate="7" ></Setting>
        <Connections>
             <add name="sql"  connectionString="server=myServer;uid=myuser;password=***;database=MyDB" />
                <add name="oracle" connectionString="server=127.0.0.1;uid=myuser;password=***;database=MyDB"  />
            </Connections>
        </PermissionSettting>
    代码结构图如下
    image 
    Configuration文件是配置节内容的读取方法,Web是测试网站。Configuration文件的类如下图
    image
    如果不理解这些类的设计原由,请查阅MSDN。
    这样做的好处是很明显的,如果项目中有类似的需求,直接把我这个样例代码拷贝到需要的项目中,稍微做修改就可以应用于新的项目。
    我经常会把常用的代码库整理出来,做成可以直接运行演示的项目,在需要的时候就直接拷贝就可以。
    如果是公共类库就添加引用,如果是Html界面,GridView等界面的布局和样式,就直接拷贝,准确方便。

    4  WCF中自定义配置节(1.4,1.5)
    我们知道,有关WCF的配置,都放在system.serviceModel配置节中。
    WCF配置节的信息比较多,不容易记住。有三种办法可以解决这个麻烦
    1) 提前整理好各种情况下的config文件(basicHttpBinding,netTcpBinding等配置节是设置的重点),
    在新建WCF项目时,直接把对应的配置节拷贝到新的配置文件中。
    2) 使用SDK目录中的SvcConfigEditor.exe编辑配置文件,这样会方便很多。
    3) 使用外部文件的方式,在新建项目时,直接拷贝相应的配置文件到对应目录中。
    这种方法着重介绍一下,先看解决方案图
    image 
    如果你对WCF不熟悉,请先运行解决方案文件夹中的1.4方案,该方案是演示WCF技术的样例项目。

    这个例子包含两个技术点,服务器端的WCF配置信息和客户端的WCF配置信息都放在了外部文件中,

    如果不习惯,可以先尝试只把服务器端或客户端的配置放到外部文件中。
    先说服务器端的调用方式
    Ionic.ServiceModel.ServiceHost sh = new Ionic.ServiceModel.ServiceHost(typeof(Service.Hello));
    sh.Open();
    问题的重点就转到Ionic.ServiceModel.ServiceHost 类,我参考了如下的内容
    Reading WCF Configuration from a Custom Location
    我想讲解一下原理,而且准备拷贝一段MSDN的内容上来,最后发现自己怎么说都说不明白。
    如果不太懂,先这样做吧。微软留下的扩展方式,有他的道理,也有说不清道不明的地方。
    再来看看客户端的调用方式
    string config = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WCF.config");
    CustomClientChannel<IHello> channel = new CustomClientChannel<IHello>("WCF",config);
    IHello client = channel.CreateChannel();
    Response.Write(client.SayHello("James "));    
    问题的重点就是CustomClientChannel,我参考如下的内容
    Loading the WCF configuration from different files on the client side
    这样,同时实现了服务端和客户端的WCF配置文件的独立化。如果有新项目,直接配置文件拷贝到新项目的目录下即可,

    减少了修改Web.config出错的可能性,也容易调试。

    最后贴上一张全部项目的解决方案架构图,方便大家理解。
    image
    把这个解法方案保存到你的硬盘里,以后遇到和配置有关的问题,就到这个项目中来看看是否有办法。
    如果没有,尝试去完善这个项目,积累一段时间,就能很熟练的掌握与配置有关的技术。
    随着我们的年纪的增大,我们的记性越来越差。我有一种方法是做一个技术知识数据库,

    集中管理自己的文档,开发技术细节;还有一个办法就是这里提到的,经常做一些可以运行的功能模块。

    解决方案下载 /Files/JamesLi2015/Configuration.zip

  • 相关阅读:
    vuex插件
    axios
    token登录验证
    mysql模糊查询
    Koa2+Mysql搭建简易博客
    正则匹配器
    编码
    Maven学习
    防止重复提交保证幂等的几种解决方案
    策略模式优化if-else
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/1684420.html
Copyright © 2011-2022 走看看