Accessing Dynamic Properties in ASP.NET using Configuration files

author-image
CIOL Bureau
Updated On
New Update



Accessing Dynamic Properties in ASP

Advertisment

Advertisment

style='font-size:14.0pt;font-family:"Courier New"'>Accessing Dynamic Properties
in ASP.NET using Configuration files

 

 

Introduction:

Many a times, developers feel the need to store properties
in external text files, rather than hard -coding them in the application code. The
advantages of keeping these values in text files outside the application offer
the following benefits:

  • We can change a configuration property without having to
    recompile the code again.
  • These property values can be changed at deployment time.

For e.g. Storing the IP address of an m/c. Storing Locale
specific information.

Dynamic Properties:

Such properties are known as Dynamic properties and are read
from the configuration files at runtime by the application.

Almost all popular platforms/languages have some support for
writing such Configuration files.

For e.g. we have *.ini files in Windows, *.properties files
in Java, web.xml in Servlet Engines

In ASP.NET, configuration information can be easily stored
and retrieved in Web.config files.

Lets look at a simple example of Web.config file.

 

xml style='font-family:"Courier New";color:fuchsia'> version="1.0" encoding style='font-family:"Courier New";color:blue'>="utf-8" style='font-family:"Courier New";color:fuchsia'> ?>

 

<configuration style='font-family:"Courier New";color:blue'>>

 

style='font-family:"Courier New";color:blue'><system.web>

             

style='font-family:"Courier New";color:blue'> style='font-family:"Courier New";color:maroon'>system.web style='font-family:"Courier New";color:blue'>>

 

style='font-family:"Courier New";background:silver'>

              />

              value="Naren" />

style='font-family:"Courier New";background:silver'>

 

configuration style='font-family:"Courier New";color:blue'>>

All the configuration information we need can be given as key-value
pairs
as shown above.

The tag is a child element of the root
element, i.e. tag.

Now this configuration file can easily be accessed in code
with just a single line of code.

String WhoIsCool = ConfigurationSettings.AppSettings<"CoolGeek
">;

The first time a configuration dynamic property is accessed,
the application reads the xml file and stores all the key-value pairs in a hashtable.
So the first time will consume a bit more time. This performance impact will be
very minor and often unnoticeable. For all future access, the values will be
retrieved from the in-memory hashtable, so the access is faster.

The advantage of this is that you need now worry about where
to place the code for accessing the dynamic properties. You can add the above
method call anywhere in your code.

Creating Custom XML configuration tags

Sometimes we may feel the need to have more flexible and
richer configuration settings, for e.g. the ability to define your own xml tags
to build configurable information.

For e.g. we can have a section as follows in our
configuration file consisting of custom XML tags.

  

      Naren

      91160

      Cool
Geek

 Â

To access this section, we need to create our own custom configuration
section handler. The handler must be a .NET Framework class that implements the
IConfigurationSectionHandler interface. The section handler interprets
and processes the settings defined in XML tags within a specific portion of a “Web.config”
file and returns an appropriate configuration object based on the configuration
settings. The configuration object that the handler class returns can be any
data structure; it is not limited to any base configuration class or
configuration format. So we can even return a custom object populated with all
the values in the xml file.

The following steps are to be followed to write custom
configuration sections in Web.config

  • Create a custom section as shown below in Web.config and
    declare that configuration section using a element.

 

Â

/>

 

  

      Naren

      91160

      Cool
Geek

  

 

The “configSections” tag has “section” tags which indicate
the custom sections present in the Web.config. Each “section” tag has two
attributes:

  1. name:  The name of the custom section element.
  2. type:     The name of the SectionHandler followed by the
    name of the assembly which contains the SectionHandler.

  • Create a custom Model object which would store the data
    from the config file. Here we would create a SchoolStudent.cs file. Here’s
    the code:

SchoolStudent.cs

 

namespace Demo

{

      style='color:gray'>/// style='color:gray'>

      style='color:gray'>/// The obejct into which
the configuration info will be stored.

      style='color:gray'>/// style='color:gray'>

      style='color:blue'>public class SchoolStudent

      {

            style='color:blue'>public string Name                  =
null;

            style='color:blue'>public string RollNo          =
null;

            style='color:blue'>public string
Description     = null;

 

            style='color:blue'>public override style='color:blue'>string ToString()

            {

style='font-family:"Courier New";color:blue'>return style='font-family:"Courier New"'> "Name1::"+Name +" Rollno::"
+ RollNo + " Desc::"+ Description;

            }

   } style='color:green'>//end of SchoolStudent

}

  • Code the ConfigurationSectionHandler. Our ConfigurationSectionHandler
    must implement the IConfigurationSectionHandler
    interface and override the “Create” method.

The signature of the method is as
given below:

style='font-family:"Courier New";color:blue'>public style='font-family:"Courier New"'> object
Create(object parent,object
configContext, XmlNode section)

style='font-family:"Courier New"'> 

      This
method is passed 3 parameters by the ASP.NET runtime.

·
parent

The configuration settings in a corresponding parent configuration
section.

·
configContext

An href="ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfsystemwebconfigurationhttpconfigurationcontextclasstopic.htm">HttpConfigurationContext
when Create is called from the ASP.NET configuration system. Otherwise,
this parameter is reserved and is a null reference (Nothing in Visual
Basic).

·
section

The href="ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfsystemxmlxmlnodeclasstopic.htm">XmlNode
that contains the configuration information from the configuration file. Provides
direct access to the XML contents of the configuration section.

Here the last
parameter is of great use to us. It directly gives us the XmlNode object for
the root element of our section. So we can easily get access to all the child
nodes and it’s contents. See the code below to see how simple it is to retrieve
information from XmlElements.    

style='font-family:"Courier New"'> 

 SchoolSectionHandler.cs

 

namespace Demo

{

      style='color:gray'>/// style='color:gray'>

      style='color:gray'>/// Summary description for
SchoolSectionHandler.

      style='color:gray'>/// style='color:gray'>

      style='color:blue'>public class SchoolSectionHandler:IConfigurationSectionHandler

      {

            style='color:blue'>public const style='color:blue'>string SECTION_NAME="school";

 

style='font-family:"Courier New";color:green'>//implementation of the Create
method in //IConfigurationSectionHandler interface.

style='font-family:"Courier New";color:blue'>public style='font-family:"Courier New"'> object
Create(object parent,object
configContext, XmlNode section)

            {

                  SchoolStudent
Student = new SchoolStudent();

                  style='color:blue'>try

                  {

                        XmlNode
StudentElement = section<"student">;

                       

                        XmlElement
Element = StudentElement<"name">;

                        Student.Name
= Element.InnerText;

                       

                        Element
= StudentElement<"rollno">;

                        Student.RollNo
= Element.InnerText;

 

                        Element
= StudentElement<"description">; 

                        Student.Description
= Element.InnerText;

                  }

                  style='color:blue'>catch (Exception ex)

                  {

style='font-family:"Courier New";color:blue'>throw style='font-family:"Courier New"'> new ConfigurationException("Error
while parsing configuration section.",ex,section);

                  }

          Â

                  style='color:blue'>return (object)Student;

            }

           

            style='color:gray'>/// style='color:gray'>

style='font-family:"Courier New";color:gray'>/// The method which will return the populated ///SchoolStudent
object.

            style='color:gray'>/// style='color:gray'>

            style='color:gray'>/// style='color:gray'>The School
Student object

            style='color:blue'>public static SchoolStudent
getStudentInfo()

            {

style='font-family:"Courier New";color:blue'>return style='font-family:"Courier New"'> (SchoolStudent) ConfigurationSettings.GetConfig(SECTION_NAME);

            }

 

      } style='color:green'>//end of SchoolSectionHandler

}         

The code above, retrieves the information from the XML and stores
it in the SchoolStudent object.

The signature of the “Create” method is defined to return an
“object” type, hence we need to type cast the return value into a “SchoolStudent”
object.

We can get the configuration setting of the custom section
by calling:

style='font-family:"Courier New"'>object obj = ConfigurationSettings.GetConfig(SECTION_NAME);

where SECTION_NAME is the string containing the “section” xml
element name.

 

We can now call the static method
getStudentInfo() of SchoolSectionHandler
class
inside our “code-behind” aspx.cs file.

Here’s a snippet of a
code-behind file:

private style='color:blue'>void Page_Load(object
sender, System.EventArgs e)

{

style='font-family:"Courier New"'>SchoolStudent Student = SchoolSectionHandler.getStudentInfo();

      Trace.Write(">>>
"+Student);

}

Enable the Trace on the ASPX page and see the output on the
browser. It would be something like this:

Trace Information

style='width:100.0%;border-collapse:collapse'>

Category

Message

From First(s)

From Last(s)

aspx.page

Begin Init

aspx.page

End Init

0.001996

0.001996

>>>
Name1::Naren Rollno::91160 Desc::Cool Geek

0.013930

0.011934

aspx.page

Begin PreRender

0.014082

0.000152

aspx.page

End PreRender

0.014136

0.000054

aspx.page

Begin SaveViewState

0.014948

0.000812

aspx.page

End SaveViewState

0.016565

0.001617

aspx.page

Begin Render

0.016650

0.000085

aspx.page

End Render

0.075696

0.059045

Conclusion:

As we have seen it is very simple to add and retrieve
configuration information from Web.config file. The most wonderful thing about
keeping dynamic properties in Web.config is that you can change them even when
the application is running and the new values will automatically be taken for
the next request. So no need to restart or unload the application.

Thanks,

naren

tech-news