Tuesday, August 16, 2011

Exporting XML in a C# ASP .NET Web Application

XML (extensible markup language) is a popular format of data for importing and exporting between different applications designed using different programming languages. Since XML uses a standardized format of data, applications can easily parse the XML data to pull out specific fields, blocks, and even write their own XML files. XML is especially useful as a protocol for communicating over the Internet with applications

using (System.IO.MemoryStream stream = new System.IO.MemoryStream())

{

// Create an XML document. Write our specific values into the document.

System.Xml.XmlTextWriter xmlWriter = new System.Xml.XmlTextWriter(stream, System.Text.Encoding.ASCII);

// Write the XML document header.

xmlWriter.WriteStartDocument();

// Write our first XML header.

xmlWriter.WriteStartElement("WebApplications");

// Write an element representing a single web application object.

xmlWriter.WriteStartElement("WebApplication");

// Write child element data for our web application object.

xmlWriter.WriteElementString("Date", DateTime.Now.ToString());

xmlWriter.WriteElementString("Programmer", "Primary Objects");

xmlWriter.WriteElementString("Name", "Hello World");

xmlWriter.WriteElementString("Language", "C# ASP .NET");

xmlWriter.WriteElementString("Status", "Complete");

// End the element WebApplication

xmlWriter.WriteEndElement();

// End the document WebApplications

xmlWriter.WriteEndElement();

// Finalize the XML document by writing any required closing tag.

xmlWriter.WriteEndDocument();

// To be safe, flush the document to the memory stream.

xmlWriter.Flush();

// Convert the memory stream to an array of bytes.

byte[] byteArray = stream.ToArray();

// Send the XML file to the web browser for download.

Response.Clear();

Response.AppendHeader("Content-Disposition", "filename=MyExportedFile.xml");

Response.AppendHeader("Content-Length", byteArray.Length.ToString());

Response.ContentType = "application/octet-stream";

Response.BinaryWrite(byteArray);

xmlWriter.Close();

}

Friday, August 12, 2011

Creating Crystal reports in ASP.NET

Create a new website and right click on

solution explorer >

add new Item

Select Crystal Report

In the dialog box choose blank report

 



 

Now click on Crystal Report Menu in Visual Studio 2010 and select Database Expert

 



 

Select OLE DB under "Create New Connection" and select Data Provider.

 



 

Click on Next, In Next Screen provide Server name and credential. And select Database.

 



 

Now from Database field, drag and drop fields as required in the report.

 

Add New ASPX Page and drag Crystal Report viewer  on the form.

Click on smart tag of Report Viewer and choose report source and click on finish.

Here is the HTML markup.

<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server"

AutoDataBind="True" GroupTreeImagesFolderUrl="" Height="1202px"

ReportSourceID="CrystalReportSource1" ToolbarImagesFolderUrl=""

ToolPanelWidth="200px" Width="1104px" />

<CR:CrystalReportSource ID="CrystalReportSource1" runat="server">

<Report FileName="CrystalReport.rpt">

</Report>

</CR:CrystalReportSource>

 

Add following code in Page_load,

 

protected void Page_Load(object sender, EventArgs e)

{

ReportDocument crystalReport = new ReportDocument();

crystalReport.Load(Server.MapPath("CrystalReport.rpt"));

CrystalReportViewer1.ReportSource = crystalReport;

}

 

 

Thursday, June 16, 2011

Cloud Storage global war

It’s been a “Cloud” a buzzing word nowadays, since Apple introduce its icloud in iOS 5 before few days…

It’s been a busy time for cloud storage and music services and Apple’s launch onto the scene with Apple iCloud has officially declared it global war.

http://www.pocket-lint.com/news/40364/icloud-google-music-dropbox-skydrive-amazon-cloud-player

But did you know that iCloud is using Micrososft azure and amazons cloud service????

http://www.infiniteapple.net/is-icloud-utilizing-microsoft-azure-and-amazons-cloud-services

I have tried to find something about Microsoft Live Skydrive

Windows Live SkyDrive (initially Windows Live Folders) is part of Microsoft's Windows Live range of online services. SkyDrive is a File hosting service that allows users to upload files to a cloud storage and then access them from a Web browser. It uses Windows Live ID to control access to the user's files, allowing them to keep the files private, share with contacts, or make the files public. Publicly-shared files do not require a Windows Live ID to access.

 

The service offers 25 GB of free personal storage, with individual files limited to 50 MB. A Silverlight-based tool can be installed to allow drag-and-drop uploading from any Silverlight enabled browser such as Windows Explorer on a Windows machine or Safari on a Apple Macintosh computer. Up to five files can be uploaded each time if the tool has not been installed.

You can access skydrive from here...

http://explore.live.com/windows-live-skydrive

 

icloud information can be accessed from here,

http://www.apple.com/icloud/what-is.html

Its been my little attempt to dig on cloud storage.

It’s good that every giant is coming with their own cloud storage product with their own fancy names…. But the big question would be how secure is cloud storage??

Monday, April 4, 2011

How To See Last Modified Date of Objects in SQL Server 2008

declare @day as int
set @day = 12
select * from
(SELECT [name],create_date,modify_date,'table' type1,1 order1 FROM sys.tables
union
SELECT [name],create_date,modify_date,'view' type1,2 order1 FROM sys.views
union
SELECT [name],create_date,modify_date,'trigger' type1,5 order1 FROM sys.triggers
union
SELECT [name],create_date,modify_date,'sp' type1,3 order1 FROM sys.procedures
WHERE [type] = 'P' AND is_ms_shipped = 0 AND [name] NOT LIKE 'sp[_]%diagram%'
union
select [name],create_date,modify_date,'fn' type1,4 order1 from sys.objects where type_desc like '%function%')
as modify_table
where datediff(dd,modify_date,getdate())<@day
ORDER BY order1,modify_date DESC

Wednesday, March 23, 2011

Move ViewState to the bottom of the page

If you move your viewstate from the top of the page to the bottom, you will get better search engine spidering.

 

Step 1 :

Create a class file in App_code folder of your application and name it as "PageBase.cs". Copy following code to the class file.

 

using System.IO;

using System.Web.UI;

 

namespace WebPageBase

{

public class PageBase : System.Web.UI.Page

{

/// This method overrides the Render() method for the page and moves the ViewState

/// from its default location at the top of the page to the bottom of the page. This

/// results in better search engine spidering.

 

protected override void Render(System.Web.UI.HtmlTextWriter writer)

{

// Obtain the HTML rendered by the instance.

StringWriter sw = new StringWriter();

HtmlTextWriter hw = new HtmlTextWriter(sw);

base.Render(hw);

string html = sw.ToString();

 

// Hose the writers we don't need anymore.

hw.Close();

sw.Close();

 

// Find the viewstate.

int start = html.IndexOf(@"<input type=""hidden"" name=""__VIEWSTATE""" );

// If we find it, then move it.

if (start > -1)

{

int end = html.IndexOf("/>", start) + 2;

 

string strviewstate = html.Substring(start, end - start);

html = html.Remove(start, end - start);

 

// Find the end of the form and insert it there.

int formend = html.IndexOf(@"</form>") - 1;

html = html.Insert(formend, strviewstate);

}

 

// Send the results back into the writer provided.

writer.Write(html);

}

}

}

 

 

Step 2 :

Inherit your aspx pages from the base class.

 

public partial class Page : WebPageBase.PageBase

{

// Your code here

}

Wednesday, March 16, 2011

ASP.Net 4.0 Enahanced Feature


  • Web.config changes



    In .Net Framework 4.0, the major configuration elements have been moved to the machine.config file, and applications now inherit these settings. This allows web.config file to be empty or contains 2 or 3 customized entry.



    • Permanently Redirecting a Page




      . In ASP.NET, developers have traditionally handled requests to old URLs by using by using the Response.Redirect method to forward a request to the new URL. However, the Redirect method issues an HTTP 302 Found (temporary redirect) response, which results in an extra HTTP round trip when users attempt to access the old URLs.

      ASP.NET 4 adds a new RedirectPermanent helper method that makes it easy to issue HTTP 301 Moved Permanently responses, as in the following example:

      • RedirectPermanent(“Newpage.aspx”);




      • Compression of Session


      ASP.NET provides two default options for storing session state across a Web farm: a session-state provider that invokes an out-of-process session-state server, and a session-state provider that stores data in a Microsoft SQL Server database. Because both options involve storing state information outside a Web application's worker process, session state has to be serialized before it is sent to remote storage. Depending on how much information a developer saves in session state, the size of the serialized data can grow quite large.

      ASP.NET 4 introduces a new compression option for both kinds of out-of-process session-state providers. When the compressionEnabled configuration option shown in the following example is set to true, ASP.NET will compress (and decompress) serialized session state by using the .NET Framework System.IO.Compression.GZipStream class

      <sessionState mode="SqlServer"

      sqlConnectionString="data source=servername;Initial Catalog=aspnetstate"

      allowCustomSqlDatabase="true" compressionEnabled="true" />



      • Expanding the Range of Allowable URLs




        ASP.NET 4 introduces new options for expanding the size of application URLs. Previous versions of ASP.NET constrained URL path lengths to 260 characters, based on the NTFS file-path limit. In ASP.NET 4, you have the option to increase (or decrease) this limit as appropriate for your applications, using two new httpRuntime configuration attributes. The following example shows these new attributes.

        ASP.NET 4 also enables you to configure the characters that are used by the URL character check.

        When ASP.NET finds an invalid character in the path portion of a URL, it rejects the request and issues an HTTP 400 error.

        <httpRuntime maxRequestPathLength="260" maxQueryStringLength="2048"

        requestPathInvalidChars="&lt;,&gt;,*,%,&amp;,:,\,?" />



        • CSS Friendly Menu control




          Menu control will Render in <ul> and <li> instead of table. You can specify its property Renderingmode="list"

          1. Performance Monitoring for Individual Applications in a Single Worker Process


          In order to increase the number of Web sites that can be hosted on a single server, many hosters run multiple ASP.NET applications in a single worker process. However, if multiple applications use a single shared worker process, it is difficult for server administrators to identify an individual application that is experiencing problems.

          ASP.NET 4 leverages new resource-monitoring functionality introduced by the CLR. To enable this functionality, you can add the following XML configuration snippet to the aspnet.config configuration file.

          <?xml version="1.0" encoding="UTF-8" ?>

          <configuration>

          <runtime>

          <appDomainResourceMonitoring enabled="true"/>

          </runtime>

          </configuration>

          When the appDomainResourceMonitoring feature has been enabled, two new performance counters are available in the "ASP.NET Applications" performance category: % Managed Processor Time and Managed Memory Used. Both of these performance counters use the new CLR application-domain resource management feature to track estimated CPU time and managed memory utilization of individual ASP.NET applications. As a result, with ASP.NET 4, administrators now have a more granular view into the resource consumption of individual applications running in a single worker process.



          • Multi-Targeting




            You can create an application that targets a specific version of the .NET Framework. In ASP.NET 4, a new attribute in the compilation element of the Web.config file lets you target the .NET Framework 4 and later. If you explicitly target the .NET Framework 4, and if you include optional elements in the Web.config file such as the entries for system.codedom, these elements must be correct for the .NET Framework 4. (If you do not explicitly target the .NET Framework 4, the target framework is inferred from the lack of an entry in the Web.config file.)

            The following example shows the use of the targetFramework attribute in the compilation element of the Web.config file.

            <compilation targetFramework="4.0"/>



            • jQuery Included




              When you create a new website or project, a Scripts folder containing the following 3 files is created:

              • jQuery-1.4.1.js – The human-readable, unminified version of the jQuery library.

              • jQuery-14.1.min.js – The minified version of the jQuery library.

              • jQuery-1.4.1-vsdoc.js – The Intellisense documentation file for the jQuery library.


              Include the unminified version of jQuery while developing an application. Include the minified version of jQuery for production applications.

              In the past, if you used the ASP.NET ScriptManger then you were required to load the entire monolithic ASP.NET Ajax Library. By taking advantage of the new ScriptManager.AjaxFrameworkMode property, you can control exactly which components of the ASP.NET Ajax Library are loaded and load only the components of the ASP.NET Ajax Library that you need.

              • ScriptManager Explicit Scripts


              The ScriptManager.AjaxFrameworkMode property can be set to the following values:

              • Enabled -- Specifies that the ScriptManager control automatically includes the MicrosoftAjax.js script file, which is a combined script file of every core framework script (legacy behavior).

              • Disabled -- Specifies that all Microsoft Ajax script features are disabled and that the ScriptManager control does not reference any scripts automatically.

              • Explicit -- Specifies that you will explicitly include script references to individual framework core script file that your page requires, and that you will include references to the dependencies that each script file requires.


              For example, if you set the AjaxFrameworkMode property to the value Explicit then you can specify the particular ASP.NET Ajax component scripts that you need:

              <asp:ScriptManager ID="sm1" AjaxFrameworkMode="Explicit" runat="server">

              <Scripts>

              <asp:ScriptReference Name="MicrosoftAjaxCore.js" />

              <asp:ScriptReference Name="MicrosoftAjaxComponentModel.js" />

              <asp:ScriptReference Name="MicrosoftAjaxSerialization.js" />

              <asp:ScriptReference Name="MicrosoftAjaxNetwork.js" />

              </Scripts>

              </asp:ScriptManager>

              • Setting Meta Tags with the Page.MetaKeywords and Page.MetaDescription Properties


              ASP.NET 4 adds two properties to the Page class, MetaKeywords and MetaDescription. These two properties represent corresponding meta tags in your page, as shown in the following example:

              <head id="Head1" runat="server">

              <title>Untitled Page</title>

              <meta name="keywords" content="These, are, my, keywords" />

              <meta name="description" content="This is the description of my page" />

              </head>

              These two properties work the same way that the page’s Title property does.

              1. Enabling View State for Individual Controls


              The ViewStateMode property takes an enumeration that has three values: Enabled, Disabled, and Inherit. Enabled enables view state for that control and for any child controls that are set to Inherit or that have nothing set. Disabled disables view state, and Inherit specifies that the control uses the ViewStateMode setting from the parent control.

              1. Changes to Browser Capabilities


              ASP.NET determines the capabilities of the browser that a user is using to browse your site by using a feature called browser capabilities. Browser capabilities are represented by the HttpBrowserCapabilities object

              For example, you can use the HttpBrowserCapabilities object to determine whether the type and version of the current browser supports a particular version of JavaScript. Or, you can use the HttpBrowserCapabilities object to determine whether the request originated from a mobile device.



              • Setting Client IDs




                The id attribute in HTML that is rendered for Web server controls is generated based on the ClientID property of the control. Until ASP.NET 4, the algorithm for generating the id attribute from the ClientID property has been to concatenate the naming container (if any) with the ID, and in the case of repeated controls (as in data controls), to add a prefix and a sequential number. While this has always guaranteed that the IDs of controls in the page are unique, the algorithm has resulted in control IDs that were not predictable, and were therefore difficult to reference in client script.

                The new ClientIDMode property lets you specify more precisely how the client ID is generated for controls. You can set the ClientIDMode property for any control, including for the page. Possible settings are the following:

                • AutoID – This is equivalent to the algorithm for generating ClientID property values that was used in earlier versions of ASP.NET.

                • Static – This specifies that the ClientID value will be the same as the ID without concatenating the IDs of parent naming containers. This can be useful in Web user controls. Because a Web user control can be located on different pages and in different container controls, it can be difficult to write client script for controls that use the AutoID algorithm because you cannot predict what the ID values will be.

                • Predictable – This option is primarily for use in data controls that use repeating templates. It concatenates the ID properties of the control's naming containers, but generated ClientID values do not contain strings like "ctlxxx". This setting works in conjunction with the ClientIDRowSuffix property of the control. You set the ClientIDRowSuffix property to the name of a data field, and the value of that field is used as the suffix for the generated ClientID value. Typically you would use the primary key of a data record as the ClientIDRowSuffix value.

                • Inherit – This setting is the default behavior for controls; it specifies that a control's ID generation is the same as its parent.


                In some scenarios, such as when you are using master pages, controls can end up with IDs like those in the following rendered HTML:

                ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1

                This ID is guaranteed to be unique in the page, but is unnecessarily long for most purposes.The easiest way to reduce the length of the rendered ID is by setting the ClientIDMode property as shown in the following example:

                <tc:NamingPanel runat="server" ID="NamingPanel1" ClientIDMode="Predictable">

                <asp:TextBox ID="TextBox1" runat="server" Text="Hello!"></asp:TextBox>

                </tc:NamingPanel>

                • ASP.NET Chart Control


                .NET Framework 4 release includes following feature of chart.

                • 35 distinct chart types.

                • An unlimited number of chart areas, titles, legends, and annotations.

                • A wide variety of appearance settings for all chart elements.

                • 3-D support for most chart types.

                • Smart data labels that can automatically fit around data points.

                • Strip lines, scale breaks, and logarithmic scaling.

                • More than 50 financial and statistical formulas for data analysis and transformation.

                • Simple binding and manipulation of chart data.

                • Support for common data formats such as dates, times, and currency.

                • Support for interactivity and event-driven customization, including client click events using Ajax.

                • State management.

                • Binary streaming.



                • ListView Control Enhancements


                The ListView control has been made easier to use in ASP.NET 4. The earlier version of the control required that you specify a layout template that contained a server control with a known ID. The following markup shows a typical example of how to use the ListView control in ASP.NET 3.5.

                <asp:ListView ID="ListView1" runat="server">

                <LayoutTemplate>

                <asp:PlaceHolder ID="ItemPlaceHolder" runat="server"></asp:PlaceHolder>

                </LayoutTemplate>

                <ItemTemplate>

                <% Eval("LastName")%>

                </ItemTemplate>

                </asp:ListView>

                In ASP.NET 4, the ListView control does not require a layout template. The markup shown in the previous example can be replaced with the following markup:

                <asp:ListView ID="ListView1" runat="server">

                <ItemTemplate>

                <% Eval("LastName")%>

                </ItemTemplate>

                </asp:ListView>



                • CheckBoxList and RadioButtonList Control Enhancements




                  In ASP.NET 3.5, you can specify layout for the CheckBoxList and RadioButtonList using the following two settings:

                  • Flow. The control renders span elements to contain its content.

                  • Table. The control renders a table element to contain its content.


                  In ASP.NET 4, the CheckBoxList and RadioButtonList controls support the following new values for the RepeatLayout property:

                  • OrderedList – The content is rendered as li elements within an ol element.

                  • UnorderedList – The content is rendered as li elements within a ul element.



                  • Default Hashing Algorithm is changed to HMACSHA256


                  ASP.NET uses both encryption and hashing algorithms to help secure data such as forms authentication cookies and view state. By default, ASP.NET 4 now uses the HMACSHA256 algorithm for hash operations on cookies and view state. Earlier versions of ASP.NET used the older HMACSHA1 algorithm.

                  Wednesday, February 2, 2011

                  10 Principal for keeping Your Programming code clean

                  A common issue in almost every profession that can drive people completely insane is having to continue from what somebody else started. The main reason for this being the fact that everyone has different ways of working, and sometimes these self-induced habits can be just downright messy.



                  In order to make code look cleaner, and thus, support team work (meaning that somebody else might need to work with what was coded before), there are certain considerations that should be taken into account.



                  1. Revise Your Logic Before Coding


                  Before blindly typing into the debugger of choice, some flow diagrams or written pseudo-code might come in handy to previously verify the logic behind those lines of code. Writing it down first can clarify many doubts or insecurities about complex functionality, and therefore save a lot of time. But most importantly, helping you get it right faster will also help you avoid all the messy code replacements and additions that tamper with the following principles.



                  2. Clearly Expose the Structure of the Page


                  Working with main containers is useful, but working with main containers with a representative ID is even more useful. Consider the following starting scenario:












                  1

                  2

                  3

                  4

                  5

                  6

                  7

                  8

                  9

                  10

                  11

                  12

                  13

                  14

                  15

                  16
                  <div id="main-container">

                  <div id="header">

                  <div id="logo">...</div>

                  <div id="main-menu">...</div>

                  </div>

                  <div id="content">

                  <div id="left-column">...</div>
                  <div id="center-column">...</div>

                  <div id="right-column">...</div>

                  </div>

                  <div id="footer">

                  <div id="footer-menu">...</div>

                  <div id="disclaimer">...</div>

                  </div>

                  </div>


                  The structure appears evident, thanks to the DIV containers that are concretely named after their destined content. Not only will it be simpler to start adding code, but it'll also be perfectly transparent for someone who tries to add or remove something afterward. This structuring method, however, should be aided by the next statement.


                   3. Use the Correct Indentation


                  Supporting the previous pronouncement on structure, indentation distinctly displays the opening and closing points of each element used. If every line of code is glued to the left side of the screen, it'll be very hard to distinguish the exact place where an element is closed. Therefore, it'll mess up the effort made at designing a complete structure, since it won't be noticeable afterward.


                   4. Write Explanatory Comments


                  Underestimating the value of good comments is disregarding a very effective way of code documentation. It's easy, fast, and very straight-to-the-point, since it's done right then and there when it's needed.


                  Comments are also efficient considering the fact that they can be read at the exact moment of doubt. They can, however, be overused. And that brings us to the next recommendation.


                   5. Avoid Abusing Comments


                  Comments aren't to be treated lightly. When commenting on code, the current functionality is explained in terms of variables and results. What comments are NOT made for is:




                  • Writing explanatory notes to self (e.g. /* Will finish this later... */).

                  • Blaming stuff on other people (e.g. /* John coded this. Ask him. */).

                  • Writing vague statements (e.g. /* This is another math function. */).

                  • Erasing chunks of code. Sometimes people are not sure of erasing things and it's not absolutely evil to comment that code instead.


                  What's not right is to just leave it afterwards. It'll be terribly confusing. If the code will be documented via embedded comments, the team members need to make sure those comments are there for a reason.

                  Examples of good comment use are:




                  • Authoring specifications (e.g. /* Coded by John, November 13th 2010 */).

                  • Detailed statements on the functionality of a method or procedure (e.g. /* This function validates the login form with the aid of the e-mail check function */).

                  • Quick notifications or labels that state where a recent change was made (e.g. /* Added e-mail validation procedure */).


                  6. Avoid Extremely Large Functions

                  In the process of adding functionality to an application, its coded methods tend to grow accordingly. One can come across functions that consist of up to a hundred lines of code, and this tends to become confusing.


                  A better practice would be to break up large functions into smaller ones. Some procedures may even be repeating themselves amongst the rest of the functions conforming the whole application process. The team could make better use of those repeated procedures through separate functions. This, however, should have been avoided from the beginning if the first recommendation was carried out correctly.


                   7. Use Naming Standards for Functions and Variables


                  Whenever a variable or a function is created, its name should be descriptive enough as to give a general idea of what it does or what it's for.


                  There are companies that have their own pre-established naming standards


                  (e.g. The prefix 'int_' for any numeric variables), but there are also many companies in which the employees do not keep these standards. Laziness makes people work double the time during future redesigns, so everyone needs to start learning how to get rid of it.


                   8. Treat Changes with Caution


                  The correct appliance of changes summarizes a lot of what has been previously said, like commenting meaningfully and not disrupting indentations. Nevertheless, it needs to be emphasized. Whenever there's a need for adding, removing, or changing something, there should also be an awareness of not meddling with previous efforts for maintaining the code clean and ordered.


                  This mainly involves:




                  • Keeping the correct indentations (e.g. when inserting an IF clause, its contents' indentations will be augmented).

                  • Commenting on the modification made or broadening the existing comments.

                  • Respecting standards in use.


                   

                  9. Avoid Indiscriminate Mixing of Coding Languages


                  In-line CSS styling and scattered JavaScript tags with short procedures within them are very good examples of incorrect mixing of coding languages throughout your development process. Ignoring this principle will result in huge element tags with an embedded STYLE property, lots of interruptions in the flow of the structure because of embedded functions, and of course lots and lots of confusion.


                  Even with the addition of comments, it'll still look like everything and nothing at the same time. Having the appropriate divisions between different coding languages will give order to the logic applied. This brings us, though, to the next consideration.


                   10. Summarize Your Imports


                  Even though it is much better to have additional coding languages imported from different files, this shouldn't be abused. If there are too many style sheets, they can probably be summarized into one or two.


                  This won't only save space and make things look cleaner, but it will also save loading time. Each imported file is an HTTP request that tampers with the performance of your application. So apart from being a consideration for tidiness, it is also a consideration for efficiency.

                  Saturday, January 22, 2011

                  IIS in depth

                  Web server is used 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.

                   
                   


                   
                   

                   
                   

                  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.

                   
                   

                  The web server process that was being debugged has been terminated by Internet Information Services (IIS)

                  By default, debugging a website or web project within Visual Studio bring up the built-in server of Visual Studio. But, we do have a problem to change the server to an IIS instance. I recently switched to debugging on IIS on my Windows 7. Debugging works fine. The only problem is that if your code hit some breakpoint and if you leave the program in 'break' mode for more than 90 seconds, Visual Studio shows the following message:


                   




                   


                   


                  After a bit tweaking around in the new IIS interface, I got the solution:




                  • Open Internet Information Services (IIS) Manager.

                  • From the server tree (the item with the name as the server name), choose Application Pools.

                  • Choose the Application Pool corresponding to your testing IIS website (usually it has the same name as your IIS website)

                  • Right-click and choose Advanced Settings.


                  • From the Process Model node, change the Ping Maximum Response Time (seconds) to a comfortably higher value (I have set the value to 900 seconds which is 15 minutes).

                     


                  Alternatively, you can also set the Ping Enabled property to False.

                  Apparently what happens is that the server keeps pinging the worker process and waits for a response. When in debugging mode, the worker process is affectively suspended, which results in the ping not being responded.


                   


                   

                  Thursday, January 13, 2011

                  Bypass specific IP from rendering google analytics code

                  To bypass specific IP from rendering google analytics code, follow the following steps.



                  1. List the IP which you wants to bypass from rendering into your web application, and add in web.config file

                    e.g. <add key="ByPassUrl" value="101.101.101.100"/>


                  2. Create a Usercontrol and named "GoogleAnalytics.ascx" replace your google analytics code with "<google analytics code here>".

                    <%@Control Language="C#" AutoEventWireup="true" CodeFile="GoogleAnalytics.ascx.cs"
                    Inherits="Include_GoogleAnalytics"%>


                    <script type="text/javascript">


                    <% if (ConfigurationManager.AppSettings["showGoogleAnalytics"] == "True") {%>


                    <% if (!strByPassUrl.Contains(requestUrl)) {%>


                    var _gaq = _gaq || [];


                    _gaq.push(['_setAccount', '<google analytics code here>']);


                    _gaq.push(['_trackPageview']);


                    (function() {


                    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;


                    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';


                    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);


                    })();


                    <% } %>


                    <% } %>


                    </script>


                     


                  3. Declare following 2 public variable in "GoogleAnalytics.ascx.cs" file

                    public string requestUrl = HttpContext.Current.Request.UserHostAddress.ToString();
                    public
                    string strByPassUrl = clsCommon.value("ByPassUrl");


                  4. Add "GoogleAnalytics" user control in master page of the application within <Head></Head> tag.

                    <head runat="server">


                    <uc2:GoogleAnalytics ID="GoogleAnalytics1" runat="server"/>


                    </head>


                  Note :- 1) Before Copying Google analytics code verify with google analytics script, provided in google analytics account.

                  2) check if "showGoogleAnalytics" key is present in web.config file.