亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

App.config和Web.config配置文件的自定義配置節點

2019-11-15 02:31:09
字體:
來源:轉載
供稿:網友

App.config和Web.config配置文件的自定義配置節點

前言

  昨天修改代碼發現了一個問題,由于自己要在WCF服務接口中添加了一個方法,那么在相應調用的地方進行更新服務就可以了,不料意外發生了,竟然無法更新。左查右查終于發現了問題。App.config配置文件中的配置貌似出現了問題。查找節點發現是如下節點:

  <configSections>    <section name="Test1" type="Demo.Section1,Demo"/>    ..............  </configSections>

我當時也只是看到了下劃波浪線,才猜測是這里的問題,于是我把configSections節點注釋后,重新更新WCF服務,沒想到真的可以更新了,心想這是個什么節點呢,雖然之前自己也見過這個節點,但是從來沒用過,于是趁此機會就進行簡單的學習一下吧,以便之后說不定什么時候就會用到。

  這里我的講解暫時之針對.NET的Web.config文件和App.confg文件,也就是對.Net配置文件自定義節點進行學習記錄。

配置文件優先級

在此簡單的學習一個配置文件的優先級吧,因為自己之前對配置文件接觸的也比較少,沒詳細的進行學習過。

首先在.net提供了一個針對當前機器的配置文件,這個文件是machine.config。所在地址如下圖所示。

然后此文件夾下還存在一個Web.confg的配置文件。

asp.net網站IIS啟動的時候會加載配置文件中的配置信息,然后緩存這些信息,這樣就不必每次去讀取配置信息。在運行過程中asp.net應用程序會監視配置文件的變化情況,一旦編輯了這些配置信息,就會重新讀取這些配置信息并緩存。

1、如果在當前頁面所在目錄下存在web.config文件,查看是否存在所要查找的結點名稱,如果存在返回結果并停止查找。2、如果當前頁面所在目錄下不存在web.config文件或者web.config文件中不存在該結點名,則查找它的上級目錄,直到網站的根目錄。

3、如果網站根目錄下不存在web.config文件或者web.config文件中不存在該節點名則在C:/Windows/Microsoft.NET/Framework/v4.0.30319/Config/web.config文件中查找。(這是我本機的地址,請根據情況進行調整)4、如果在C:/Windows/Microsoft.NET/Framework/v4.0.30319/Config/web.config文件中不存在相應結點,則在C:/Windows/Microsoft.NET/Framework/v4.0.30319/Config/machine.config文件中查找。5、如果仍然沒有找到則返回null。

所以如果我們對某個網站或者某個文件夾有特定要求的配置,可以在相應的文件夾下創建一個web.config文件,覆蓋掉上級文件夾中的web.config文件中的同名配置即可。這些配置信息的尋找只查找一次,以后便被緩存起來供后來的調用。在asp.net應用程序運行過程中,如果web.config文件發生更改就會導致相應的應用程序重新啟動,這時存儲在服務器內存中的用戶會話信息就會丟失(如存儲在內存中的session)。

  所以如果我們對某個網站或者某個文件夾有特定要求的配置,可以在相應的文件夾下創建一個web.config文件,覆蓋掉上級文件夾中的web.config文件中的同名配置即可。這些配置信息的尋找只查找一次,以后便被緩存起來供后來的調用。在asp.net應用程序運行過程中,如果web.config文件發生更改就會導致相應的應用程序重新啟動,這時存儲在服務器內存中的用戶會話信息就會丟失(如存儲在內存中的Session)。一些軟件(如殺毒軟件)每次完成對web.config的訪問時就會修改web.config的訪問時間屬性,也會導致asp.net應用程序的重啟。

常用配置文件節點appSettings和connectionSettings說明

1、<appSettings>節點

<appSettings>節點主要用來存儲asp.net應用程序的配置信息,例如網站上傳文件的類型:

<appSettings>    <!--允許上傳的圖片格式類型-->    <add key="ImageType" value=".jpg;.bmp;.gif;.png;.jpeg"/>    <!--允許上傳的文件類型-->    <add key="FileType" value=".jpg;.bmp;.gif;.png;.jpeg;.pdf;.z

對于<appSettings>節點中的值可以按照key來進行訪問,以下就是一個讀取key值為“FileType”節點值的例子:

string fileType=ConfigurationManager.AppSettings["FileType "];

2、<connectionStrings>節點

<connectionStrings>節點主要用于配置數據庫連接的,我們可以<connectionStrings>節點中增加任意個節點來保存數據庫連接字符串,將來在代碼中通過代碼的方式動態獲取節點的值來實例化數據庫連接對象,這樣一旦部署的時候數據庫連接信息發生變化我們僅需要更改此處的配置即可,而不必因為數據庫連接信息的變化而需要改動程序代碼和重新部署。數據庫鏈接示例如下:

  <connectionStrings>    <add name="OraWord=123456;" providerName="System.Data.OracleClient"/>  </connectionStrings>

在代碼中我們可以這么實例化數據庫連接對象:

///1讀取web.config文件節點配置string ConnectionStringProfile = ConfigurationManager.ConnectionStrings["OraProfileConnString"].ConnectionString;///2實例化OracleConnection對象OracleConnection conn = new OracleConnection(ConnectionStringProfile);

這樣做的好處是一旦開發時所用的數據庫和部署時的數據庫不一致,僅僅需要用記事本之類的文本編輯工具編輯connectionString屬性的值就行了。

自定義節點配置解析

經過查閱資料發現,有些人和我一樣,只用過我上面說的兩個節點,但是如果參數過多,這種做法的缺點也會明顯地暴露出來:appSetting中的配置參數項只能按key名來訪問,不能支持復雜的層次節點也不支持強類型, 而且由于全都只使用這一個集合,你會發現:完全不相干的參數也要放在一起!解決的方法便是使用自定義節點配置來解析。

我們來看一下如何在app.config或者web.config中增加一個自定義的配置節點。 在這篇博客中,我將介紹4種自定義配置節點的方式。

1、第一種情況——Property

配置文件如下,依照屬性的方式處理:

<?xml version="1.0" encoding="utf-8" ?><configuration>  <configSections>    <section name="Test1" type="Demo.Section1,Demo"/>  </configSections>  <Test1 UserName="aehyok" Path="www.49028c.com/aehyok"></Test1></configuration>

自定義一個類,以ConfigurationSection為基類,各個屬性要加上[ConfigurationProperty] ,ConfigurationProperty的構造函數中傳入的name字符串將會用于config文件中,表示各參數的屬性名稱。

屬性的值的讀寫要調用this[],由基類去保存。

為了能使用配置節點能被解析,需要在<configSections>中注冊,代碼如上<section name="Test1" type="Demo.Section1,Demo"/>。

實現代碼如下:

namespace Demo{    public class Section1 : ConfigurationSection    {        [ConfigurationProperty("UserName")]        public string UserName        {            get { return this["UserName"].ToString(); }            set { this["UserName"] = value; }        }        [ConfigurationProperty("Path")]        public string Path        {            get { return this["Path"].ToString(); }            set { this["Path"] = value; }        }    }}

下面將要介紹另三種配置節點雖然復雜一點,但是一些基礎的東西與這個節點是一樣的,所以后面我就不再重復說明了。

2、第二種情況——Element

配置文件如下:

<?xml version="1.0" encoding="utf-8" ?><configuration>  <configSections>    <section name="Test2" type="Demo.Section2,Demo"/>  </configSections>  <Test2>    <Users UserName="aehyok" Password="123456"></Users>  </Test2></configuration>

實現代碼如下:

namespace Demo{    public class Section2 : ConfigurationSection    {        [ConfigurationProperty("Users", IsRequired = true)]        public SectionElement Users        {            get { return (SectionElement)this["Users"]; }        }        public class SectionElement : ConfigurationElement        {            [ConfigurationProperty("UserName", IsRequired = true)]            public string UserName            {                get { return this["UserName"].ToString(); }                set { this["UserName"] = value; }            }            [ConfigurationProperty("Password", IsRequired = true)]            public string Password            {                get { return this["Password"].ToString(); }                set { this["Password"] = value; }            }        }    }}

第二種情況比第一種情況的區別就是,數據類型也是自己定義的,具體的配置屬性寫在ConfigurationElement的繼承類中。

3、第三種情況——CDATA

CDATA可以包含比較長的字符串,且可以包含HTML代碼段,這樣針對特殊字符的存放也比較方便。假如如下配置:

<?xml version="1.0" encoding="utf-8" ?><configuration>  <configSections>    <section name="Test3" type="Demo.Section3,Demo"/>  </configSections>  <Test3>    <T1>      <![CDATA[      Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int output        with encryption ---------加密        as        insert bankMoney (id,userID,sex,Money)        Values(@param1,@param2,@param3, @param4)        select @param5=sum(Money) from bankMoney where userID='Zhangsan'        go      ]]>    </T1>    <T2>      <![CDATA[        <html>        <head>            <title>Test</title>        </head>        <body>            This is Test。        </body>        </html>      ]]>    </T2>  </Test3></configuration>

代碼實現如下:

namespace Demo{    public class Section3 : ConfigurationSection    {        [ConfigurationProperty("T1", IsRequired = true)]        public MyTextElement Command1        {            get { return (MyTextElement)this["T1"]; }        }        [ConfigurationProperty("T2", IsRequired = true)]        public MyTextElement Command2        {            get { return (MyTextElement)this["T2"]; }        }    }    public class MyTextElement : ConfigurationElement    {        protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey)        {            CommandText = reader.ReadElementContentAs(typeof(string), null) as string;        }        protected override bool SerializeElement(XmlWriter writer, bool serializeCollectionKey)        {            if (writer != null)                writer.WriteCDat
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品偷拍一区二区三区在线看| 精品magnet| 国产一区二区精品丝袜| 日本高清不卡在线| 国产免费一区二区三区在线能观看| 欧美丰满少妇xxxxx做受| 日韩中文字幕在线精品| 91av成人在线| 久久免费视频这里只有精品| 国内精品视频久久| 久久精品国产亚洲7777| 亚洲国产欧美一区二区丝袜黑人| 国产日韩在线一区| 日韩成人小视频| 91沈先生在线观看| 欧美性xxxx极品hd欧美风情| 久久精品国产99国产精品澳门| 国产精品精品国产| 亚洲国产精品美女| 日韩国产高清污视频在线观看| 福利一区视频在线观看| 久久精品在线视频| 欧美在线欧美在线| 国产成人综合av| 66m—66摸成人免费视频| 中日韩午夜理伦电影免费| 成人av电影天堂| 一区二区三区www| 国产精品国产福利国产秒拍| www.国产一区| 欧美高清在线视频观看不卡| 亚洲国产精品高清久久久| 欧美午夜精品久久久久久人妖| 久久免费在线观看| 一区二区三区高清国产| 91精品视频网站| 96精品久久久久中文字幕| 亚洲精品有码在线| 69视频在线免费观看| 欧美xxxx综合视频| 在线亚洲欧美视频| 国产v综合v亚洲欧美久久| 欧美激情一二三| 亚洲欧美成人一区二区在线电影| 国产精品自产拍在线观看| 91精品国产91久久| 77777亚洲午夜久久多人| 97精品国产97久久久久久| 亚洲视屏在线播放| 7777精品久久久久久| 国产一区二区丝袜| 日韩欧美中文免费| 欧美不卡视频一区发布| 永久555www成人免费| 97色在线视频观看| 亚洲精品福利在线观看| 欧美成人一区在线| 91久久国产综合久久91精品网站| 成人午夜激情网| 97超级碰碰碰| 777国产偷窥盗摄精品视频| 都市激情亚洲色图| 国产精品视频网站| 欧美亚洲视频在线看网址| 91欧美精品成人综合在线观看| 欧美福利视频网站| 日韩av免费观影| 久久久久久久久久久免费| 午夜精品福利在线观看| 欧美激情女人20p| 97视频在线观看免费高清完整版在线观看| 97精品国产97久久久久久春色| 一本色道久久综合狠狠躁篇的优点| 狠狠躁夜夜躁人人爽天天天天97| 一本一本久久a久久精品牛牛影视| 热99久久精品| 欧美日韩国产综合新一区| 欧美韩日一区二区| 久久久久成人精品| 日韩av电影在线网| 欧美电影在线观看高清| 精品亚洲国产视频| 欧美专区在线观看| 国产成人一区二区三区电影| 日韩精品黄色网| 亚洲黄色有码视频| 91精品一区二区| 欧美激情视频在线观看| 久久综合九色九九| 久久久精品电影| 成人乱人伦精品视频在线观看| 久久久久久久久综合| 奇门遁甲1982国语版免费观看高清| 精品二区三区线观看| 精品久久久999| 国产99久久精品一区二区永久免费| 精品国产一区久久久| 大胆人体色综合| 国产精品自产拍在线观看中文| 色无极亚洲影院| 亚洲综合小说区| 成人日韩av在线| 久久精品国产亚洲| 亚洲天堂av在线播放| 欧美日韩成人免费| 久久成人这里只有精品| 欧美激情精品久久久久久蜜臀| 九九视频这里只有精品| 国产一区二区视频在线观看| 91精品国产自产91精品| 亚洲最大av在线| 国产精品video| 91黑丝高跟在线| 日本午夜在线亚洲.国产| 在线电影欧美日韩一区二区私密| 欧美极品少妇xxxxx| 国产精品7m视频| 国产精品爽爽ⅴa在线观看| 国产精品第2页| 日韩av电影在线网| 欧美美女操人视频| 精品久久久在线观看| 亚洲精品电影网站| 欧美精品videossex88| 欧洲美女7788成人免费视频| 日本精品久久中文字幕佐佐木| 欧美一区二区三区免费观看| 2018国产精品视频| 国产免费一区二区三区在线观看| 国内成人精品一区| 欧美另类极品videosbest最新版本| 久久久久久久久久久91| 欧美成人精品在线视频| 亚洲影院污污.| 欧美在线视频网| 亚洲欧美激情精品一区二区| 欧美人成在线视频| 在线观看久久av| 7m第一福利500精品视频| 亚洲国产天堂久久综合网| 成人免费网站在线观看| 国产精品亚洲аv天堂网| 成人免费网站在线| 中文字幕久精品免费视频| 91精品免费久久久久久久久| 国产美女精品免费电影| 97精品免费视频| 国产精品爱久久久久久久| 国产一区二中文字幕在线看| 国产精品久久久久久一区二区| 国产中文日韩欧美| 777国产偷窥盗摄精品视频| 国产成人avxxxxx在线看| 日韩专区在线观看| 一区二区福利视频| 色在人av网站天堂精品| 91在线网站视频| 欧美精品久久久久久久久| 欧美精品一区二区三区国产精品| 亚洲aa在线观看| 国产美女久久精品| 国产精品久久久久一区二区| 国产亚洲精品成人av久久ww| 亚洲伊人久久大香线蕉av|