Saturday, 28 December 2013

ViewState with example in asp.net C#

ViewState with example in asp.net C#
 
ViewState:- The web is stateless but in asp.net, the state of page is maintained in the page itself automatically. How? The values are encrypted and saved in hidden controls this is done automatically by the asp.net. This can be switched off/on manually for a single control.
 
Advantages :- Have a manually manage refreshing the page fields after submit.
 
Disadvantages:- Send additional data to the browser.
 
Example:-  We can store any thing in the viewstate manually and access it in same page. In this example we are saving the data table in view state and access it later in page.

Step1:- We  get the data table from database in page load event and store it in view state.


protected void Page_Load(object sender, EventArgs e)
{
        string str = System.Configuration.ConfigurationManager.AppSettings ["keyString"];
        SqlConnection con = new SqlConnection(str);
        SqlDataAdapter adap = new SqlDataAdapter("select * from product", con);
       DataTable dt = new DataTable();
       adap.Fill(dt);
       ViewState["TempTable"] = dt;
}

 
Step2:-Now we access the table from viewstate on button click event and bind in gridview.

 
    protected void Button1_Click(object sender, EventArgs e)
    {
        GridView1.DataSource = (DataTable)ViewState["TempTable"];
        GridView1.DataBind();
    }

 
Complete Solution:-
Your Aspx page:

 
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    <asp:GridView ID="GridView1" runat="server">
    </asp:GridView>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    
    </form>
</body>
</html>

 
Now your aspx.cs page

 
using System.Web.UI;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string str = System.Configuration.ConfigurationManager.AppSettings["keyString"];
        SqlConnection con = new SqlConnection(str);
        SqlDataAdapter adap = new SqlDataAdapter("select * from product", con);
       DataTable dt = new DataTable();
       adap.Fill(dt);
       ViewState["TempTable"] = dt;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        GridView1.DataSource = (DataTable)ViewState["TempTable"];
        GridView1.DataBind();
    }
}

Monday, 23 December 2013

Increase Performance in an asp.net Application

Increase Performance in an asp.net Application

 For every enterprise level application the key to make that application successful is the responsiveness of the application. ASP.NET offers a great deal of the features for developing web based enterprise applications, but sometimes, due to adhering to best practices, the application is not as fast as it should be. Here are the some useful suggestions to make your application super fast.

  1. Always set debug=”false” in web.config production environment.
  2. Always set trace=”false” in web.config production environment
  3. If you are using asp.net 2.0 or higher version then always use precompiled version of your code and also prefer web application project over website. If you are using website then always publish it and then upload that precompiled version of your site in production environment.
  4. Always compile your project in Release Mode before uploading application to production environment.
  5. Decrease your html kb as much as you can for that use tables less html using div’s and if possible then do not give big name to your control it will increase your html kb as asp.net uses client Id to differentiate all the controls. If you are creating custom controls then you can overwrite your clientid and uniqueId.
  6. Use cache api as much as possible it will decrease your server roundtrip and boost application performance. ASP.NET 2.0 or higher version provides functionality called sqlcachedependancy for your database caching. It will validate cache with your database operation like insert,update and delete and if not possible with it then use the file base caching.
  7. Remove blank spaces from your html it will increase your kb. You can use regular expression to remove white spaces. I will post the code for removing white spaces next posts.
  8. For asp.net 2.0 and higher version use master pages. It will increase your performance.
  9. Prefer database reader over dataset unless and until you have specific reason to use database.
  10. Use ADO.NET asynchronous calls for ado.net methods. asp.net 2.0 or higher version is supporting your performance. If you are using same procedure or command multiple time then use ADO.NET Prepare command it will increase your performance.
  11. Do IIS performance tuning as per your requirement.
  12. Disable view state for your controls if possible. If you are using asp.net 2.0 or higher version then use asp.net control state instead of view state. Store view state in session or database by overriding the default methods for storing view state.
  13. User Server.Transfer instead of response.redirect.
  14. Always use inproc session state if possible.
  15. Use Ajax for your application wisely. Lots of Ajax calls for a page will also decrease your performance.
  16. Measure your application performance with tools like redgate profiler,firebug and whyslovw from yahoo.
  17. User System.Text.StringBuilder for string concatenation its 4 times more faster then the normal strings.
  18. Right JavaScript in .Js files and place it as bottom of the application.
  19. Use Separate CSS files for styling of application.
  20. User database paging over normal paging while displaying huge amount of data.
  21. Call web service from java script instead of server side. Use asynchronous calls to call a web method from web service.

Tips to improve asp.net application performance


  • Deploy with ‘Release' build and ensure ‘Debug' is set to false in the web.config
Make sure you use Release Build mode and not Debug Build when you deploy your site to production. When you create the application, by default the attribute ‘Debug' is set to "true" in the web.config which is very useful while developing. However, when you are deploying your application, always set it to "false".  <compilation debug="false" ... />
  • Disable ViewState if you don’t need it
The ViewState is not needed when the following conditions are true: 
  a)The page does not post back (if it is used only to display data, only output page)
  b)The events of the server controls are not handled
  c)The controls are repopulated on each page refresh
  • Consider using caching
Caching avoids redundant work. If you use caching properly, you can avoid unnecessary database lookups and other expensive operations.ASP.NET allows you to cache entire pages, fragment of pages or controls. You can cache also variable data by specifying the parameters that the data depends. By using caching you help ASP.NET engine to return data for repeated request for the same page much faster.
  • Consider using HTTP compression
HTTP compression is supported by most modern browsers and by IIS. HTTP Compression is a define a way to compress content transferred from Web servers across the World Wide Web to browsers. The impact of compression is that the number of transmitted bytes is reduced and thus a higher performance is gained.
  • Consider disabling tracing
Before you deploy your application, disable tracing because it is not recommended to turn it on while the application is running in production. Tracing may cause performance issues.
<configuration> 
     <system.web>                   
          <trace enabled="false" pageOutput="false" /> 
     </system.web>
</configuration>
  • Consider using paging for large result sets
Paging large query result sets can significantly improve the performance of an application. The paging can be done at the SQL procedure level this will reduces the back-end work on the database, it be done at the server level to reduce the size of data that is sent to the client and that will be rendered as Html content.
  • Use 'using' statment to dispose resources
The using statement defines a scope at the end of which an object will be disposed even if an exception is thrown, please note that the object that you are trying to dispose should implement 'System.IDisposable'.The following code fragment demonstrates this.   using (SqlConnection cn = new SqlConnection(connectionString))
{
    using (SqlCommand cm = new SqlCommand(commandString, cn))
    {
        cn.Open();
        cm.ExecuteNonQuery();
    }
}
 
  • Stored Procedures
Stored procedures provide improved performance to your asp.net application. When you develop stored procedures, keep the following recommendations in mind:  
·        
Use Set NOCOUNT ON in stored procedures, if you turn on the NOCOUNT option, stored procedures will not return the row-count information to the client, and this will prevent SQL Server from sending the DONE_IN_PROC message for each statement in the stored procedure.·         Do not use the sp_ prefix for custom stored procedures, Microsoft does not recommend to use the prefix "sp_" in the user-created stored procedure name, because SQL Server always looks for a stored procedure beginning with "sp_" in the master database.
 
  • String Management
Use the += operator when the number of appends is known.
Use the StringBuilder object when the number of appends is unknown.  

  • Consider using DTO pattern
In some cases to satisfy a single client request it require making multiple calls to the remote interface, so instead of doing multiple calls consider using Data Transfer Object (DTO) that holds all the data required by the remote call in one single object.
  • Consider using Server.Transfer instead of Response.Redirect
Both cause a new page to be processed, but the interaction between the client and server is different in each situation. Server.Transfer acts as an efficient replacement for the Response.Redirect method. Response.Redirect specifies to the browser to request a different page. Because a redirect forces a new page request, the browser makes two requests to the Web server, so the Web server handles an extra request. IIS 5.0 introduced a new function, Server.Transfer, which transfers execution to a different ASP page on the server. This avoids the extra request, resulting in better overall system performance

 

How IIS Process ASP.NET Request

How IIS Process ASP.NET Request

http://www.dotnetfunda.com/articles/show/821/beginners-guide-how-iis-process-aspnet-request

Introduction
When request come from client to the server a lot of operation is performed before sending response to the client. This is all about how IIS Process the request.  Here I am not going to describe the Page Life Cycle and there events, this article is all about the operation of IIS Level.  Before we start with the actual details, let’s start from the beginning so that each and everyone understand it's details easily.  Please provide your valuable feedback and suggestion to improve this article.

What is Web Server ?
When we run our ASP.NET Web Application from visual studio IDE, VS Integrated ASP.NET Engine is responsible to execute all kind of asp.net requests and responses.  The process name is "WebDev.WebServer.Exe" which actually takw care of all request and response of an web application which is running from Visual Studio IDE.
Now, the name “Web Server” come into picture when we want to host the application on a centralized location and wanted to access from many locations. Web server is responsible for handle all the requests that are coming from clients, process them and provide the responses.
What is IIS ?
IIS (Internet Information Server) is one of the most powerful web servers from Microsoft that is used to host your ASP.NET Web application. IIS has it's own ASP.NET Process Engine  to handle the ASP.NET request. So, when a request comes from client to server, IIS takes that request and  process it and send response back to clients.
Request Processing :

Hope, till now it’s clear to you that what is Web server and IIS is and what is the use of them. Now let’s have a look how they do things internally. Before we move ahead, you have to know about two main concepts
1.    Worker Process
2.    Application Pool

Worker Process:  Worker Process (w3wp.exe) runs the ASP.Net application in IIS. This process is responsible to manage all the request and response that are coming from client system.  All the ASP.Net functionality runs under the scope of worker process.  When a request comes to the server from a client worker process is responsible to generate the request and response. In a single word we can say worker process is the heart of ASP.NET Web Application which runs on IIS.

Application Pool:  Application pool is the container of worker process.  Application pools is used to separate sets of IIS worker processes that share the same configuration.  Application pools enables a better security, reliability, and availability for any web application.  The worker process serves as the process boundary that separates each application pool so that when one worker process or application is having an issue or recycles, other applications or worker processes are not affected. This makes sure that a particular web application doesn't not impact other web application as they they are configured into different application pools.

Application Pool with multiple worker process is called “Web Garden”.

Now, I have covered all the basic stuff like Web server, Application Pool, Worker process. Now let’s have look how IIS process the request when a new request comes up from client.

If we look into the IIS 6.0 Architecture, we can divided them into Two Layer

1.    Kernel Mode
2.    User Mode
Now, Kernel mode is introduced with IIS 6.0, which contains the HTTP.SYS.  So whenever a request comes from Client to Server, it will hit HTTP.SYS First.

Now, HTTP.SYS is Responsible for pass the request to particular Application pool. Now here is one question, How HTTP.SYS comes to know where to send the request?  This is not a random pickup. Whenever we creates a new Application Pool, the ID of the Application Pool is being generated and it’s registered with the HTTP.SYS. So whenever HTTP.SYS Received the request from any web application, it checks for the Application Pool and based on the application pool it send the request.

So, this was the first steps of IIS Request Processing.

Till now, Client Requested for some information and request came to the Kernel level of IIS means at HTTP.SYS. HTTP.SYS has been identified the name of the application pool where to send. Now, let’s see how this request moves from HTTP.SYS to Application Pool.
In User Level of IIS, we have Web Admin Services (WAS) which takes the request from HTTP.SYS and pass it to the respective application pool.

When Application pool receive the request, it simply pass the request to worker process (w3wp.exe) . The worker process “w3wp.exe” looks up the URL of the request in order to load the correct ISAPI extension. ISAPI extensions are the IIS way to handle requests for different resources. Once ASP.NET is installed, it installs its own ISAPI extension (aspnet_isapi.dll) and adds the mapping into IIS.  

Note : Sometimes if we install IIS after installing asp.net, we need to register the extension with IIS using aspnet_regiis command.

When Worker process loads the aspnet_isapi.dll, it start an HTTPRuntime, which is the entry point of an application. HTTPRuntime is a class which calls the ProcessRequest method to start Processing.


When this methods called, a new instance of HTTPContext is been created.  Which is accessible using HTTPContext.Current  Properties. This object still remains alive during life time of object request.  Using HttpContext.Current we can access some other objects like Request, Response, Session etc.

After that HttpRuntime load an HttpApplication object with the help of  HttpApplicationFactory class.. Each and every request should pass through the corresponding HTTPModule to reach to HTTPHandler, this list of module are configured by the HTTPApplication.

Now, the concept comes called “HTTPPipeline”. It is called a pipeline because it contains a set of HttpModules ( For Both Web.config and Machine.config level) that intercept the request on its way to the HttpHandler. HTTPModules are classes that have access to the incoming request. We can also create our own HTTPModule if we need to handle anything during upcoming request and response.

HTTP Handlers are the endpoints in the HTTP pipeline. All request that are passing through the HTTPModule should reached to HTTPHandler.  Then  HTTP Handler  generates the output for the requested resource. So, when we requesting for any aspx web pages,   it returns the corresponding HTML output.
All the request now passes from  httpModule to  respective HTTPHandler then method and the ASP.NET Page life cycle starts.  This ends the IIS Request processing and start the ASP.NET Page Lifecycle.
Conclusion
When client request for some information from a web server, request first reaches to HTTP.SYS of IIS. HTTP.SYS then send the request to respective  Application Pool. Application Pool then forward the request to worker process to load the ISAPI Extension which will create an HTTPRuntime Object to Process the request via HTTPModule and HTTPHanlder. After that the ASP.NET Page LifeCycle events starts.
This was just overview of IIS Request Processing to let Beginner’s know how the request get processed in backend.  If you want to learn in details please check the link for Reference and further Study section.

 

Exploring IIS 6.0 With ASP.NET

Exploring IIS 6.0 With ASP.NET

http://www.codeproject.com/Articles/42724/Beginner-s-Guide-Exploring-IIS-6-0-With-ASP-NET 

Introduction

In the past, I have written a few articles for beginners and had got a very good response from all readers. This time I have planned to write an article on IIS 6.0 and Integration of IIS with ASP.NET. I have worked on IIS 5.1, IIS 6.0, and IIS 7.0. Though the purpose of all IIS servers are the same, they are very different in their architecture and use. Don't worry, I am not going to explain the differences of those three versions of IIS. The purpose of this article is completely different. While answering in the ASP.NET forum, I found many questions on deploying websites, the security settings of IIS, different authentication types, Application Pool, recycling of application pool, etc. This is an "All in One" article for IIS. This will help beginners know what IIS is, how to install IIS, how to deploy sites on IIS, create an Application Pool, web garden, etc. This article is all about IIS 6.0. If anybody is interested in IIS 7.0, please read the article Deploying ASP.NET Websites on IIS 7.0. Please give your valuable suggestions and feedback to improve this article.

What is a Web Server

Visual Studio has its own ASP.NET engine which is responsible for running your web application so you don't have any problems running an ASP.NET application from the VS IDE. When you want to host your site for others to access, the concept of a "Web Server" comes into picture. A web server is responsible for providing a response to requests that come from clients. So when multiple users come in, multiple requests also come in and the web server will have a response for each of them. IIS (Internet Information Server) is one of the most powerful web servers from Microsoft that is used to host ASP.NET web applications. IIS has its own ASP.NET Process to handle ASP.NET requests. If you look at this picture:
Application Pool
IIS Server Overview
The first client will make a request to the web server (IIS), the web server checks the request and will pass the request to the ASP.NET Process (don't get confused here, I have explained the details), the ASP.NET process engine will process the request and pass the response to the client via the web server. One of the major roles of IIS is handling each and every request. Don't worry, I have explained each and everything in more detail later. So far I hope it is clear why we are using a web server.

Introduction to IIS

IIS 6.0 provides a redesigned World Wide Web Publishing Service architecture that can help you achieve better performance, reliability, scalability, and security for your web sites. In this section, I have described an overview of IIS and an installation guide for IIS 6.0.

Overview of IIS

Internet Information Server is one of the most powerful web servers provided by Microsoft that is able to host and run your web applications. IIS supports the following protocols: FTP, FTPS, SMTP, NNTP, HTTP/HTTPS. We can host our web sites on IIS, we can use it as an FTP site also. For more information, click here.

IIS Version in Different OSs

Below is a list of IIS versions that support the following Oerating Systems:
Operating System IIS Version
Windows Server 2008 IIS 7.0
Windows Vista - Home Premium/ Ultimate IIS 7.0
Windows Server 2003 IIS 6.0
Windows XP Professional IIS 5.1
Windows 2000 Server IIS 5.0 IIS 5.0

How to Install IIS 6.0

Installation of IIS is very similar to installing any other system application from the Control Panel. We have to start navigation from Control Panel > Add/Remove Programs, then select Add/Remove Windows Component. Follow the screen given below.
Installation of IIS
IIS installation
Select "Application Server" from the checkbox list. This will open a new window, select IIS, and click on OK.
Installation of IIS
IIS installation selection
This will initiate IIS installation. The OS will show a continuous progress bar during installation and will show a final message after installation is complete.
Installation of IIS
IIS installation progress
Note: During the installation period, it may ask for some OS files. You need to provide the paths for them. After successful installation of IIS, go to Start > Run > Inetmgr to launch IIS. The below screen will appear, which indicates that IIS has been successfully installed in your system.
IIS Installation
IIS installed successfully

IIS 6.0 Process Model and Request Processing

Before starting with a virtual directory and Application Pool and all other stuff, let us have a quick look into the IIS 6.0 Process module and IIS request processing. This topic is a huge one. Here I am just giving you an overview.
We can divide the whole architecture into two layers.
  • Kernel Mode
    • HTTP.SYS
  • User Mode
    • Web Admin Service
    • Virtual Directory
    • Application Pool
Process1.JPG
IIS 6.0 Process module
As per the above diagram, IIS has two modes, Kernel and User. HTTP.SYS is the heart of kernel mode which accepts raw requests from the client and pass it to a particular application pool. Below are the steps of IIS request processing.
  1. Client requests for a page from the browser by hitting the site URL.
  2. Request comes to kernel level. HTTP.SYS catches the requests and creates a separate queue for each and every application pool.
  3. Note: Whenever we create an application pool, IIS automatically registers the pool with HTTP.SYS to identify it during request processing.
    Then HTTP.SYS forwards the request to the Application Pool.
  4. A request coming to the application pool means the worker process (w3wp.exe) starts action by loading the ISAPI Filter.
  5. Based on the requested resource, w3wp.exe loads "aspnet_isapi.dll" for an APSX page and starts an HTTPRuntime which is the entry point of an application.
  6. Then the HttpRuntime.ProcessRequest method signals the start of processing.
  7. The HttpContext object represents the context of the currently active request, as it contains references to objects you can access during the request lifetime, such as Request, Response, Application, Server, and Cache.
  8. The HttpRuntime creates a pool of HttpApplication objects.
  9. The request passes through the HTTP Pipeline.
  10. HTTP Modules are executed against the request until the request hits the ASP.NET page HTTP Handler.
  11. Once the request leaves the HTTP Pipeline, the Page life cycle starts.
If you want to know the details of IIS request processing, I will suggest you read the article ASP.NET Internals: Request Architecture.

Deploying Your Web Sites on IIS

In this section, I discuss how to host a site on IIS, how to create a virtual directory, configure a virtual directory, etc. Let's start with virtual directory creation.

Creating a Virtual Directory

There are various way to host a web application on IIS. Visual Studio has some inbuilt features to host and create a virtual directory on IIS directly. Here is one of my articles on hosting a site on IIS from Visual Studio. But in this section, Idiscuss the basic steps for creating a virtual directory.
First, right click on Default web sites > New > Virtual Directory.
IIS Installation
Virtual directory creation
By selecting "Virtual Directory...", the virtual directory creation wizard will start. Click on "Next".
IIS Installation
Virtual directory creation
Give the "Alias" name and proceed for "Next". The alias name is your virtual directory name.
IIS Installation
Virtual directory creation
As its name implies, a "virtual directory" does not contain any physical file. We need to define the physical file path that it will refer to. We have to browse the physical path over here.
IIS Installation
Virtual directory creation
Now based on your requirements, you can select the check boxes and click on "Next". Generally, we select only the "Read" option.
IIS Installation
Virtual directory creation: Permission settings
Below is a list of permissions that we can use:
  • Read: It is the most basic and is mandatory to access webpages of your application.
  • Run Scripts: It is required for ASPX pages, not for static HTML pages because ASPX pages need more permissions so they could conceivably perform operations.
  • Execute: This allows the user to run an ordinary executable file or CGI application. This can be a security risk so only allow when it is really needed.
  • Write: It allows to add, modify, or remove files from the web server. This should never be allowed.
  • Browse: This allows one to retrieve a full list of files in a virtual directory even if the contents of the files are restricted. It is generally disabled.
You are done! The virtual directory has been created successfully. You will get a final message. Click on "Finish" to close the window and move forward.
IIS Installation
Virtual directory creation: Finish
There are other alternative options that you can use for creating a virtual directory.
  1. Copy the physical directory to the wwwroot folder.
  2. Physical Folder Properties > Web Sharing.

Configure Virtual Directory

The items listed below are very important for the configuration of any web application.
  • Virtual Directory
  • Documents
  • Documents
  • ASP.NET
  • Directory Security
  • Custom Errors
I have explained each of them step by step. Apart from them, a Virtual Directory can have settings like BITS Server Extension, HTTP Header, etc. I haven't covered those in this article. Let us start with the "Virtual Directory" tab.

Virtual Directory

This is the most important configuration section for a virtual directory. To open this tab, we need to select the newly created virtual directory.
IIS Installation
Virtual directory configuration
Right click on it > Properties. The below screen will come up:
IIS Installation
Virtual directory properties
Here we can change the local path (physical path). Before looking into other stuff, first look into the "Application Settings" section. It seems the application name is disabled. So first we need to click the "Create" button, which will enable the rest of the settings. Check the below image.
IIS Installation
Virtual directory creation
Here we can change the execution setting and application pool name. Choosing "None" for Execute Permission will restrict the access to the web site. Now we will move to the "Documents" tab.

Documents

The Documents tab is used to set the default page of your web application. We can add or remove the page name in this section. To configure, we have to move to the "Documents" tab.
IIS Installation
Virtual directory creation
This is useful when you want to access the site directly with the virtual directory name. For example, if your virtual directory name is "mywebsite" and your home page name is "home.aspx", then you can access the page as follows:
http://<ip>/mywebsite/home.aspx
but if you define home.aspx in the Documents section, you need to only use this at the address bar to access the site:
http://<ip>/mywebsite

ASP.NET

If IIS is registered with multiple .NET Framework versions, the ASP.NET version dropdown list shows all of them. But based on the application, we need to change the framework version. E.g.: If our application was developed in .NET 2.0, then the version should be 2.0.X.X.
IIS Installation
ASP.NET version selection
Tip: If .NET Framework is already installed in your system when you are installing IIS, then ASP.NET will not be registered with IIS. So if you host an application on IIS, it will not work. To register IIS with the ASP.NET version, you need to run the aspnet_regiis -i command from the command prompt. This will automatically register the .NET Framework with your IIS.
For more info, please read this.

Directory Security

Directory security enables all kinds of security access for your web application. For directory, we need to move to the "Directory Security" tab.
IIS Installation
Directory security settings
Click on the "Edit" button to modify the directory security settings. After clicking on the Edit button, the below screen will come up.
IIS Installation
Directory security settings
Below are the commonly used IIS security settings:
  • Anonymous
  • Integrated Windows Authentication
  • Basic Authentication
  • Digest Authentication
Anonymous
Anonymous authentication means the site is accessible to all. This is the default authentication mode for any site that is hosted on IIS, and it runs under the "IUSR_[ServerName]" account. We can change it by clicking on the "Browse" button.
Integrated Windows Authentication
This authentication mode is generally used for Intranet sites. Users are authenticated from the Active Directory. Integrated Windows authentication is also known as NTLM authentication. If browser settings automatically login for trusted sites for Windows authentication then the site will be logged in automatically with the Windows user credentials.
Basic Authentication
This is supported by all browsers and is a part of the HTTP standard. This shows a login dialog control which accepts the user name and password. The user ID and password are passed to IIS to authenticate the user from the Windows credentials.
Digest Authentication
The disadvantages of Basic authentication mode is that it sends a password as plain text. Digest authentication does almost the same thing as basic authentication but it sends the "hash" of the password rather than sending plain text.
Integrated Windows, Basic Authentication, and Digest Authentication use Active Directory to authenticate the user.
Note: There are many things related with IIS and ASP.NET Security configuration. I am not covering all these in detail. I am just giving a brief overview so that you are comfortable with all this stuff.
For configuring SSL, please read the reference link that I have provided in the References section.

Custom Errors

The Custom Errors tab allows us to specify the error page that will be displayed for any specific type of HTTP Error.
IIS Installation
Directory security settings
We can also customize the setting at our application level by configuring the web.config settings or changing the htm file path by clicking on the "Edit" button.
This is all about the basic overview of creation of virtual directories and setting up. Hope you are now comfortable with all this stuff.

Application Pool

Application pool is the heart of a website. An Application Pool can contain multiple web sites. Application pools are used to separate sets of IIS worker processes that share the same configuration. Application pools enable us to isolate our web application for better security, reliability, and availability. The worker process serves as the process boundary that separates each application pool so that when a worker process or application is having an issue or recycles, other applications or worker processes are not affected.
Application Pool
Application pool - IIS
Generally we do it in our production environment. The main advantages of using an application pool is the isolation of worker processes to differentiate sites and we can customize the configuration for each application to achieve a certain level of performance. The maximum number of application pools that is supported by IIS is 2000.
In this section, I have discussed about the creation of application pools, application pool settings, and assigning an application pool to a web site.

How to Create an Application Pool?

Application pool creation in IIS 6.0 is a very simple task. There are two different ways by which we can create an application pool. There is a pre-defined application pool available in IIS 6.0, called "DefaultApplicationPool". Below are the two ways to create an application pool:
  • Create New Application Pool
  • Create From Existing Configuration File

Create a New Application Pool

First of all, we need to open the IIS Configuration Manager. Then right click on Application Pool and go to New > Application Pool.
Application Pool Creation
Create new application pool
The below screen will appear, where we need to mention the application pool name.
Application Pool Creation
New application pool name
When we create a new application pool, we can use the default application setting for it. The selection of "Default Settings" means by default the application pool setting will be the same as the IIS default settings. If we want to use the configuration of an existing application pool, we need to select the section option "Use existing application pool as template". Selecting this option will enable the application pool name dropdown.
Application Pool Creation
Application pool template selection
If we select an existing application pool as a template, the newly created application pool should have the same configuration of the template application pool. This reduces the time for application pool configuration.
That is all about creating a new application pool. Now let us have a look at the creation of an application pool from an existing XML configuration file.

Create From Existing Configuration File

We can save the configuration of an application pool into an XML file and create a new application pool from that. This is very useful during the configuration of an application pool in a Web Farm where you have multiple web servers and you need to configure the application pool for each and every server. When you are running your web application on a Load Balancer, you need to uniquely configure your application pool.
So first of all, you need to save the application pool configuration in a server. Check the below image for details.
Application Pool Creation
Application pool template selection
During this operation, we can set the password for the configuration file which will be asked during the import of the application pool on another server. When we click on "Save Configuration to a file", the below screen will appear.
Application Pool Creation
Save configuration as XML file
Where we need to provide the file name and location. If we want, we can set a password to encrypt the XML file. Below is a part of that XML:
Location ="inherited:/LM/W3SVC/AppPools/StateServerAppPool"
AdminACL="49634462f0000000a4000000400b1237aecdc1b1c110e38d00"
AllowKeepAlive="TRUE"
AnonymousUserName="IUSR_LocalSystem"
AnonymousUserPass="496344627000000024d680000000076c20200000000"
AppAllowClientDebug="FALSE"
AppAllowDebugging="FALSE"
AppPoolId="DefaultAppPool"
AppPoolIdentityType="2"
AppPoolQueueLength="1000"
AspAllowOutOfProcComponents="TRUE"
AspAllowSessionState="TRUE"
AspAppServiceFlags="0" 
AspBufferingLimit="4194304"
AspBufferingOn="TRUE"
AspCalcLineNumber="TRUE"
AspCodepage="0"pre>
Now we can create a new application pool for this configuration file. While creating a new application pool, we have to select the "Application Pool ( From File )" option as shown in the below figure.
Application Pool Creation
Application pool creation from a configuration file
When we select this option, a screen will come where we need to enter the file name and the password of that file.
Application Pool Creation
Application pool creation from configuration file
Select the file and click on the "Read File" button. This will show you the imported application pool name. Click "OK" to import the full configuration.
Application Pool Creation
Application pool creation from configuration file
Here we need to mention the new application pool name or we can have another option where we can replace an existing application pool. For moving ahead, we need to provide the password.
Application Pool Creation
Password to import application pool configuration
This is the last step for creating a new application pool from an existing configuration file.

Configure Application Pool Properties

This is one of the most important tasks for web server configuration and this is important when we are hosting on a production server. As I have already discussed, the application pool is the heart of any web application hosted on IIS. We need to know each and every configuration of the application pool. To start configuration, we need to go to the Properties of the application pool.
Application Pool Creation
Application pool properties
We need to configure the following things in the application pool:
  • Recycling
  • Performance
  • Health
  • Identity

Recycling

Recycling the application pool means recycling the worker process (w3wp.exe) and the memory used for the web application. It is a very good practice to recycle the worker process periodically, which wll keep the application running smooth. There are two types of recycling related with the application pool:
  • Recycling Worker Process - Predefined settings
  • Recycling Worker Process - Based on memory
Recycling Worker Process - Predefined Settings
Worker process recycling is the replacing of the instance of the application in memory. IIS 6.0 can automatically recycle worker processes by restarting the worker processes that are assigned to an application pool and associated with websites. This improves web site performance and keeps web sites up and running smoothly.
Application Pool Creation
Application pool recycling- Worker process
There are three types of settings available for recycling worker processes:
  • In minutes
  • Number of requests
  • At a given time

Recycle Worker Process (In Minutes)

We can set a specific time period after which a worker process will be recycled. IIS will take care of all the current running requests.

Recycle Worker Process (Number of Requests)

We can configure an application with a given number of requests. Once IIS reaches that limit, the worker process will be recycled automatically.

Recycle Worker Process (In Minutes)

If we want to recycle the worker process at any given time, we can do that configuration on IIS. We can also set multiple times for this.
Application Pool Creation
Application pool recycling - Worker process: Time setting
Recycling Worker Process - Based on Memory
Server memory is a big concern for any web application. Sometimes we need to clean up a worker process based on the memory consumed by it. There are two types of settings that we can configure in the application pool to recycle a worker process based on memory consumption. These are:
  • Maximum virtual memory used
  • Maximum used memory
Application Pool Creation
Application pool recycling - Worker process.
At any time, if the worker process consumes the specified memory (at memory recycling settings), it will be recycled automatically.

What Happens During Application Pool Recycling

This is quite an interesting question. Based on the above settings, an application pool can be recycled any time. So what happens to the users who are accessing the site at that time? We do not need to worry about that. This process is transparent from the client. When you recycle an application pool, HTTP.SYS holds onto the client connection in kernel mode while the user mode worker process recycles. After the process recycles, HTTP.SYS transparently routes the new requests to the new worker process.

Performance

Moving to the Performance tab in the Properties dialog box results in the following output.
Application Pool Creation
Application pool performance
To improve the performance of a web application, we can setup the performance settings of the application pool. We can set the shut down time of the worker process based on the ideal time. The worker process will be shut down at a given time period if it is ideal. Whenever a new requests comes, it will live again. Another important thing for improving the performance is "Web Garden".
Web Garden
Overview of Web Garden
By default, each application pool runs with a single worker process (W3Wp.exe). We can assign multiple worker processes with a single application pool. An application pool with multiple worker processes is called a Web Garden. Many worker processes with the same application pool can sometimes provide better throughput performance and application response time. And each worker process should have its own thread and memory space.
Application Pool Creation
Web Garden (Application pool with multiple worker processes)
As Shown in the picture, in IIS Server, there may be multiple application pools and each application pool has at least a single worker process. A Web Garden should contain multiple worker processes.
There are certain restrictions in using a Web Garden with your web application. If we use Session Mode as "in proc", our application will not work correctly because the Session will be handled by a different worker process. To avoid this, we should use Session Mode as "out proc" and we can use "Session State Server" or "SQL-Server Session State".
How to Create a Web Garden?
We need to increase the number of worker processes on the Performance tab.
Application Pool Creation
Web garden creation
Main advantage: The worker processes in a web garden share the requests that arrive for that particular application pool. If a worker process fails, another worker process can continue processing the requests.

Health

Now we move to the "Health" tab. When wel select the "Health" tab, it will show the following screen:
Application Pool Creation
Health monitoring setting
IIS provides a couple of settings to improve the health of an application pool. There are also a few settings for measuring the worker process health. These are:
  • Enable Pinging
  • Enable Rapid-fail protection
  • Startup time limit
  • Shutdown time limit
Enable Pinging
This property specifies whether the WWW Publishing Service should periodically monitor the health of a worker process. Checking this option indicates to the WWW service to monitor the worker processes to ensure that worker processes are running and healthy. By default, it sets to 30s. This is also needed to check if a service is staying ideal or not. If it is ideal it can be shutdown until the next request comes. The Windows Activation Process maintains all this stuff.
Enable Rapid-fail Protection
When enabling Rapid Fail Protection, the application pool is shut down if there are a specified number of worker process crashing within a specified time period. When this happens, the WWW Publishing Service puts all applications in the application pool "out of service".
Failure Count: The default value for failure count is 5 minutes. This property specifies the maximum number of failures allowed within the number of minutes specified by the "Time Period" property before the application pool is shut down by Rapid Fail Protection. If the number of failure is more than the specified in a given time, the application pool should be put on "out of service mode".
Time period: This property specifies the number of minutes before the failure count for a process is reset. By default, it is set to 5 minutes.
Startup time limit
The Start up time limit property specifies the amount of time that the WWW Publishing Service should wait for a worker process to finish starting up and reporting to the WWW Service. In general it means the time taken to start a worker process.
Shutdown time limit
This is the shutdown time for a worker process. This is the time required to execute all old running worker process requests before it shuts down during recycle time.

Identity

This is the last and final setting for an application pool. An application pool has three types of identity: "Network Service" is the default Identify. "defaultappPool" also runs under the "Network Service" Identity. Below are the listed application pool identities with description:
Identity Description
LocalSystem A built-in account that has administrative privileges on the server. It can access both local and remote resources. For any kind accessing of server files or resources, we have to set the Identity of the application pool to Local System.
LocalServices Built-in account has privileges of an authenticated local user account. It does not have any network access permission.
NetworkServices This is the default Identity of an application pool. NetworkServices has privileges of an authenticated local user account.
Navigating to the Identity tab will show the following screen:
Application Pool Creation
Application pool identity configuration
We can also configure the application pool under a given user account. For that, we need to select the "Configurable" option on "Identity" tab.
This is all about the application pool. Hope now you have a very good understanding on what application pool is, how to create and configure the application pool.
Q: You are using a file upload control in your web application and it is working fine on Visual Studio but when you host the same code on IIS, it is not working. This is a very common problem in web hosting when file upload is involved.
A: When a web application runs under Visual Studio - ASP.NET engine integrated with visual studio takes care of all the executions. And this engine has sufficient rights so that it can write data on your disk. But when you host the site on IIS, as I have already mentioned, it runs under the "Network Services" Identity, which has very minimum rights on your system. The user can only have read access on the site. So for resolving file upload issues, you need to change the Identity of the application pool from "Network Service" to "Local System". Local System identity means the client can have write access on your hard drive. This will resolve your issue of file uploading on the server.
You can also resolve this issue by giving Write access permission to the file destination folder for "Everyone".

Enabling Web Service Extension

IIS 6.0 provides a certain type of configuration from where we can enable/disable web service extensions. If we want to prohibit/restrict any kind of extension, we need to select the extension and click on the "Prohibit" button.
Application Pool Creation
Web Service extension vonfiguration
Note: If the ASP.NET v 2.0.X.XXXX extension is prohibited over here, you will not be able to access the site which is running on .NET 2.0.