昨天读到.NET中关于配置信息的读写,今天有空就动手写几个例子。光看不练,印象不深刻,
直接拷贝书中的例子也没有多大的效果。联系到最近项目中的实际要求,总结一下遇到的问题。
先看代码的文件结构图,下面会有详细的讲解。
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文件中引用配置文件
如图,将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>
代码结构图如下
Configuration文件是配置节内容的读取方法,Web是测试网站。Configuration文件的类如下图
如果不理解这些类的设计原由,请查阅MSDN。
这样做的好处是很明显的,如果项目中有类似的需求,直接把我这个样例代码拷贝到需要的项目中,稍微做修改就可以应用于新的项目。
我经常会把常用的代码库整理出来,做成可以直接运行演示的项目,在需要的时候就直接拷贝就可以。
如果是公共类库就添加引用,如果是Html界面,GridView等界面的布局和样式,就直接拷贝,准确方便。
4 WCF中自定义配置节(1.4,1.5)
我们知道,有关WCF的配置,都放在system.serviceModel配置节中。
WCF配置节的信息比较多,不容易记住。有三种办法可以解决这个麻烦
1) 提前整理好各种情况下的config文件(basicHttpBinding,netTcpBinding等配置节是设置的重点),
在新建WCF项目时,直接把对应的配置节拷贝到新的配置文件中。
2) 使用SDK目录中的SvcConfigEditor.exe编辑配置文件,这样会方便很多。
3) 使用外部文件的方式,在新建项目时,直接拷贝相应的配置文件到对应目录中。
这种方法着重介绍一下,先看解决方案图
如果你对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出错的可能性,也容易调试。
最后贴上一张全部项目的解决方案架构图,方便大家理解。
把这个解法方案保存到你的硬盘里,以后遇到和配置有关的问题,就到这个项目中来看看是否有办法。
如果没有,尝试去完善这个项目,积累一段时间,就能很熟练的掌握与配置有关的技术。
随着我们的年纪的增大,我们的记性越来越差。我有一种方法是做一个技术知识数据库,
集中管理自己的文档,开发技术细节;还有一个办法就是这里提到的,经常做一些可以运行的功能模块。