<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-207196128400825675</id><updated>2012-02-16T08:20:10.789-06:00</updated><category term='design'/><category term='architecture'/><title type='text'>WebForms 3.5</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-5503272547176198267</id><published>2009-09-02T07:34:00.001-05:00</published><updated>2009-09-02T07:40:14.619-05:00</updated><title type='text'>Track and quash bugs</title><content type='html'>&lt;p&gt;&lt;a title="Bug List" href="http://www.flickr.com/photos/10054417@N06/1072254278/"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" border="0" alt="Bug List" align="right" src="http://static.flickr.com/1198/1072254278_19d6f244fe_t.jpg" /&gt;&lt;/a&gt;Bugs in software are inevitable and unavoidable probably because most software today is written by humans. Its not that humans are sloppy information systems creators, its because programming is both an art and a science which means there is a lot of variation in how to do it. This means every programmer has to address the issue of bugs in software. This blog post discusses the rationale for bug tracking and How to track bugs.&lt;/p&gt;  &lt;h4&gt;Why Track bugs.&lt;/h4&gt;  &lt;p&gt;The one article that every programmer should read on Bug Tracking is &lt;a href="http://www.joelonsoftware.com/articles/fog0000000029.html" target="_blank"&gt;Painless Bug Tracking&lt;/a&gt; by Joel Spolsky. In the &lt;a href="http://www.joelonsoftware.com/articles/fog0000000029.html" target="_blank"&gt;article&lt;/a&gt; he covers why you need a bug tracking solution with a real database.&lt;/p&gt;  &lt;p&gt;The Reasons for having a bugs database:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Nobody can keep track of all the bugs on pieces of paper or in their head.&lt;/li&gt;    &lt;li&gt;You often need to prioritize what bugs to fix.&lt;/li&gt;    &lt;li&gt;You often need to be able to reproduce the bug while fixing it.&lt;/li&gt;    &lt;li&gt;You often need to be able to track the history of the bug&lt;/li&gt;    &lt;li&gt;You need all kinds of metrics that most good bug databases provide to determine the quality of your software or development effort. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There are probably a few other reasons you should manage bugs, but the above should enable you to convince anyone that might think that bug tracking is another unnecessary effort in the software development effort.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If you are developing code, even on a team of one, without an organized database listing all known bugs in the code, you are simply going to ship low quality code. On good software teams, not only is the bug database used universally, but people get into the habit of using the bug database to make their own &amp;quot;to-do&amp;quot; lists, they set their default page in their web browser to the list of bugs assigned to them, and they start wishing that they could assign bugs to the office manager to stock more Mountain Dew. &lt;a href="http://www.joelonsoftware.com/articles/fog0000000029.html" target="_blank"&gt;&lt;em&gt;Painless Bug Tracking&lt;/em&gt;&lt;/a&gt;&lt;em&gt; by Joel Spolsky.&lt;/em&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;How to track (and quash) the bugs &lt;/h4&gt;  &lt;p&gt;Testers usually capture the bug in testing. Software should always be tested by someone that didn’t write it. Always remember that Programmers will inevitably create bugs not because they are sloppy but because they are human.&lt;/p&gt;  &lt;p&gt;When the bug is captured, the steps that caused the bug should be captured in the bug database. Having the list of reproduction steps is crucial for the programmer that has to fix it.Always reduce the number of steps when possible to enable the person doing the fixes to work faster.&lt;/p&gt;  &lt;p&gt;Work hard to make sure that you create good bug reports because bad bug reports waste everyone’s time. Every bug needs to be assigned to &lt;i&gt;exactly one person&lt;/i&gt; at all times, until it is closed. &lt;/p&gt;  &lt;p&gt;When a bug is resolved, it gets assigned back to the person who opened it. Only the person who opened the bug can close the bug.&amp;#160; &lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;em&gt;Three Parts To Every Good Bug Report&lt;/em&gt;&lt;/h4&gt;    &lt;p&gt;&lt;em&gt;And the Lord spake, saying, &amp;quot;First shalt thou take out the Holy Pin. Then, shalt thou count to three, no more, no less. Three shall be the number thou shalt count, and the number of the counting shalt be three. Four shalt thou not count, nor either count thou two, excepting that thou then proceed to three. Five is right out. Once the number three, being the third number, be reached, then lobbest thou thy Holy Hand Grenade of Antioch towards thou foe, who being naughty in my sight, shall snuff it.&amp;quot;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;-- Monty Python and the Holy Grail&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;It's pretty easy to remember the rule for a good bug report. &lt;b&gt;Every good bug report needs exactly three things.&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Steps to reproduce, &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;What you expected to see, and &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;What you saw instead.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Seems easy, right? Maybe not. As a programmer, people regularly assign me bugs where they left out one piece or another.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;If you don't tell me how to repro the bug, I probably will have no idea what you are talking about. &amp;quot;The program crashed and left a smelly turd-like object on the desk.&amp;quot; That's nice, honey. I can't do anything about it unless you tell me what you were doing. Now, I admit that there are two cases where it's hard to get exact steps to repro. Sometimes you just don't remember, or you're just transcribing a bug from &amp;quot;the field.&amp;quot; (By the way, why do they call it &amp;quot;the field&amp;quot;? Is it, like, a field of rye or something? Anyway...) The other time it's OK not to have repro steps is when the bug happens sometimes but not all the time, but you should still provide repro steps, with a little annotation that says that it doesn't happen too often. In these cases, it's going to be really hard to find the bug, but we can try.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;If you don't specify what you expected to see, I may not understand why this is a bug. The splash screen has blood on it. So what? I cut my fingers when I was coding it. What did you expect? Ah, you say that the spec required no blood! Now I understand why you consider this a bug.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Part three. What you saw instead. If you don't tell me this, I don't know what the bug is. That one is kind of obvious.(&lt;a href="http://www.joelonsoftware.com/articles/fog0000000029.html" target="_blank"&gt;&lt;em&gt;Painless Bug Tracking&lt;/em&gt;&lt;/a&gt;&lt;em&gt; by Joel Spolsky.&lt;/em&gt;)&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;u&gt;Top Ten Tips for Bug Tracking&lt;/u&gt; (&lt;a href="http://www.joelonsoftware.com/articles/fog0000000029.html" target="_blank"&gt;&lt;em&gt;Painless Bug Tracking&lt;/em&gt;&lt;/a&gt;&lt;em&gt; by Joel Spolsky.&lt;/em&gt;)&lt;/h4&gt;  &lt;ol&gt;   &lt;li&gt;A good tester will always try to reduce the repro steps to the &lt;i&gt;minimal steps&lt;/i&gt; to reproduce; this is extremely helpful for the programmer who has to find the bug. &lt;/li&gt;    &lt;li&gt;Remember that the only person who can &lt;i&gt;close&lt;/i&gt; a bug is the person who opened it in the first place. Anyone can &lt;i&gt;resolve&lt;/i&gt; it, but only the person who saw the bug can really be sure that what they saw is fixed. &lt;/li&gt;    &lt;li&gt;There are many ways to resolve a bug. FogBUGZ allows you to resolve a bug as &lt;i&gt;fixed&lt;/i&gt;, &lt;i&gt;won't fix&lt;/i&gt;, &lt;i&gt;postponed&lt;/i&gt;, &lt;i&gt;not repro&lt;/i&gt;, &lt;i&gt;duplicate&lt;/i&gt;, or &lt;i&gt;by design&lt;/i&gt;. &lt;/li&gt;    &lt;li&gt;&lt;i&gt;Not Repro&lt;/i&gt; means that nobody could ever reproduce the bug. Programmers often use this when the bug report is missing the repro steps. &lt;/li&gt;    &lt;li&gt;You'll want to keep careful track of versions. Every build of the software that you give to testers should have a build ID number so that the poor tester doesn't have to retest the bug on a version of the software where it wasn't even supposed to be fixed. &lt;/li&gt;    &lt;li&gt;If you're a programmer, and you're having trouble getting testers to use the bug database, just &lt;i&gt;don't accept bug reports by any other method&lt;/i&gt;. If your testers are used to sending you email with bug reports, just bounce the emails back to them with a brief message: &amp;quot;please put this in the bug database. I can't keep track of emails.&amp;quot; &lt;/li&gt;    &lt;li&gt;If you're a tester, and you're having trouble getting programmers to use the bug database, just &lt;i&gt;don't tell them about bugs&lt;/i&gt; - put them in the database and let the database email them. &lt;/li&gt;    &lt;li&gt;If you're a programmer, and only some of your colleagues use the bug database, just start assigning them bugs in the database. Eventually they'll get the hint. &lt;/li&gt;    &lt;li&gt;If you're a manager, and nobody seems to be using the bug database that you installed at great expense, start assigning new features to people using bugs. A bug database is also a great &amp;quot;unimplemented feature&amp;quot; database, too. &lt;/li&gt;    &lt;li&gt;Avoid the temptation to add new fields to the bug database. Every month or so, somebody will come up with a great idea for a new field to put in the database. You get all kinds of clever ideas, for example, keeping track of the file where the bug was found; keeping track of what % of the time the bug is reproducible; keeping track of how many times the bug occurred; keeping track of which exact versions of which DLLs were installed on the machine where the bug happened. It's very important &lt;i&gt;not&lt;/i&gt; to give in to these ideas. If you do, your new bug entry screen will end up with a thousand fields that you need to supply, and nobody will want to input bug reports any more. For the bug database to work, everybody needs to use it, and if entering bugs &amp;quot;formally&amp;quot; is too much work, people will go &lt;i&gt;around&lt;/i&gt; the bug database.&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Related quotes and Links&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000029.html" target="_blank"&gt;&lt;em&gt;Painless Bug Tracking&lt;/em&gt;&lt;/a&gt;&lt;em&gt; by Joel Spolsky.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Keeping a database of bugs is one of the &lt;/em&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;&lt;em&gt;hallmarks of a good software team&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. I never cease to be amazed at how few teams are actually doing this. One of the biggest incorrect facts that programmers consistently seem to believe is that they can remember all their bugs or keep them on post-it notes.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;If I can bend your ear a moment, I'd like to explain a pretty painless way to do bug tracking, in the spirit of my previous articles on &lt;/em&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000245.html"&gt;&lt;em&gt;painless schedules&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000036.html"&gt;&lt;em&gt;painless specs&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;First of all, you need a real database. On teams of 2 people writing a little bit of code over the course of a long weekend, it's probably OK to use a text file as the database. Anything larger, and you're going to need a real bug tracking database. There are zillions of bug tracking databases you can buy. (Blatant self-promotion: the one we wrote at Fog Creek Software, called &lt;/em&gt;&lt;a href="http://www.fogcreek.com/FogBUGZ/"&gt;&lt;em&gt;FogBUGZ&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, is web based, pretty easy to use, and quite powerful, if I may say so myself.)&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;Programming - &lt;em&gt;&lt;/em&gt;&lt;/u&gt;&lt;a href="http://en.wikipedia.org/wiki/Art"&gt;&lt;em&gt;art&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;u&gt;, a &lt;/u&gt;&lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Craft"&gt;&lt;em&gt;craft&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;u&gt; or an &lt;/u&gt;&lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Engineering"&gt;&lt;em&gt;engineering&lt;/em&gt;&lt;/a&gt;&lt;u&gt;&lt;em&gt; &lt;/em&gt;discipline&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;There is an ongoing debate on the extent to which the writing of programs is an &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Art"&gt;&lt;em&gt;art&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, a &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Craft"&gt;&lt;em&gt;craft&lt;/em&gt;&lt;/a&gt;&lt;em&gt; or an &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Engineering"&gt;&lt;em&gt;engineering&lt;/em&gt;&lt;/a&gt;&lt;em&gt; discipline.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Computer_programming#cite_note-0"&gt;[1]&lt;/a&gt;&lt;/sup&gt; Good programming is generally considered to be the measured application of all three, with the goal of producing an efficient and evolvable software solution (the criteria for &amp;quot;efficient&amp;quot; and &amp;quot;evolvable&amp;quot; vary considerably). The discipline differs from many other technical professions in that &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Programmer"&gt;&lt;em&gt;programmers&lt;/em&gt;&lt;/a&gt;&lt;em&gt; generally do not need to be licensed or pass any standardized (or governmentally regulated) certification tests in order to call themselves &amp;quot;programmers&amp;quot; or even &amp;quot;software engineers.&amp;quot; However, representing oneself as a &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Professional_Engineer"&gt;&lt;em&gt;&amp;quot;Professional Software Engineer&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; without a license from an accredited institution is illegal in many parts of the world. (from Wikipedia’s &lt;/em&gt;&lt;a title="http://en.wikipedia.org/wiki/Computer_programming" href="http://en.wikipedia.org/wiki/Computer_programming"&gt;&lt;em&gt;Computer_programming&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.borderwave.com"&gt;Advanced Defect Tracking&lt;/a&gt; - Designed for small and large software companies to simplify their feature development, bug tracking and helpdesk support. (Borderwave Software) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.bugaware.com"&gt;BugAware&lt;/a&gt; - Web based bug tracking system and help desk solution for the company intranet. Features include email alerts, advanced reporting, team management and custom fields. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.bugopolis.com"&gt;Bugopolis Bug Station&lt;/a&gt; - Easy to install and use standalone server appliances based on open source software. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.bugtrack.net"&gt;BUGtrack&lt;/a&gt; - Web based defect tracking system. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.websina.com/bugzero/"&gt;Bugzero&lt;/a&gt; - Web-based cross-platform bug tracking system supporting multiple projects, role-based access, automatic bug-assignment, file attachment, e-mail notification, metric reports and workflow. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.rti-software.com/customerfirst.html"&gt;CustomerFirst&lt;/a&gt; - Bug tracking and CRM software enables customer-service agents to provide support via phone, Web, or email. Tracks customer profiles. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.defectagent.com"&gt;Defect Agent&lt;/a&gt; - Defect Agent is a defect tracking software for software development teams. (Inborne Technology Corporation) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.extraview.com"&gt;ExtraView&lt;/a&gt; - Web-based bug tracking with Web API, command line and development workflow engine. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.fastbugtrack.com/"&gt;Fast BugTrack&lt;/a&gt; - A web-based platform independent bug tracking system. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.fogcreek.com/FogBUGZ/"&gt;FogBUGZ&lt;/a&gt; - Web-based bug tracking system. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.gnu.org/software/gnats/"&gt;GNATS: GNU Bug Tracking System home page&lt;/a&gt; - A portable incident/bug report/help request-tracking system which runs on UNIX-like operating systems. It easily handles thousands of problem reports, has been in wide use since the early 90s, and can do most of its operations over e-mail. Several front end interfaces exist, including command line, emacs, and Tcl/Tk interfaces. There are also a number of Web (CGI) interfaces written in scripting languages like Perl and Python. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www-306.ibm.com/software/awdtools/clearquest/"&gt;IBM Rational ClearQuest&lt;/a&gt; - A defect and change tracking system that captures and manages all types of change requests throughout the development lifecycle. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.ic-soft.com/products/ictracker.htm"&gt;icTracker&lt;/a&gt; - Web-based bug tracking, task management, and project management software from IC Soft, Inc. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.solidgraphics.com/ITS/ITS-Overview.htm"&gt;Issue Organizer&lt;/a&gt; - Easy to use web-based bug tracking software. Pricing is not based on number of users. (Solid Graphics) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.elsitech.com/"&gt;IssueNet Intercept&lt;/a&gt; - A customizable bug tracking system and help desk with integrations to Visual Studio, VSS, Outlook, and MS Project. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.issueview.com/"&gt;IssueView&lt;/a&gt; - Configurable Windows software for tracking defects, bugs, helpdesk calls, and knowledge base articles. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atlassian.com/software/jira/"&gt;JIRA&lt;/a&gt; - Browser-based bug, issue, task and defect tracking system, and project management software solution used for open source and enterprise projects. (Atlassian Software Systems) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.e-spot.biz/index2.htm"&gt;Legendsoft Spots&lt;/a&gt; - A web-based service order and defect tracking system for software development organizations and IT help desks. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.metaquest.com/"&gt;MetaQuest Software, Inc. - Census&lt;/a&gt; - A customizable bug tracking tool. Includes VSS integration, notifications, workflow, reporting and change history. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.newfire.com"&gt;New Fire Software&lt;/a&gt; - Defect Tracking software and recruiting software. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.omninet.de/english/OT_Ueberblick.shtml"&gt;OmniTracker&lt;/a&gt; - Customizable workflow tool for bug tracking, quality assurance, help desks and call centers. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.pointinsight.com"&gt;PointInSight:&lt;/a&gt; - Issue management system with collaborative teamwork and integrated communication. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.problemtracker.com/"&gt;ProblemTracker&lt;/a&gt; - A Web-based tool for bug tracking, defect tracking, issue tracking, help desk, and automated support. By NetResults Corporation. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.prtracker.com/"&gt;PR-Tracker&lt;/a&gt; - Bug tracking system for software project management, advanced features, easy setup, integrated network and web versions. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.excelsoftware.com/quickbugswin.html"&gt;QuickBugs&lt;/a&gt; - A tool for tracking bugs, issues, changes and new features involved in product development. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.ecosmonet.com/"&gt;Radar&lt;/a&gt; - Web based solution that helps an organization to track, communicate, resolve and analyze defects in a software lifecycle, employing the Review Based Model that follows the CMM principles. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.visible.com/Products/Razor/"&gt;Razor&lt;/a&gt; - Configuration management system providing process management, issue/problem tracking, version control, and release management. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.rmtrack.com"&gt;RMTrack Bug Tracking&lt;/a&gt; - A web-based bug tracking, issue tracking, and defect tracking and management application. Downloadable. Free 30-day trial. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.softwareplanner.com"&gt;Software Planner&lt;/a&gt; - Manages all phases of the software lifecycle.&amp;#160; It includes all the Defect Tracker features in addition to managing discussions, appointments / to-do lists, project tasks and contacts. (Pragmatic Software Company, Inc.) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.softwarewithbrains.com/"&gt;SWBTracker&lt;/a&gt; - Bug tracking and defect management software for Windows. By Software with Brains, Inc. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.seapine.com/index.php?s=37&amp;amp;k=76&amp;amp;d=1"&gt;TestTrack Pro&lt;/a&gt; - Bug and defect tracking software for Windows, Mac OS X, Linux and Solaris.(Seapine Software, Inc.) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.tierasoft.com/"&gt;Tiera Software Defect Manager&lt;/a&gt; - Software development and support suite (bug tracking, call tracking, time tracking) for software and consulting companies. Windows and web browser based. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sparta-systems.com"&gt;TrackWise&lt;/a&gt; - Customizable bug and defect tracking software. (Sparta Systems, Inc.) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.webpts.com"&gt;WebPTS&lt;/a&gt; - Online software error tracking system. Features include - knowledge-base, attachments, customization. Encrypted access available. &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-5503272547176198267?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/5503272547176198267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=5503272547176198267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/5503272547176198267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/5503272547176198267'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/09/track-and-quash-bugs.html' title='Track and quash bugs'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-1060955357208513848</id><published>2009-08-21T08:16:00.000-05:00</published><updated>2009-09-03T08:18:56.608-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Domain Modeling</title><content type='html'>&lt;p&gt;&lt;a title="Multiple Inheritance in Java" href="http://www.flickr.com/photos/23585397@N00/538540043/"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" border="0" alt="Multiple Inheritance in Java" align="right" src="http://static.flickr.com/1425/538540043_0d3844c8fa_m.jpg" /&gt;&lt;/a&gt;Domain modeling is the determination of a &lt;a href="http://en.wikipedia.org/wiki/Conceptual_model_%28computer_science%29"&gt;conceptual model&lt;/a&gt; of a system. This describes the various entities involved in a system and their relationships.&lt;/p&gt;  &lt;p&gt;The key items in a domain model are the entities and their relationships to each other. Domain modeling can be done with specialized tools but is usually done with UML Class diagrams.&lt;/p&gt;  &lt;p&gt;Domain modeling addresses the issue of complexity in designing software.&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;em&gt;&lt;a href="http://domaindrivendesign.org/resources/what_is_ddd"&gt;The Challenge of Complexity&lt;/a&gt;&lt;/em&gt;&lt;/h4&gt;    &lt;p&gt;&lt;em&gt;of course many things can put a project off course, bureaucracy, unclear objectives, lack of resources, to name a few, but it is the approach to design that largely determines how complex software can become. When complexity gets out of hand, the software can no longer be understood well enough to be easily changed or extended. By contrast, a good design can make opportunities out of those complex features.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Some of these design factors are technological, and a great deal of effort has gone into the design of networks, databases, and other technical dimension of software. Books have been written about how to solve these problems. Developers have cultivated their skills.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Yet the most significant complexity of many applications is not technical. It is in the domain itself, the activity or business of the user. When this domain complexity is not dealt with in the design, it won’t matter that the infrastructural technology is well-conceived. A successful design must systematically deal with this central aspect of the software.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The domain model is created in order to document the key concepts, and the domain-vocabulary of the system being modeled. The model identifies the relationships among all major entities within the system, and usually identifies their important methods and attributes. The domain model provides a structural view of the system that can be complemented by additional dynamic views in &lt;a href="http://en.wikipedia.org/wiki/Use_Case"&gt;Use Case&lt;/a&gt; models.&lt;/p&gt;  &lt;p&gt;The domain model can be used at the construction phase of the &lt;a href="http://en.wikipedia.org/wiki/Software_development_cycle"&gt;software development cycle&lt;/a&gt; since the semantics shown in the model can be used in the source code. Entities become classes, while methods and attributes can be implemented in the source code; the same names typically appear in the source code. The process of generating code from the model in this scenario is called &lt;a href="http://en.wikipedia.org/wiki/Forward_engineering#MDA_approach"&gt;forward engineering&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The domain model is one of the central artifacts in the project development approach called &lt;a href="http://en.wikipedia.org/wiki/Feature_Driven_Development"&gt;Feature Driven Development&lt;/a&gt; (FDD).&lt;/p&gt;  &lt;p&gt;In &lt;a href="http://en.wikipedia.org/wiki/Unified_Modelling_Language"&gt;UML&lt;/a&gt;, a &lt;a href="http://en.wikipedia.org/wiki/Class_diagram"&gt;class diagram&lt;/a&gt; is used to represent the domain model.&lt;/p&gt;  &lt;p&gt;In &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;Domain-driven design&lt;/a&gt;, the domain model (Entities and Value objects) is a part of the &lt;a href="http://en.wikipedia.org/wiki/Domain_layer"&gt;Domain layer&lt;/a&gt; which also includes other concepts such as Services.&lt;/p&gt;  &lt;p&gt;An important benefit of a domain model is that it describes and constrains the system scope. The domain model can be effectively used to verify and validate the understanding of the problem domain among various stakeholders of the project group. It is especially helpful as a communication tool and a focusing point between technical and business teams.&lt;/p&gt;  &lt;h4&gt;The domain layer&lt;/h4&gt;  &lt;p&gt;The domain layer is a software concept. It is one of the layers in a typical &lt;a href="http://en.wikipedia.org/wiki/Multilayered_architecture"&gt;multilayered architecture&lt;/a&gt; for information systems. One of the best and most well-known sources of information about how to use a domain layer can be found in Eric Evans's book about &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;Domain-driven design&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://en.wikipedia.org/wiki/Domain_model"&gt;domain model&lt;/a&gt; is a part of the domain layer. It is a software model with classes that represents actual concepts from the reality. These concepts are called Entities and Value objects in the terminology of Domain-driven design (DDD). There are some other DDD concepts that are not part of a domain model, e.g. Services and Repositories, but still part of the domain layer.&lt;/p&gt;  &lt;div&gt;The Domain layer is also known as the &lt;a href="http://en.wikipedia.org/wiki/Business_layer"&gt;Business layer&lt;/a&gt;.&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;a href="http://domaindrivendesign.org/resources/ddd_terms"&gt;&lt;em&gt;Glossary of Domain-Driven Design Terms&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;    &lt;p&gt;&lt;em&gt;Excerpted from &lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Domain-Driven%2520Design%2520Book"&gt;&lt;em&gt;Domain-Driven Design Book&lt;/em&gt;&lt;/a&gt;      &lt;br /&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Aggregate"&gt;&lt;em&gt;Aggregate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the AGGREGATE, designated as the root. A set of consistency rules applies within the AGGREGATE'S boundaries.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Analysis%2520Pattern"&gt;&lt;em&gt;Analysis Pattern&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A group of concepts that represents a common construction in business modeling. It may be relevant to only one domain or may span many domains (Fowler 1997, p. 8).        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Assertion"&gt;&lt;em&gt;Assertion&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A statement of the correct state of a program at some point, independent of how it does it. Typically, an ASSERTION specifies the result of an operation or an invariant of a design element.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Bounded%2520Context"&gt;&lt;em&gt;Bounded Context&lt;/em&gt;&lt;/a&gt;&lt;em&gt; The delimited applicability of a particular model. BOUNDING CONTEXTS gives team members a clear and shared understanding of what has to be consistent and what can develop independently.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Client"&gt;&lt;em&gt;Client&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A program element that is calling the element under design, using its capabilities.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Cohesion"&gt;&lt;em&gt;Cohesion&lt;/em&gt;&lt;/a&gt;&lt;em&gt; Logical agreement and dependence.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Command"&gt;&lt;em&gt;Command&lt;/em&gt;&lt;/a&gt;&lt;em&gt; (a.k.a. modifier) An operation that effects some change to the system (for example, setting a variable). An operation that intentionally creates a side effect.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Context"&gt;&lt;em&gt;Context&lt;/em&gt;&lt;/a&gt;&lt;em&gt; The setting in which a word or statement appears that determines its meaning. See &lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Bounded%2520Context"&gt;&lt;em&gt;Bounded Context&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Conceptual%2520Contour"&gt;&lt;em&gt;Conceptual Contour&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An underlying consistency of the domain itself, which, if reflected in a model, can help the design accommodate change more naturally.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Context%2520Map"&gt;&lt;em&gt;Context Map&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A representation of the &lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Bounded%2520Context"&gt;&lt;em&gt;Bounded Context&lt;/em&gt;&lt;/a&gt;&lt;em&gt;s involved in a project and the actual relationships between them and their models.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Core%2520Domain"&gt;&lt;em&gt;Core Domain&lt;/em&gt;&lt;/a&gt;&lt;em&gt; The distinctive part of the model, central to the user's goals, that differentiates the application and makes it valuable.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Declarative%2520Design"&gt;&lt;em&gt;Declarative Design&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A form of programming in which a precise description of properties actually controls the software. An executable specification.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Deep%2520Model"&gt;&lt;em&gt;Deep Model&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An incisive expression of the primary concerns of the domain experts and their most relevant knowledge. A deep model sloughs off superficial aspects of the domain and naive interpretations.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Design%2520Pattern"&gt;&lt;em&gt;Design Pattern&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A description of communicating objects and classes that are customized to solve a general design problem in a particular context. (Gamma et al. 1995, p. 3)        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Distillation"&gt;&lt;em&gt;Distillation&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A process of separating the components of a mixture to extract the essence in a form that makes it more valuable and useful. In software design, the abstraction of key aspects in a model, or the partitioning of a larger system to bring the CORE DOMAIN to the fore.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Domain"&gt;&lt;em&gt;Domain&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A sphere of knowledge, influence, or activity.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Domain-Driven%2520Design"&gt;&lt;em&gt;Domain-Driven Design&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An approach to software development that suggests that (1) For most software projects, the primary focus should be on the domain and domain logic; and (2) Complex domain designs should be based on a model.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Domain%2520Expert"&gt;&lt;em&gt;Domain Expert&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A member of a software project whose field is the domain of the application, rather than software development. Not just any user of the software, the domain expert has deep knowledge of the subject.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Domain%2520Layer"&gt;&lt;em&gt;Domain Layer&lt;/em&gt;&lt;/a&gt;&lt;em&gt; That portion of the design and implementation responsible for domain logic within a LAYERED ARCHITECTURE. The domain layer is where the software expression of the domain model lives.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Entity"&gt;&lt;em&gt;Entity&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An object fundamentally defined not by its attributes, but by a thread of continuity and identity.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Factory"&gt;&lt;em&gt;Factory&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A mechanism for encapsulating complex creation logic and abstracting the type of a created object for the sake of a client.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Function"&gt;&lt;em&gt;Function&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An operation that computes and returns a result without observable side effects.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Immutable"&gt;&lt;em&gt;Immutable&lt;/em&gt;&lt;/a&gt;&lt;em&gt; The property of never changing observable state after creation. implicit concept A concept that is necessary to understand the meaning of a model or design but is never mentioned.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Intention-Revealing%2520Interface"&gt;&lt;em&gt;Intention-Revealing Interface&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A design in which the names of classes, methods, and other elements convey both the original developer's purpose in creating them and their value to a client developer.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Invariant"&gt;&lt;em&gt;Invariant&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An Assertion about some design element that must be true at all times, except during specifically transient situations such as the middle of the execution of a method, or the middle of an uncommitted database transaction.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Iteration"&gt;&lt;em&gt;Iteration&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A process in which a program is repeatedly improved in small steps. Also, one of those steps.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Large-Scale%2520Structure"&gt;&lt;em&gt;Large-Scale Structure&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A set of high-level concepts, rules, or both that establishes a pattern of design for an entire system. A language that allows the system to be discussed and understood in broad strokes.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Layered%2520Architecture"&gt;&lt;em&gt;Layered Architecture&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A technique for separating the concerns of a software system, isolating a domain layer, among other things.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Life%2520Cycle"&gt;&lt;em&gt;Life Cycle&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A sequence of states an object can take on between creation and deletion, typically with constraints to ensure integrity when changing from one state to another. May include migration of an &lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Entity"&gt;&lt;em&gt;Entity&lt;/em&gt;&lt;/a&gt;&lt;em&gt; between systems and different &lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Bounded%2520Contexts"&gt;&lt;em&gt;Bounded Contexts&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Model"&gt;&lt;em&gt;Model&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A system of abstractions that describes selected aspects of a domain and can be used to solve problems related to that domain.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Model-Driven%2520Design"&gt;&lt;em&gt;Model-Driven Design&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A design in which some subset of software elements corresponds closely to elements of a model. Also, a process of codeveloping a model and an implementation that stay aligned with each other.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Modeling%2520Paradigm"&gt;&lt;em&gt;Modeling Paradigm&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A particular style of carving out concepts in a domain, combined with tools to create software analogs of those concepts (for example, object-oriented programming and logic programming).        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Repository"&gt;&lt;em&gt;Repository&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A mechanism for encapsulating storage, retrieval, and search behavior which emulates a collection of objects.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Responsibility"&gt;&lt;em&gt;Responsibility&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An obligation to perform a task or know information (Wirfs-Brock et al. 2003, p. 3).        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Service"&gt;&lt;em&gt;Service&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An operation offered as an interface that stands alone in the model, with no encapsulated state.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Side%2520Effect"&gt;&lt;em&gt;Side Effect&lt;/em&gt;&lt;/a&gt;&lt;em&gt; Any observable change of state resulting from an operation, whether intentional or not, even a deliberate update.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Side%2520Effect%2520Free%2520Function"&gt;&lt;em&gt;Side Effect Free Function&lt;/em&gt;&lt;/a&gt;&lt;em&gt; See &lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Function"&gt;&lt;em&gt;Function&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Standalone%2520Class"&gt;&lt;em&gt;Standalone Class&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A class that can be understood and tested without reference to any others, except system primitives and basic libraries.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Stateless"&gt;&lt;em&gt;Stateless&lt;/em&gt;&lt;/a&gt;&lt;em&gt; The property of a design element that allows a client to use any of its operations without regard to the element's history. A stateless element may use information that is accessible globally and may even change that global information (that is, it may have side effects) but holds no private state that affects its behavior.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Strategic%2520Design"&gt;&lt;em&gt;Strategic Design&lt;/em&gt;&lt;/a&gt;&lt;em&gt; Modeling and design decisions that apply to large parts of the system. Such decisions affect the entire project and have to be decided at team level.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Supple%2520Design"&gt;&lt;em&gt;Supple Design&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A design that puts the power inherent in a deep model into the hands of a client developer to make clear, flexible expressions that give expected results robustly. Equally important, it leverages that same deep model to make the design itself easy for the implementer to mold and reshape to accommodate new insight.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Ubiquitous%2520Language"&gt;&lt;em&gt;Ubiquitous Language&lt;/em&gt;&lt;/a&gt;&lt;em&gt; A language structured around the domain model and used by all team members to connect all the activities of the team with the software.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Unification"&gt;&lt;em&gt;Unification&lt;/em&gt;&lt;/a&gt;&lt;em&gt; The internal consistency of a model such that each term is unambiguous and no rules contradict.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Test-Driven%2520Development"&gt;&lt;em&gt;Test-Driven Development&lt;/em&gt;&lt;/a&gt;&lt;em&gt; TDD is a lightweight programming methodology that emphasizes fast, incremental development and especially writing tests before writing code. Ideally these follow one another in cycles measured in minutes. (see full definition under &lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Test-Driven%2520Development"&gt;&lt;em&gt;Test-Driven Development&lt;/em&gt;&lt;/a&gt;&lt;em&gt; topic)        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Value%2520Object"&gt;&lt;em&gt;Value Object&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An object that describes some characteristic or attribute but carries no concept of identity.        &lt;br /&gt;&lt;/em&gt;&lt;a href="http://domaindrivendesign.org/freelinking/Whole%2520Value"&gt;&lt;em&gt;Whole Value&lt;/em&gt;&lt;/a&gt;&lt;em&gt; An object that models a single, complete concept. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-1060955357208513848?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/1060955357208513848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=1060955357208513848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/1060955357208513848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/1060955357208513848'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/08/domain-modeling.html' title='Domain Modeling'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-5223810159553498072</id><published>2009-08-10T10:05:00.001-05:00</published><updated>2009-08-10T10:12:25.341-05:00</updated><title type='text'>WebForms validation</title><content type='html'>&lt;p&gt;I am still surprised at how many web forms I come across that do not perform good validation or provide a substandard user experience when doing validation. Clearly the optimal place to do lots of simple form validation should be on the client and probably in real-time as the user fills out the form. Sadly most form field validation implementations do this on the server requiring a &lt;a href="http://en.wikipedia.org/wiki/Postback" target="_blank"&gt;postback&lt;/a&gt; and the crappy user experience that comes with that. In this day and age, I would hope that all validation could happen on the client. A few Ajax libraries like &lt;a href="http://jqueryfordesigners.com/demo/ajax-validation.php" target="_blank"&gt;jQuery&lt;/a&gt; provide client side form field validation components and Flex provides for a truly flexible &lt;a href="http://fx3x.blogspot.com/2009/08/validating-data-in-flex-3.html" target="_blank"&gt;form field validation framework&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;ASP.NET provides server side validation controls that perform server side validation and you can use also do &lt;a href="http://www.asp.net/AJAX/Documentation/Live/Tutorials/UsingFormsAuthenticationTutorial.aspx" target="_blank"&gt;Forms Authentication with ASP.NET AJAX&lt;/a&gt;. There is also a client side validation implemented using JScript. (see &lt;a href="http://msdn.microsoft.com/en-us/library/aa479045.aspx#aspplusvalid_clientside"&gt;Client-Side Validation&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;In ASP.NET, there are six validation controls included. They are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;The RequiredFieldValidation Control&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;The CompareValidator Control&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;The RangeValidator Control&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;The RegularExpressionValidator Control&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;The CustomValidator Control&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;All of the validation controls inherit from the base class &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.web.ui.webcontrols.basevalidator.aspx&amp;amp;ei=rzOASpjJMNOQtged183zAQ&amp;amp;rct=j&amp;amp;q=BaseValidator+&amp;amp;usg=AFQjCNEZlf4-Z1IYFjVWz43q9303-H6AhA&amp;amp;sig2=Z2PeTr274c2pUjW7v0HoLA" target="_blank"&gt;BaseValidator&lt;/a&gt;.&amp;#160; The all have the following common properties and methods.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;ControlToValidate&lt;/b&gt; - This value is which control the validator is applied to. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;ErrorMessage&lt;/b&gt; - This is the error message that will be displayed in the validation summary. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;IsValid&lt;/b&gt; - Boolean value for whether or not the control is valid. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Validate&lt;/b&gt; - Method to validate the input control and update the IsValid property. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Display&lt;/b&gt; - This controls how the error message is shown. Here are the possible options:       &lt;ul&gt;       &lt;li&gt;None (The validation message is never displayed.) &lt;/li&gt;        &lt;li&gt;Static (Space for the validation message is allocated in the page layout.) &lt;/li&gt;        &lt;li&gt;Dynamic (Space for the validation message is dynamically added to the page if validation fails.) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;h5&gt;&lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic2" target="_blank"&gt;Understanding the Difference Between Server-Side and Client-Side Validation&lt;/a&gt;&lt;/em&gt;&lt;/h5&gt;    &lt;p&gt;&lt;em&gt;Many people new to ASP.NET don't know the difference between client-side and server-side validation. You must understand these two different ways of validating the data users input into a Web form.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;After the user enters data into a Web form, clicks the &lt;strong&gt;Submit&lt;/strong&gt; button, and sends the form data to the server as a request, you can perform server-side validation on the data. If the data is incorrect or not valid, you can send back a response stating this. If, however, when the user clicks the &lt;strong&gt;Submit&lt;/strong&gt; button, a scripting language that is part of the overall HTML page is initiated to check the validity of the data before it is sent to the server, this is client-side validation.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;It was a lot easier to understand the difference between these forms of validation when you coded Active Server Pages 3.0 because, as the programmer, you personally performed almost all data validation. You yourself either programmed it to be client-side or server-side.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;When you used server-side validation with ASP 3.0, if something the user entered was wrong, you could repost the form and ask the user to correct the information in that particular field of the form. Sometimes, you carried the correct input from the other fields back to the form page, and populated the fields for the users so they didn't have to re-enter the same information again. Some sites on the Internet don't carry this inputted information back to the form page, and the user is then required to enter all the information into the form a second time. Obviously, this may cause people to leave your site for another.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The bad thing about server-side validation is that it requires trips back and forth to the server. This takes a lot of resources and makes for a slower-paced form for the user. Nothing is more annoying to a user who is on a dial-up connection than clicking the &lt;strong&gt;Submit&lt;/strong&gt; button on the form and then waiting for 20 seconds to find out that they didn't enter their password correctly.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The other option for form validation is to put some client-side JavaScript or VBScript at the top of the ASP page that checks if the information in the fields is correct. This takes care of the problem of making unnecessary trips to the server, but it requires another language to learn and manage. JavaScript is a great language, but takes a lot of time to master, and there are always problems getting your JavaScript code to work on different browsers. Listing 1 shows you an example of using client-side JavaScript to perform form validation.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;Listing 1: Client-side JavaScript for form validation&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;pre&gt;&lt;em&gt;&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;Function CheckForm(form)&lt;br /&gt;{&lt;br /&gt;  for(var intCtr = 0; intCtr &amp;lt;= (form.elements.length - 5); ++intCtr)&lt;br /&gt;  {&lt;br /&gt;    var temp = form.elements[intCtr];&lt;br /&gt;    if(temp.type == &amp;quot;text&amp;quot; &amp;amp;&amp;amp; temp.value == &amp;quot;&amp;quot;)&lt;br /&gt;    {&lt;br /&gt;    alert(&amp;quot;Please Enter All Information!&amp;quot;);&lt;br /&gt;      temp.focus();&lt;br /&gt;      return false;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt;}&lt;br /&gt;//--&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/em&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;This sample piece of JavaScript does some validation, but it doesn't check for all the in-formation that you might need on the form you are building. This piece of code determines only whether the user entered anything at all in all five fields within the form. It does not determine whether the user entered an actual e-mail address within the e-mail address text box, whether the user entered a number between two given numbers, or whether the password and the confirm password text boxes match. After awhile, you can see that you need many JavaScript functions to obtain the level of form validation required.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;h5&gt;&lt;em&gt;.NET to the Rescue!&lt;/em&gt;&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Developers who used classic Active Server Pages 3.0 to develop Web pages might remember that they used to spend a considerable amount of their time developing validation mechanics in their pages. It was time consuming if you did it right. It was most efficient to do the validation of the form on the client-side to limit the number of requests and responses required to work through an application. As I stated, however, you were never quite sure if the requesting browser would understand the scripting code that you used for the validation. So, it was usually better, especially for critical Web applications, to bring the validation to the server.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;ASP.NET has changed this by giving you the capability to use the validation server controls that are provided with the other new controls at your disposal. What makes these validation server controls effective is that when an ASP.NET page containing these controls is requested, it is the ASP.NET engine that decides whether to perform the validation on the client or on the server depending on the browser that is making the request. Therefore, your page's functionality changes depending on the requesting browser—thus enabling you to make your Web pages the best they can possibly be—rather than dummying-down your Web applications for the lowest common denominator.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Validation server controls are the only type of ASP.NET server controls that also generate client-side script. All the other controls work with the idea of making postbacks to the server (a request to the server to get a response).&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Presently, six different validation server controls are available for ASP.NET: &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;ul&gt;&lt;br /&gt;    &lt;li&gt;&lt;em&gt;RequiredFieldValidator &lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;&lt;em&gt;CompareValidator &lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;&lt;em&gt;RangeValidator &lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;&lt;em&gt;RegularExpressionValidator &lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;&lt;em&gt;CustomValidator &lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;    &lt;li&gt;&lt;em&gt;ValidationSummary &lt;/em&gt;&lt;/li&gt;&lt;br /&gt;  &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;You can also customize validation for your own needs. Then, if there are any errors in the form data, these validation server controls enable you to customize the display of error information on the browser.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;You place validation server controls on your page as you would any other type of controls. After the user submits the form, the user's form information is sent to the appropriate validation control, where it is evaluated. If the information doesn't validate, the control sets a page property that indicates this. After all the form information is sent to all the validation server controls, if one or more of the validation server controls cannot validate the information sent to it, the entire form input is found to be invalid, and the user is notified. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;see &lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic2" target="_blank"&gt;Understanding the Difference Between Server-Side and Client-Side Validation&lt;/a&gt;&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;h4&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479045.aspx#aspplusvalid_clientside"&gt;&lt;em&gt;Client-Side Validation&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;If client-side validation is enabled for your page, a whole different sequence occurs in-between the round trips. Client-side validation works using client JScript®. No binary components are needed to make it work. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;While the JScript language is reasonably well standardized, the Document Object Model (DOM) for interacting with HTML documents in browsers did not have a widely adopted standard at the time these components were developed and tested. As a result, client-side validation only takes place in Internet Explorer 4.0 and later, because it targets the Internet Explorer DOM.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;From a server point of view, client-side validation just means that the validation controls emit different stuff into the HTML. Other than that, their sequence of events is exactly the same. The server-side checks are still carried out. This may seem redundant, but it is important because of the following: &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Some validation controls may not support client scripting. A good example: if you are using a CustomValidator with a server validation function but no client validation function. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Security considerations. Someone can very easily take a page with script and disable or change it. You should not rely on script to stop bad data getting into to your system, only to provide more immediate feedback to your users. For this reason, if you are using a CustomValidator, you should not provide a client validation function without a corresponding server validation function. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Every validation control makes sure that a standard block of client script is emitted into the page. This is actually just a small amount of script that includes a reference to code in a script library called WebUIValidation.js. This file, which is downloaded separately and can be cached by the browser, contains all of logic for client-side validation. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;h5&gt;&lt;em&gt;About the Script Library&lt;/em&gt;&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Because the validation Web controls script that is in a script library, it is not necessary to emit all of the code for client-side validation directly into the page, although it acts as though this is what has happened. The main script file reference looks like this:&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;em&gt;&amp;lt;script language=&amp;quot;javascript&amp;quot; &lt;br /&gt;        src=&amp;quot;/aspnet_client/system_web/1_0_3617_0/WebUIValidation.js&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/em&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;By default, the script file will be installed into your default root in the aspnet_client directory, and it is referenced using a root-relative script include directive, which begins with the forward slash. This reference means that each individual project does not have to include the script library inside it, and all pages on the same machine can reference the same file. You will notice that it also has the common language runtime version number in the path, so that different versions of the runtime can run on the same machine. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;If you take a look around your default virtual root, you can find this file and take a look inside it. The location of these files is specified in the machine.config file, an XML file used for most ASP.NET settings. Here is the definition of the location within that file:&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;em&gt;        &amp;lt;webControls&lt;br /&gt;            clientScriptsLocation=&amp;quot;/aspnet_client/{0}/{1}/&amp;quot;&lt;br /&gt;        /&amp;gt;&lt;/em&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;You are encouraged to read the script to see more of what is going on. However, it is not recommended that you modify these scripts, because their function is very closely tied to a particular version of the run time. If the run time is updated, the scripts may need a corresponding update, and you will have to either lose your changes or face problems with the scripts not working. If you must change the scripts for a particular project, take a copy of the files and point your project to them by overriding the location of the files with a private web.config file.It is perfectly fine to change this location to be a relative or absolute reference.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;h5&gt;&lt;em&gt;Disabling Client-Side Validation&lt;/em&gt;&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;There are some cases where you may not want client-side validation. If the number of input fields is very small, client-side validation may not be of much benefit. You may have logic that needs a round trip to the server every time anyway. You may find that the dynamically appearing messages on the client have an adverse affect on your layout.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Note&amp;#160;&amp;#160; &lt;/strong&gt;The way to disable client-side validation is to set the &lt;strong&gt;EnableClientScript&lt;/strong&gt; property of the validator or ValidationSummary control to False. It is possible to have a mixture of server-only and client-sever validation components on the same page.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;h5&gt;&lt;em&gt;The Client-Side Sequence&lt;/em&gt;&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;This is the sequence of events when a page with client-side validation runs: &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;As the page is loaded into the browser, there is some initialization done on each validation control. The controls are emitted as &amp;lt;span&amp;gt; tags with HTML attributes that correspond closely to their properties on the server. The most important thing that happens here is that any input elements referenced by the validators are &amp;quot;hooked up.&amp;quot; The referenced input elements have their client events modified so that the validation routines are called whenever the input is changed. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Code in the script library will be executed as users tab from field to field. The validation conditions are re-evaluated when a dependent field is changed, and the validator is made visible or invisible as appropriate. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;When the user pushes a button that has the &lt;strong&gt;CausesValidation&lt;/strong&gt; property set to True, the validators are all re-evaluated. If they are all valid, then the form is posted to the server. If there are one or more errors, a number of things happen: &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;The submit is cancelled. The form does not get posted back to the server. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Any invalid validators become visible. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;If there is a validation summary with ShowSummary=true, it will collect all the errors from the validation controls and update its contents with them. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;If there is a validation summary with ShowMessageBox=true, it will collect the errors and display them in client message box. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;Because they are executed whenever the inputs change as well as at submit time, client side validation controls generally evaluate two or more times on client. Remember that they will still be re-evaluated on the server once the submit takes place.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;h5&gt;&lt;em&gt;The Client-Side API&lt;/em&gt;&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;There is a mini-API that you can use on the client to achieve various effects with your own client-side code. Because it is not possible to make certain routines hidden, you can theoretically make use of any of the variables, attributes, and functions defined by client-side validation script. However, many of them are implementation details that may be changed. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;&lt;em&gt;see &lt;a href="http://msdn.microsoft.com/en-us/library/aa479045.aspx#aspplusvalid_clientside"&gt;Client-Side Validation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Some useful ASP.NET validation links&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479045.aspx" target="_blank"&gt;ASP.NET Validation in Depth&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479045.aspx#aspplusvalid_clientside"&gt;Client-Side Validation&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx" target="_blank"&gt;Validating ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/debza5t0.aspx" target="_blank"&gt;Validation ASP.NET Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic3"&gt;The RequiredFieldValidator Control&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic4"&gt;The CompareValidator Control&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic5"&gt;The RangeValidator Control&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic6"&gt;The RegularExpressionValidator Control&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic7"&gt;The CustomValidator Control&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa479013.aspx#aspnet-validateaspnetservercontrols_topic8"&gt;The ValidationSummary Control&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=46" target="_blank"&gt;ASP.NET Validator Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/7kh55542.aspx"&gt;Validating User Input in ASP.NET Web Pages&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms178313.aspx"&gt;What's New in Validation&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bwd43d0x.aspx"&gt;Types of Validation for ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms227424.aspx"&gt;Specifying Validation Groups&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/yb52a4x0.aspx"&gt;Client-Side Validation for ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/c6k4b2x3.aspx"&gt;Special-Case Validation Results for ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ksfy5wzx.aspx"&gt;Validation Error Message Layout for ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dh9ad08f.aspx"&gt;How to: Test Validity Programmatically for ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bt244wbb.aspx"&gt;How to: Disable Validation for ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/hxet6xwx.aspx"&gt;How to: Validate Programmatically for ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-5223810159553498072?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/5223810159553498072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=5223810159553498072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/5223810159553498072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/5223810159553498072'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/08/webforms-validation.html' title='WebForms validation'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-4269897094189209399</id><published>2009-07-28T23:17:00.001-05:00</published><updated>2009-07-28T23:17:11.548-05:00</updated><title type='text'>Microsoft Web Platform Installer 2.0 RC</title><content type='html'>&lt;p&gt;At long last there is an integrated installation solution for MS web solutions. &lt;/p&gt;  &lt;p&gt;The Microsoft Web Platform Installer 2.0 (Web PI) is a free tool that makes it simple to download, install and keep up-to-date with the latest components of the Microsoft Web Platform, including Internet Information Services (IIS), SQL Server Express, .NET Framework and Visual Web Developer. In addition, install popular open source ASP.NET and PHP web apps with the Web PI.&lt;/p&gt;  &lt;h5&gt;What's Inside?&lt;/h5&gt; &lt;dl&gt;&lt;dt&gt;&lt;a href="http://www.microsoft.com/web/gallery/"&gt;&lt;img alt="Windows Web App Gallery" src="http://www.microsoft.com/web/media/icons/wag-icon.png" /&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;     &lt;h6&gt;Popular Web Apps&lt;/h6&gt;      &lt;p&gt;Install free popular ASP.NET and PHP web apps such as DotNetNuke and WordPress.&lt;/p&gt;   &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;a href="http://www.microsoft.com/web/platform/framework.aspx"&gt;&lt;img alt="Platform: Framework" src="http://www.microsoft.com/web/media/icons/dotnet-icon.png" /&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;     &lt;h6&gt;.NET Framework&lt;/h6&gt;      &lt;p&gt;Install the latest version of the .NET Framework. This includes everything you need to work with ASP.NET.&lt;/p&gt;   &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;a href="http://www.microsoft.com/web/platform/server.aspx"&gt;&lt;img alt="Platform: Web Server" src="http://www.microsoft.com/web/media/icons/windows-icon.png" /&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;     &lt;h6&gt;IIS and Extensions&lt;/h6&gt;      &lt;p&gt;Install the latest version of IIS, including latest IIS Web extensions like IIS Media Services.&lt;/p&gt;   &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;a href="http://www.microsoft.com/web/platform/database.aspx"&gt;&lt;img alt="Platform: Database" src="http://www.microsoft.com/web/media/icons/sql-icon.png" /&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;     &lt;h6&gt;SQL Server&lt;/h6&gt;      &lt;p&gt;Install the latest version of SQL Server 2008 Express. This includes both the database engine and tools.&lt;/p&gt;   &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;a href="http://www.microsoft.com/web/platform/tools.aspx"&gt;&lt;img alt="Platform: Tools" src="http://www.microsoft.com/web/media/icons/vs-logo.png" /&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;     &lt;h6&gt;Visual Web Developer&lt;/h6&gt;      &lt;p&gt;Install the latest version of Visual Web Developer Express, Our full featured free web development tool.&lt;/p&gt;   &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;img alt="Extra and Goodies" src="http://www.microsoft.com/web/media/icons/extras-icon.png" /&gt;&lt;/dt&gt;&lt;dd&gt;     &lt;h6&gt;Extra and Goodies&lt;/h6&gt;      &lt;p&gt;In addition to everything above, the Web PI also includes the latest community version of PHP for Windows.&lt;/p&gt;   &lt;/dd&gt;&lt;/dl&gt;  &lt;p&gt;&lt;u&gt;Some coverage about it:&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;From the Scott&lt;/u&gt;&lt;/p&gt;  &lt;h4&gt;Microsoft Web Platform Installer &lt;/h4&gt;  &lt;p&gt;One of the cool new releases coming out this year is a small download manager - the Microsoft Web Platform Installer - that makes installing and configuring web server and web development stacks really easy.&amp;#160; It is a free tool that you can download from the &lt;a href="http://www.microsoft.com/web"&gt;www.microsoft.com/web&lt;/a&gt; site (here is the &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;direct link to the installer&lt;/a&gt; – choose the 2.0 version).&amp;#160; It works with Windows XP, Vista, Windows 7, Windows Server 2003 and Windows Server 2008.&lt;/p&gt;  &lt;p&gt;The Web Platform Installer provides an easy way to quickly install and customize all the software you need to develop or deploy web sites and applications on a Windows machine.&amp;#160; The tool automatically analyses what your system currently has installed, allows you to easily mark additional components to be added, and then automates installing them all at once when you click the install button (saving you from having to manually install each one yourself).&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img height="302" src="http://scottguimages.s3.amazonaws.com/webpi2.PNG" width="405" /&gt;&lt;/p&gt;  &lt;p&gt;For example, you can click the “Web Server” section above to customize the individual IIS web server modules installed on the box.&amp;#160; This includes both the built-in IIS modules that ship with Windows (like the directory browsing module), as well as additional modules available as separate downloads.&amp;#160; Below I’ve selected two additional modules – the Application Request Routing and URL Rewrite modules – to be installed:&lt;/p&gt;  &lt;p&gt;&lt;img height="313" src="http://scottguimages.s3.amazonaws.com/webpi3.PNG" width="420" /&gt;&lt;/p&gt;  &lt;p&gt;The URL Rewrite module is a free Microsoft module that enables you to publish custom URLs from your sites and optimize them for search engine optimization (SEO).&amp;#160; You can enforce SEO rules (consistent casing, embedded keywords, etc) and customize how your site looks from an external perspective however you want (the admin tool will even help guide you to write the regular expression rules):&lt;/p&gt;  &lt;p&gt;&lt;img height="312" src="http://scottguimages.s3.amazonaws.com/webpi4.PNG" width="419" /&gt;&lt;/p&gt;  &lt;p&gt;The Application Request Routing is a free Microsoft module that supports forward-proxy style scenarios, and enables dynamic load-balancing of requests across multiple web-server machines (allowing you to scale out, move machines behind DMZ firewall scenarios, and bring machines in and out of a farm for maintenance without disruption).&amp;#160; &lt;/p&gt;  &lt;p&gt;In addition to URL Rewrite and Application Request Routing, there are dozens of other web server modules you can select that enable WebDAV, Secure FTP, automated deployment, remote database management through the IIS admin tool for hosted scenarios, media server streaming scenarios, and more.&amp;#160; You can also install framework additions like ASP.NET MVC, .NET 3.5 SP1, SQL Express and associated SQL administration tools, Visual Web Developer 2008 Express, and more.&lt;/p&gt;  &lt;h5&gt;&lt;u&gt;Windows Web Application Gallery&lt;/u&gt;&lt;/h5&gt;  &lt;p&gt;The web platform installer also integrates with the new Windows Web Application Gallery now online: &lt;a href="http://www.microsoft.com/web/gallery"&gt;www.microsoft.com/web/gallery&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This gallery allows you to easily install existing web applications onto your server.&amp;#160; The gallery contains a variety of popular .NET open source applications (like DotNetNuke, ScrewTurn Wiki and Umbraco CMS) as well as PHP open source applications (including WordPress and Drupal).&amp;#160; You can easily browse and install them using the Web Platform Installer as well (just click the “Web Applications” tab and check the applications you want to install):&lt;/p&gt;  &lt;p&gt;&lt;img height="300" src="http://scottguimages.s3.amazonaws.com/webpi5.PNG" width="403" /&gt;;&lt;/p&gt;  &lt;p&gt;In addition to downloading the application, the web platform installer will create a new site/application root and configure the appropriate site settings and optionally install the database.&lt;/p&gt;  &lt;h5&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h5&gt;  &lt;p&gt;If you haven’t downloaded the Web Platform Installer yet I’d recommend taking a look at it.&amp;#160; I think you’ll find it makes it much easier to configure and get a box up and running, and makes it much easier to find and install the various components of the Windows web server stack, as well as find and install applications to use on top of it.&amp;#160; Overtime you’ll see us ship more and more functionality this way.&amp;#160; &lt;/p&gt;  &lt;p&gt;You can &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;download&lt;/a&gt; and start using the Web Platform Installer 2.0 Beta today.&amp;#160; We’ll ship the final release of it this summer.&lt;/p&gt;  &lt;p&gt;Hope this helps,&lt;/p&gt;  &lt;p&gt;Scott&lt;/p&gt;  &lt;p&gt;&lt;u&gt;From the other Scott&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/aboutme.aspx"&gt;&lt;img title="Scott Hanselman" style="display: inline; margin-left: 0px; margin-right: 0px" alt="Scott Hanselman" src="http://www.hanselman.com/blog/images/author.jpg" align="right" /&gt;&lt;/a&gt;There's a renewed focus, in my opinion, to make things easier to find around &lt;a href="http://www.microsoft.com"&gt;The Big Blue Monster&lt;/a&gt;. I'm working with a bunch of folks on a more official version of &lt;a href="http://www.smallestdotnet.com"&gt;http://www.smallestdotnet.com&lt;/a&gt; and some changes around making the .NET Framework easier to find, as a small example.&lt;/p&gt;  &lt;p&gt;Getting a machine up to speed for Web Development is another thing that's kind of a hassle because you need to go get (and &lt;em&gt;know &lt;/em&gt;to go get) IIS7, Visual Web Developer 2008 Express Edition, SQL Server 2008 Express Edition and the .NET Framework, yada yada yada.&lt;/p&gt;  &lt;p&gt;There's a new site at &lt;a href="http://www.microsoft.com/web"&gt;http://www.microsoft.com/&lt;strong&gt;web&lt;/strong&gt;&lt;/a&gt; and a new (beta) of the &lt;a href="http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx"&gt;&lt;strong&gt;Microsoft Web Platform Installer&lt;/strong&gt;&lt;/a&gt; (&lt;a href="http://blogs.technet.com/windowsserver/archive/2008/10/02/the-microsoft-web-platform-installer-one-click-to-install-them-all.aspx"&gt;blog announcement&lt;/a&gt;). It's basically a super bootstrapper that keeps track of where to get stuff and organizes them as profiles.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/WebPlatformInstallerTryingtomakeiteasier_AD27/image_4.png"&gt;&lt;img title="Microsoft Web Platform Installer" height="316" alt="Microsoft Web Platform Installer" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/WebPlatformInstallerTryingtomakeiteasier_AD27/image_thumb_1.png" width="424" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If I select &amp;quot;Your Choice&amp;quot; I get a complete list from a catalog of things that can be downloaded. I can auto-select options from a dropdown like &amp;quot;PHP Developer&amp;quot; or &amp;quot;Classic ASP Developer.&amp;quot; Cool that those options are there as well as ASP.NET Developer. There's a manifest that it downloads to get the latest versions of each of these.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/WebPlatformInstallerTryingtomakeiteasier_AD27/image_6.png"&gt;&lt;img title="Web Platform Installer Choose Components" height="315" alt="Web Platform Installer Choose Components" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/WebPlatformInstallerTryingtomakeiteasier_AD27/image_thumb_2.png" width="422" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the Web Server tab, it'll pick the right IIS modules you'd need to get a site up, but it also shows as options some of the more interesting (and not well publicized) modules like &lt;a href="http://www.hanselman.com/blog/NewModulesForIIS7ApplicationRequestRoutingProxyAndLoadBalancingModule.aspx"&gt;ARR&lt;/a&gt; and &lt;a href="http://www.hanselman.com/blog/SqueezingTheMostOutOfIIS7MediaBitRateThrottling.aspx"&gt;BitRate Throttling&lt;/a&gt; that have been released since IIS7 came out.&lt;/p&gt;  &lt;p&gt;If you're running a Web Development shop, it's certainly a quick way to get everything you'd need installed, including the free version of &lt;a href="http://www.microsoft.com/express/vwd/"&gt;Visual Studio Web Express&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Check it out, and if you have any trouble or find anything interesting, you can report it directly to the team at the &lt;a href="http://forums.iis.net/1155.aspx"&gt;Web Platform Installer Forum&lt;/a&gt;. If you like it or hate it, let them now. It'd be interesting to see how extensible it can be and if they choose to extend it other developer products. &lt;/p&gt;  &lt;p&gt;from &lt;a href="http://www.hanselman.com/blog/WebPlatformInstallerTryingToMakeItEasierToSetupForWebDevelopment.aspx"&gt;Web Platform Installer: Trying to make it easier to setup for web development&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;From &lt;/u&gt;&lt;a href="http://blogs.msdn.com/user/Profile.aspx?UserID=3692"&gt;MikeOrmond&lt;/a&gt;&lt;/p&gt;  &lt;h6&gt;Web Platform Installer &lt;/h6&gt;  &lt;p&gt;I’ve realised that despite &lt;a href="http://www.bing.com/search?q=web+platform+installer"&gt;all the noise about it&lt;/a&gt;, I’ve pretty much managed to ignore the Web Platform Installer (WebPI) to date. Which is a shame because I know it does some pretty cool things, takes a lot of the drudgery out of &lt;a href="http://www.microsoft.com/Web/downloads/platform.aspx"&gt;&lt;img title="Web Platform Installer Download Page" height="177" alt="Web Platform Installer Download Page" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_11_3.png" width="218" align="left" border="0" /&gt;&lt;/a&gt;configuring your machine and, from today, I’m actually convinced that I would use it myself even though I’m pretty comfortable setting up my dev environment on a new box. (when I say a new box I really mean the same box fdisk’d. I like to think of that as new box so my satisfaction levels aren’t dependent on fickle things like capex budgets).&lt;/p&gt;  &lt;p&gt;When you visit the &lt;a href="http://www.microsoft.com/Web/downloads/platform.aspx"&gt;download page&lt;/a&gt;, you’ll see two versions available. There’s the boring-but-safe released version 1.0 or the racey, throw-caution-to-the-wind 2.0 Beta. I of course went with 2.0 Beta as I’ve nothing-to-lose (and I was installing in a freshly-created, just for this purpose VM).&lt;/p&gt;  &lt;p&gt;Enough with the hyphen-fest already!&lt;/p&gt;  &lt;p&gt;The Web Platform Installer is a simple, integrated way to download, install and configure the Microsoft web platform (ie &lt;a href="http://www.iis.net/"&gt;IIS&lt;/a&gt;, &lt;a href="http://www.microsoft.com/express/sql/"&gt;SQL Server Express&lt;/a&gt;, &lt;a href="http://www.microsoft.com/net/"&gt;.NET Fx&lt;/a&gt;, &lt;a href="http://www.microsoft.com/express/vwd/"&gt;VWD&lt;/a&gt; etc) and popular open source web apps. Nifty.&lt;/p&gt;  &lt;p&gt;It’ll even install and configure PHP for you if that’s your thing and, of course, PHP runs great on IIS with IIS7’s FastCGI support. This saves you &lt;a href="http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/"&gt;wading through this article&lt;/a&gt; or &lt;a href="http://www.youtube.com/watch?v=1aX4NQO4mGA"&gt;watching these videos&lt;/a&gt; that I made explaining how to do this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_2_2.png"&gt;&lt;img title="WebPI Platform Components" height="198" alt="WebPI Platform Components" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_2_thumb.png" width="244" align="left" border="0" /&gt;&lt;/a&gt;When you fire up the WebPI 2.0 Beta you’re presented with 3 vertical tabs. Personally, I found it more intuitive to start on tab “2” and decide which core platform elements I wanted. I opted for all of them. Why not?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_3_2.png"&gt;&lt;img title="WebPI Applications" style="display: inline; margin-left: 0px; margin-right: 0px" height="123" alt="WebPI Applications" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_3_thumb.png" width="145" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tab 3 lets you choose any application you want to install. There’s a mix of ASP.NET and PHP applications. The Web PI is pretty good at warning you about dependencies but clearly if you’re adding an ASP.NET app you’re going to need to enabled to ASP.NET platform components and the same goes for PHP.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_4_2.png"&gt;&lt;img title="WebPI Latest" height="198" alt="WebPI Latest" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_4_thumb.png" width="244" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Having tackled tabs 2 &amp;amp; 3, tab 1 lets me choose any other “bits” I want to install. I opted for PHP and the SQL Server driver for PHP (oh yes, just because you’re doing some PHP it doesn’t mean you can’t enjoy the loveliness that is SQL Server) as well as SQL Server Express, the SQL management tools, ASP.NET MVC and the SEO Toolkit Beta.&lt;/p&gt;  &lt;p&gt;I set things off and it whirled away for a while with a single reboot early on (there were 23 separate packages downloading, installing and configuring). As it turned out, PHP failed to install due to a signature verification issue and therefore the SQL Server driver wasn’t installed either. I simply re-ran the install and both installed fine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_5_2.png"&gt;&lt;img title="PHP Application Test" height="198" alt="PHP Application Test" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_5_thumb.png" width="244" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now to employ my PHP ninja skills and deploy the page to my IIS root directory \inetpub\wwwroot.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_6_2.png"&gt;&lt;img title="PHP Application Works" style="display: inline; margin-left: 0px; margin-right: 0px" height="198" alt="PHP Application Works" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_6_thumb.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And, amazingly (and I was genuinely quite surprised) it worked first time. I had no config to do – that was all taken care of by the Web PI.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_7_2.png"&gt;&lt;img title="Server Manager Web Role" height="198" alt="Server Manager Web Role" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_7_thumb.png" width="244" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For ASP.NET, either make sure you configure this via the WebPI (Web Platform tab – Web Server – Customize) which saves you messing about in Server Manager afterwards. Or do it through Server Manager in WS2008 (Control Panel – Programs – Turn Windows Features On / Off in Vista / Win7) by configuring the Web Server role.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_9_2.png"&gt;&lt;img title="Visual Web Developer" height="198" alt="Visual Web Developer" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_9_thumb.png" width="244" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Finally I checked that Visual Web Developer worked. It did.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_8_2.png"&gt;&lt;img title="SQL Server Express" style="display: inline" height="130" alt="SQL Server Express" src="http://blogs.msdn.com/blogfiles/mikeormond/WindowsLiveWriter/WebPlatformInstaller_FA8B/WebPI_8_thumb.png" width="159" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And that SQL Server Express worked. It did.&lt;/p&gt;  &lt;p&gt;Overall I’m mightily impressed and I wasn’t even installing any apps. If I also wanted WordPress or DotNetNuke or Drupal etc this would save me a huge amount of time. I still have to play with some of the components (in particular the SEO toolkit) but from what I’ve seen I really like the WebPI.&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;a href="http://myweb.yahoo.com/myresults/bookmarklet?u=http://blogs.msdn.com/mikeormond/archive/2009/06/19/web-platform-installer.aspx&amp;amp;t=Web%20Platform%20Installer"&gt;&lt;/a&gt;&lt;/p&gt; Posted: Friday, June 19, 2009 5:50 PM by &lt;a href="http://blogs.msdn.com/user/Profile.aspx?UserID=3692"&gt;MikeOrmond&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-4269897094189209399?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/4269897094189209399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=4269897094189209399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/4269897094189209399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/4269897094189209399'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/07/microsoft-web-platform-installer-20-rc.html' title='Microsoft Web Platform Installer 2.0 RC'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-1170208459534735119</id><published>2009-07-24T12:19:00.001-05:00</published><updated>2009-07-24T12:19:38.096-05:00</updated><title type='text'>Deploying ASP.NET Web Services</title><content type='html'>&lt;p&gt;Deploying ASP.NET Web services is exactly the same as deploying ASP.NET Applications, Deploying an ASP.NET Web service involves copying the .asmx file and any assemblies used by the XML Web service, but not part of the Microsoft .NET Framework, to the Web server.&lt;/p&gt;  &lt;p&gt;For example, suppose you have an ASP.NET Web service named &lt;b&gt;StockServices&lt;/b&gt;. To deploy the XML Web service, you create a virtual directory on your Web server and place the ASP.NET Web service .asmx file in that directory. The virtual directory should also be an Internet Information Services (IIS) Web application, although it is not required. A typical deployment would have the following directory structure:&lt;/p&gt;  &lt;p&gt;\Inetpub&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; \Wwwroot&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; \StockServices&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StockServices.asmx&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; \Bin&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Assemblies used by your XML Web service    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; that are not part of the Microsoft .NET Framework.&lt;/p&gt;  &lt;h4&gt;Items Published with an ASP.NET Web Service&lt;/h4&gt;  &lt;p&gt;When you publish an ASP.NET Web service, the following items are deployed to a Web server.&lt;/p&gt;  &lt;p&gt;Web application directory    &lt;br /&gt;Acts as the root directory for your ASP.NET Web service. All the remaining files are placed within this directory. &lt;/p&gt;  &lt;p&gt;This directory should be flagged as an Internet Information Services (IIS) Web application.&lt;/p&gt;  &lt;p&gt;&amp;lt;MyXMLWebService&amp;gt;.asmx file    &lt;br /&gt;Acts as the base URL for clients calling the XML Web service. The name of the file can be any valid file name.&lt;/p&gt;  &lt;p&gt;&amp;lt;MyXMLWebService&amp;gt;.disco file    &lt;br /&gt;(Optional) Acts as a discovery mechanism for the XML Web service. The .disco file is not automatically created for an XML Web service. For information on creating a discovery file for your XML Web service, see &lt;a href="http://msdn.microsoft.com/en-us/library/tewz1055%28VS.71%29.aspx"&gt;Enabling Discovery for an XML Web Service&lt;/a&gt;. The name of the file can be any valid file name.&lt;/p&gt;  &lt;p&gt;Web.config file    &lt;br /&gt;(Optional) If you need to override the default configuration settings, you can include a Web.config file. XML Web services use the configuration file to allow customization and extensibility of the system. &lt;/p&gt;  &lt;p&gt;For example, you might supply an XML Web service–specific Web.config file if your XML Web service requires authentication, but other Web applications on the system do not.&lt;/p&gt;  &lt;p&gt;\Bin directory    &lt;br /&gt;Contains the binary files for the XML Web service. If your XML Web service class is not in the same file as the .asmx file, then the assembly containing the class must be in the \Bin directory.&lt;/p&gt;  &lt;p&gt;See the &lt;a href="http://msdn.microsoft.com/en-us/library/s9w05e9b(VS.71).aspx"&gt;documentation&lt;/a&gt; at Microsoft. They called them XML Web Services back then.&lt;/p&gt;  &lt;p&gt;Deploying ASP.NET Web services is the same as deploying ASP.NET Applications, so check out &lt;a href="http://www.15seconds.com/Issue/030806.htm"&gt;Thiru Thangarathinam&lt;/a&gt; article that covers all the scenarios.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Structure of an ASP.NET Web Application&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;An ASP.NET application consists of all the Web pages (.aspx and HTML files), handlers, modules, executable code, and other files (such as images and configuration files) that can be invoked from a virtual directory and its subdirectories on a Web server. An ASP.NET application also includes the compiled assembly (if the code-behind feature of .aspx files is used) and typically other assemblies that are used to provide functionality for the application. For example, you might have the business logic of the application encapsulated in a separate assembly. These assemblies are located in the bin directory underneath the virtual directory of the application. To understand how VS .NET simplifies the deployment process, you need to understand the structure of the assembly that provides for this simplification. Assemblies contain four elements: &lt;/em&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;MSIL (Microsoft Intermediate Language) Code: When you compile your application code, it gets compiled into what is known as an MSIL code. MSIL is the code that the common language runtime can understand. &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Meta-data: Contains information about the types, methods and other elements defined in the code &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Manifest: Contains name and version information, a list of included files in the assembly, security information and so on &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Supporting files and resources &lt;/em&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;em&gt;As you can see from the structure, assemblies are so comprehensive and self-describing that VS .NET applications don't need to be registered with registry, as is the practice when you are dealing with COM components. This means that VS .NET applications can be installed by simply copying the required files to the target machine as long as the target machine has the .NET Framework installed. This is called XCOPY Deployment. However, it is also possible to automate the deployment process by making use of the deployment projects that are provided by VS .NET. In the next section, we will see how to deploy a Web application using various deployment options provided by VS .NET. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Deployment Options Supported by .NET&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;You can deploy an ASP.NET Web application using any one of the following three deployment options. &lt;/em&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;em&gt;XCOPY Deployment &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Using the Copy Project option in VS .NET &lt;/em&gt;&lt;/li&gt;      &lt;li&gt;&lt;em&gt;Deployment using VS.NET installer&lt;/em&gt; &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;Also see a dated tutorial from &lt;a href="http://www.west-wind.com/presentations/dotnetwebservices/DotNetWebServices.asp"&gt;Rick Strahl&lt;/a&gt; that covers developing web services. &lt;img src="http://www.west-wind.com/presentations/dotnetwebservices/DotNetWebServices_files/figure1.jpg" width="411" height="311" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-1170208459534735119?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/1170208459534735119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=1170208459534735119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/1170208459534735119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/1170208459534735119'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/07/deploying-aspnet-web-services.html' title='Deploying ASP.NET Web Services'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-6896194015831356482</id><published>2009-07-24T09:47:00.001-05:00</published><updated>2009-07-24T11:32:11.679-05:00</updated><title type='text'>WCF Web Services Vs ASP.Net Web Services</title><content type='html'>&lt;p&gt;First lets agree that WCF Services are better than ASP.Net Web services.&amp;#160; Here’s why in a nutshell:&lt;/p&gt;  &lt;p&gt;WCF enables .NET Framework applications to exchange messages with other software entities. The messages can be in any format, and conveyed by using any transport protocol. &lt;/p&gt;  &lt;p&gt;The long explanation is that:&lt;/p&gt;  &lt;p&gt;ASP.NET Web services was developed for building applications that send and receive messages by using the Simple Object Access Protocol (SOAP) over HTTP. The structure of the messages can be defined using an XML Schema, and a tool is provided to facilitate serializing the messages to and from .NET Framework objects. The technology can automatically generate metadata to describe Web services in the Web Services Description Language (WSDL), and a second tool is provided for generating clients for Web services from the WSDL.&lt;/p&gt;  &lt;p&gt;WCF is for enabling .NET Framework applications to exchange messages with other software entities. SOAP is used by default, but the messages can be in any format, and conveyed by using any transport protocol. The structure of the messages can be defined using an XML Schema, and there are various options for serializing the messages to and from .NET Framework objects. WCF can automatically generate metadata to describe applications built using the technology in WSDL, and it also provides a tool for generating clients for those applications from the WSDL.&lt;/p&gt;  &lt;p&gt;The standards supported by ASP.NET Web services are documented in &lt;a href="http://go.microsoft.com/fwlink/?LinkId=94872"&gt;XML Web Services Created Using ASP.NET&lt;/a&gt;. The more extensive list of standards supported by WCF are listed at &lt;a href="http://msdn.microsoft.com/en-us/library/ms730294.aspx"&gt;Web Services Protocols Supported by System-Provided Interoperability Bindings&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The definitive guide is Microsoft’s &lt;a href="http://msdn.microsoft.com/en-us/library/ms730214.aspx"&gt;documentation&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;ASP.NET provides .NET Framework class libraries and tools for building Web services, as well as facilities for hosting services within Internet Information Services (IIS). Windows Communication Foundation (WCF) provides .NET Framework class libraries, tools and hosting facilities for enabling software entities to communicate using any protocols, including those used by Web services. Migrating ASP.NET Web Services to WCF allows your applications to take advantage of new features and improvements that are unique to WCF.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;WCF has several important advantages relative to ASP.NET Web services. While ASP.NET Web services tools are solely for building Web services, WCF provides tools that can be used when software entities must be made to communicate with one another. This will reduce the number of technologies that developers are required to know in order to accommodate different software communication scenarios, which in turn will reduce the cost of software development resources, as well as the time to complete software development projects.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Even for Web service development projects, WCF supports more Web service protocols than ASP.NET Web services support. These additional protocols provide for more sophisticated solutions involving, amongst other things, reliable sessions and transactions.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;WCF supports more protocols for transporting messages than ASP.NET Web services. ASP.NET Web services only support sending messages by using the Hypertext Transfer Protocol (HTTP). WCF supports sending messages by using HTTP, as well as the Transmission Control Protocol (TCP), named pipes, and Microsoft Message Queuing (MSMQ). More important, WCF can be extended to support additional transport protocols. Therefore, software developed using WCF can be adapted to work together with a wider variety of other software, thereby increasing the potential return on the investment.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;WCF provides much richer facilities for deploying and managing applications than ASP.NET Web services provides. In addition to a configuration system, which ASP.NET also has, WCF offers a configuration editor, activity tracing from senders to receivers and back through any number of intermediaries, a trace viewer, message logging, a vast number of performance counters, and support for Windows Management Instrumentation.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The MS documentation is pretty comprehensive and covers all the issues that need to be covered about WCF Web Services and ASP.Net Web Services.&lt;/p&gt;  &lt;p&gt;Additional information about WCF Web Services Vs ASP.Net Web Services:&lt;/p&gt;  &lt;p&gt;A great blog article Posted By: Kalyan Bandarupalli&amp;#160; titled &lt;a href="http://www.techbubbles.com/wcf/wcf-vs-aspnet-web-services/"&gt;WCF vs ASP.NET Web services &lt;/a&gt;covers it better.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The development of web service with ASP.NET relies on defining data&amp;#160; and relies on the XmlSerializer to transform data to or from a service.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Key issues with &lt;strong&gt;XmlSerializer &lt;/strong&gt;to serialize .NET types to XML&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;Only Public fields or Properties of .NET types can be translated into XML. &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Only the classes which implement &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx"&gt;&lt;em&gt;IEnumerable&lt;/em&gt;&lt;/a&gt;&lt;em&gt; interface. &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Classes that implement the &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.idictionary.aspx"&gt;&lt;em&gt;IDictionary&lt;/em&gt;&lt;/a&gt;&lt;em&gt; interface, such as Hash table can not be serialized. &lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;The &lt;/em&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; uses the DataContractAttribute and DataMemeberAttribute to translate .NET FW types in to XML.&lt;/em&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;[DataContract]        &lt;br /&gt;public class Item         &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [DataMember]         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string ItemID;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [DataMember]         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public decimal ItemQuantity;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [DataMember]         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public decimal ItemPrice;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;The DataContractAttribute can be applied to the class or a strcture. DataMemberAttribute can be applied to field or a property and theses fields or properties can be either public or private.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Important difference between DataContractSerializer and XMLSerializer.&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;A practical benefit of the design of the DataContractSerializer is better performance over XMLserialization.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;em&gt;XMLSerialization does not indicate the which fields or properties of the type are serialized into XML where as DataCotratSerializer Explicitly shows the which fields or properties are serialized into XML.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;em&gt;The DataContractSerializer can translate the HashTable into XML.&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Developing Service&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;To develop a service using ASP.NET we must add the WebService attribute to the class and WebMethodAttribute to any of the class methods.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Example &lt;/em&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;[WebService]        &lt;br /&gt;public class Service : System.Web.Services.WebService         &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [WebMethod]         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string Test(string strMsg)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return strMsg;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;} &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;To develop a service in &lt;/em&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; we will write the following code&lt;/em&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;[ServiceContract]        &lt;br /&gt;public interface ITest         &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [OperationContract]         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string ShowMessage(string strMsg);         &lt;br /&gt;}         &lt;br /&gt;public class Service : ITest         &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string ShowMessage(string strMsg)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return strMsg;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;}&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;The ServiceContractAttribute specifies that a interface defines a &lt;/em&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; service contract, OperationContract Attribute indicates which of the methods of the interface defines the operations of the service contract.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;A class that implements the service contract is referred to as a service type in &lt;/em&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Hosting the Service&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;ASP.NET web services are compiled into a class library assembly and a service file with an extension .asmx will have the code for the service. The service file is copied into the root of the ASP.NET application and Assembly will be copied to the bin directory. The application is accessible using url of the service file.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; Service can be hosted within IIS or WindowsActivationService.&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;Compile the service type into a class library &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Copy the service file with an extension .SVC into a virtual directory and assembly into bin sub directory of the virtual directory. &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Copy the web.config file into the virtual directory. &lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Client Development&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Clients for the ASP.NET Web services are generated using the command-line tool WSDL.EXE. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; uses the ServiceMetadata tool(svcutil.exe) to generate the client for the service.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Message Representation&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Header of the SOAP Message can be customized in ASP.NET Web service.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; provides attributes MessageContractAttribute , MessageHeaderAttribute and MessageBodyMemberAttribute to describe the structure of the SOAP Message.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Service Description&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Issuing a HTTP GET Request with query WSDL causes ASP.NET to generate WSDL to describe the service. It returns the WSDL as response to the request.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The generated WSDL can be customized by deriving the class of &lt;strong&gt;ServiceDescriptionFormatExtension.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Issuing a Request with the query WSDL for the .svc file generates the WSDL. The WSDL that generated by &lt;/em&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; can customized by using ServiceMetadataBehavior class.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Exception Handling&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In ASP.NET Web services, Unhandled exceptions are returned to the client as SOAP faults.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In &lt;/em&gt;&lt;a href="http://www.techbubbles.com/tag/wcf/"&gt;&lt;em&gt;WCF&lt;/em&gt;&lt;/a&gt;&lt;em&gt; Services, unhandled exceptions are not returned to clients as SOAP faults. A configuration setting is provided to have the unhandled exceptions returned to clients for the purpose of debugging.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Other interesting ASP.NET and WCF web services related articles:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jeffblankenburg.com/2009/07/day-7-using-wcf-web-services-with.aspx"&gt;http://jeffblankenburg.com/2009/07/day-7-using-wcf-web-services-with.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://www.developer.com/net/article.php/3695436"&gt;Creating RESTful Web Services with Windows Communication Foundation&lt;/a&gt;&lt;/b&gt;    &lt;br /&gt;By &lt;a href="http://www.developer.com/feedback.php/http://www.developer.com/net/article.php/3695436"&gt;Aaron Lerch&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/asmitaw/archive/2009/06/15/wcf-web-service-hosting-in-iis-6-0-with-windows-authentication-and-web-client-impersonation.aspx"&gt;WCF web Service - Hosting in IIS 6.0 with Windows Authentication and Web client impersonation&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/dwahlin/archive/2007/02/03/video-creating-a-service-with-windows-communication-service-wcf.aspx"&gt;Video: Creating a Web Service with Windows Communication Foundation (WCF)&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;lab exercises to step you through the ways to create and host services in chapter 1 here: &lt;a href="http://www.thatindigogirl.com"&gt;www.thatindigogirl.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeproject.com/KB/WCF/WCFWebService.aspx"&gt;Simple Web Service using WCF&lt;/a&gt; &lt;b&gt;By &lt;a href="http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=3160414"&gt;Mark Pryce-Maher&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-6896194015831356482?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/6896194015831356482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=6896194015831356482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/6896194015831356482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/6896194015831356482'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/07/wcf-web-services-vs-aspnet-web-services.html' title='WCF Web Services Vs ASP.Net Web Services'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-9207623287348996976</id><published>2009-07-23T10:33:00.001-05:00</published><updated>2009-07-23T10:33:55.514-05:00</updated><title type='text'>The Simplest C# code to execute a stored procedure or a SQL statement.</title><content type='html'>&lt;p&gt;I often need to do a simple select from a database table. The code snippet below shows the simplest code required to execute a stored procedure or a SQL statement in C#.&lt;/p&gt;  &lt;div class="highlight"&gt;   &lt;pre&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 1.  Create your SQL Connection&lt;/span&gt;&lt;br /&gt;SqlConnection conn = &lt;span style="color: #008000; font-weight: bold"&gt;null&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 2.  Create and open a connection object&lt;/span&gt;&lt;br /&gt;conn = &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; SqlConnection(&lt;span style="color: #ba2121"&gt;&amp;quot;Connection String Goes Here&amp;quot;&lt;/span&gt;); &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 3.  Open the Connection&lt;/span&gt;&lt;br /&gt;conn.Open(); &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 4.  Create the SQL Command and assign it it a string&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #b00040"&gt;string&lt;/span&gt; strSQLCommand = &lt;span style="color: #ba2121"&gt;&amp;quot;SELECT * FROM TABLE&amp;quot;&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 5.  Execute the SQL Command&lt;/span&gt;&lt;br /&gt;SqlCommand command = &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; SqlCommand(strSQLCommand, conn); &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 6.  Use ExecuteScalar() to return the first result&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #b00040"&gt;string&lt;/span&gt; returnvalue = (&lt;span style="color: #b00040"&gt;string&lt;/span&gt;)command.ExecuteScalar(); &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 7.  Close the Connection&lt;/span&gt;&lt;br /&gt;conn.Close(); &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: #408080"&gt;// 8.  Return the Value&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; returnvalue; &lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; Used in an actual example:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="padding-bottom: 5px; padding-left: 5px; width: 402px; padding-right: 5px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 5px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fa62c74f-0d40-40d2-9fed-e76fd7bd4297" class="wlWriterEditableSmartContent"&gt;&lt;br /&gt;&lt;div style="border: #000080 1px solid; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt;&lt;br /&gt;&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt;&lt;br /&gt;&lt;div style="background: #ddd; max-height: 300px; overflow: scroll; padding: 0"&gt;&lt;br /&gt;&lt;ol style="background: #ffffff; margin: 0 0 0 35px; white-space: nowrap"&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;        {&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 1.  Create your SQL Connection&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;SqlConnection&lt;/span&gt; conn = &lt;span style="color:#0000ff"&gt;null&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 2.  Create and open a connection object&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            conn = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SqlConnection&lt;/span&gt;(connString);&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 3.  Open the Connection&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            conn.Open();&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 4.  Create the SQL Command and assign it it a string&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; strSQLCommand = &lt;span style="color:#a31515"&gt;"SELECT UrlToSend FROM DocumentDelivery where GeneratedCode = '"&lt;/span&gt; &lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;                + textBox1.Text + &lt;span style="color:#a31515"&gt;"'"&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 5.  Execute the SQL Command&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;SqlCommand&lt;/span&gt; command = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SqlCommand&lt;/span&gt;(strSQLCommand, conn);&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 6.  Use ExecuteScalar() to return the first result&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; returnvalue = (&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;)command.ExecuteScalar();&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 7.  Close the Connection&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            conn.Close();&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 8.  Return the Value&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;//return returnvalue; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            label1.Text =  returnvalue; &lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;        \&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; The same code used in a web service:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="padding-bottom: 5px; padding-left: 5px; width: 402px; padding-right: 5px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 5px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d2debcad-e447-4e00-9b51-ca9768fe3fec" class="wlWriterEditableSmartContent"&gt;&lt;br /&gt;&lt;div style="border: #000080 1px solid; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt;&lt;br /&gt;&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt;&lt;br /&gt;&lt;div style="background: #fff; max-height: 300px; overflow: scroll; padding: 2px 5px"&gt;&lt;br /&gt;&lt;ol style="background: #ffffff; margin: 0 0 0 0; white-space: nowrap"&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt; [&lt;span style="color:#2b91af"&gt;WebMethod&lt;/span&gt;]&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;    &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af"&gt;String&lt;/span&gt; GetDocumentsUrl(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; generatedCode)&lt;/li&gt;&lt;li&gt;&lt;br /&gt;    {&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;        &lt;span style="color:#0000ff"&gt;try&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;        {&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 1.  Create your SQL Connection&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;SqlConnection&lt;/span&gt; conn = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SqlConnection&lt;/span&gt;(connString); ;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 2.  Create and open a connection object&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            conn = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SqlConnection&lt;/span&gt;(connString);&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 3.  Open the Connection&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            conn.Open();&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 4.  Create the SQL Command and assign it it a string&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; strSQLCommand = &lt;span style="color:#a31515"&gt;"SELECT UrlToSend FROM DocumentDelivery where GeneratedCode = '"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;                + generatedCode + &lt;span style="color:#a31515"&gt;"'"&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 5.  Execute the SQL Command&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#2b91af"&gt;SqlCommand&lt;/span&gt; command = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;SqlCommand&lt;/span&gt;(strSQLCommand, conn);&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 6.  Use ExecuteScalar() to return the first result&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; returnvalue = (&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;)command.ExecuteScalar();&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 7.  Close the Connection&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            conn.Close();&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;// 8.  Return the Value&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;//return returnvalue; &lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; returnvalue; &lt;/li&gt;&lt;li&gt;&lt;br /&gt;            &lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;        }&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;        &lt;span style="color:#0000ff"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af"&gt;Exception&lt;/span&gt; ex)&lt;/li&gt;&lt;li&gt;&lt;br /&gt;        {&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; ex.Message;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;        }&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;        &lt;span style="color:#0000ff"&gt;finally&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;        {&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;            &lt;span style="color:#008000"&gt;//conn.Close(); should happen here but we are trying to keep it all in the web service&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;        }&lt;/li&gt;&lt;li style="background: #f3f3f3"&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;*connection strings information removed from the example ;).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This code snippet was copied from &lt;a href="http://blog.biztalk-info.com/archive/2008/06/19/Execute_SQL_Query_from_within_a_C_function.aspx"&gt;Execute SQL Query from within a C# function&lt;/a&gt;, Thanks Eric.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-9207623287348996976?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/9207623287348996976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=9207623287348996976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/9207623287348996976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/9207623287348996976'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/07/simplest-c-code-to-execute-stored.html' title='The Simplest C# code to execute a stored procedure or a SQL statement.'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-6685707028521420590</id><published>2009-07-10T08:44:00.001-05:00</published><updated>2009-07-10T08:44:03.974-05:00</updated><title type='text'>Random string generator web service</title><content type='html'>&lt;p&gt;&lt;a title="I&amp;#39;m bored by your chat" href="http://www.flickr.com/photos/10335936@N08/3705545104/"&gt;&lt;img border="0" alt="I&amp;#39;m bored by your chat" align="right" src="http://static.flickr.com/2481/3705545104_6c7769a4ab_m.jpg" width="240" height="182" /&gt;&lt;/a&gt;There are times when you want to generate a Random string for maybe passwords or access codes. Below is a simple ASP.NET web service that i wrote for a project. It generates a string of length 10 with first 4 letters lowercase, next 4 letters numbers, and last 2 letters as uppercase. In my case I was using it for generating an access code for a user.&lt;/p&gt;  &lt;div style="padding-bottom: 5px; padding-left: 5px; width: 402px; padding-right: 5px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 5px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:54e87fb0-a318-40e9-b93c-c0d3774c9739" class="wlWriterEditableSmartContent"&gt;&lt;br /&gt;&lt;div style="border: #000080 1px solid; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt;&lt;br /&gt;&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt;&lt;br /&gt;&lt;div style="background: #ddd; max-height: 300px; overflow: scroll; padding: 0"&gt;&lt;br /&gt;&lt;ol style="background: #ffffff; margin: 0 0 0 35px; white-space: nowrap"&gt;&lt;br /&gt;&lt;li&gt; &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;     &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; Summary description for random string generator&lt;/span&gt;&lt;/li&gt;&lt;li&gt;     &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;     [&lt;span style="color:#2b91af"&gt;WebService&lt;/span&gt;(Namespace = &lt;span style="color:#a31515"&gt;"http://tempuri.org/"&lt;/span&gt;)]&lt;/li&gt;&lt;li&gt;     [&lt;span style="color:#2b91af"&gt;WebServiceBinding&lt;/span&gt;(ConformsTo = &lt;span style="color:#2b91af"&gt;WsiProfiles&lt;/span&gt;.BasicProfile1_1)]&lt;/li&gt;&lt;li&gt;     [&lt;span style="color:#2b91af"&gt;ToolboxItem&lt;/span&gt;(&lt;span style="color:#0000ff"&gt;false&lt;/span&gt;)]&lt;/li&gt;&lt;li&gt;     &lt;span style="color:#008000"&gt;// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;     &lt;span style="color:#008000"&gt;// [System.Web.Script.Services.ScriptService]&lt;/span&gt;&lt;/li&gt;&lt;li&gt;     &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Service1&lt;/span&gt; : System.Web.Services.&lt;span style="color:#2b91af"&gt;WebService&lt;/span&gt;&lt;/li&gt;&lt;li&gt;     {&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li&gt;         [&lt;span style="color:#2b91af"&gt;WebMethod&lt;/span&gt;]&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; GetAccessCode()&lt;/li&gt;&lt;li&gt;         {&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#008000"&gt;//return RandomString(5, true);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; GetMixedRandomNumber();&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; Generates a random string with the given length&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;param name="size"&amp;gt;&lt;/span&gt;&lt;span style="color:#008000"&gt;Size of the string&lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;param name="lowerCase"&amp;gt;&lt;/span&gt;&lt;span style="color:#008000"&gt;If true, generate lowercase string&lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000"&gt;Random string&lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; RandomString(&lt;span style="color:#0000ff"&gt;int&lt;/span&gt; size, &lt;span style="color:#0000ff"&gt;bool&lt;/span&gt; lowerCase)&lt;/li&gt;&lt;li&gt;         {&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt; builder = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#2b91af"&gt;Random&lt;/span&gt; random = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Random&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff"&gt;char&lt;/span&gt; ch;&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; size; i++)&lt;/li&gt;&lt;li&gt;             {&lt;/li&gt;&lt;li&gt;                 ch = &lt;span style="color:#2b91af"&gt;Convert&lt;/span&gt;.ToChar(&lt;span style="color:#2b91af"&gt;Convert&lt;/span&gt;.ToInt32(&lt;span style="color:#2b91af"&gt;Math&lt;/span&gt;.Floor(26 * random.NextDouble() + 65)));&lt;/li&gt;&lt;li&gt;                 builder.Append(ch);&lt;/li&gt;&lt;li&gt;             }&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (lowerCase)&lt;/li&gt;&lt;li&gt;                 &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; builder.ToString().ToLower();&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; builder.ToString();&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; generate a random number between min and max&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;param name="min"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;param name="max"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#808080"&gt;///&lt;/span&gt;&lt;span style="color:#008000"&gt; &lt;/span&gt;&lt;span style="color:#808080"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;         &lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;int&lt;/span&gt; RandomNumber(&lt;span style="color:#0000ff"&gt;int&lt;/span&gt; min, &lt;span style="color:#0000ff"&gt;int&lt;/span&gt; max)&lt;/li&gt;&lt;li&gt;         {&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#2b91af"&gt;Random&lt;/span&gt; random = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Random&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; random.Next(min, max);&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li&gt;         &lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; GetMixedRandomNumber()&lt;/li&gt;&lt;li&gt;         {&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt; builder = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;StringBuilder&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;             builder.Append(RandomString(4, &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;));&lt;/li&gt;&lt;li&gt;             builder.Append(RandomNumber(1000, 9999));&lt;/li&gt;&lt;li&gt;             builder.Append(RandomString(2, &lt;span style="color:#0000ff"&gt;false&lt;/span&gt;));&lt;/li&gt;&lt;li&gt;             &lt;span style="color:#0000ff"&gt;return&lt;/span&gt; builder.ToString();&lt;/li&gt;&lt;li&gt;         }&lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;li&gt;     \&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;  &lt;p&gt;The code uses the Random class from the .NET Framework class library which provides functionality to generate random numbers.    &lt;br /&gt;&lt;a title="Tron (or barcode scanner)" href="http://www.flickr.com/photos/10335936@N08/3704729233/"&gt;&lt;img border="0" alt="Tron (or barcode scanner)" align="right" src="http://static.flickr.com/2646/3704729233_2935f8ff87_m.jpg" /&gt;&lt;/a&gt;The Random class constructors have two overloaded forms. It takes either no value or it takes a seed value.    &lt;br /&gt;The Random class has three public methods - Next, NextBytes, and NextDouble. The Next method returns a random number, NextBytes returns an array of bytes filled with random numbers, and NextDouble returns a random number between 0.0 and 1.0. The Next method has three overloaded forms and allows you to set the minimum and maximum range of the random number.    &lt;br /&gt;The following code returns a random number:&lt;/p&gt;  &lt;p&gt;int num = random.Next();&lt;/p&gt;  &lt;p&gt;The following code returns a random number less than 100.&lt;/p&gt;  &lt;p&gt;int num = random.Next(100);   &lt;br /&gt;The following code returns a random number between min and max:&lt;/p&gt;  &lt;p&gt;private int RandomNumber(int min, int max)   &lt;br /&gt;{    &lt;br /&gt;Random random = new Random();    &lt;br /&gt;return random.Next(min, max);     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;The web service code:&lt;/p&gt;  &lt;p&gt;/// &amp;lt;summary&amp;gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// Summary description for random string generator    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [WebService(Namespace = &amp;quot;&lt;a href="http://tempuri.org/&amp;quot;)]"&gt;http://tempuri.org/&amp;quot;)]&lt;/a&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [ToolboxItem(false)]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // [System.Web.Script.Services.ScriptService]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public class Service1 : System.Web.Services.WebService    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [WebMethod]   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string GetAccessCode()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //return RandomString(5, true);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return GetMixedRandomNumber();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;summary&amp;gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// Generates a random string with the given length    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;param name=&amp;quot;size&amp;quot;&amp;gt;Size of the string&amp;lt;/param&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;param name=&amp;quot;lowerCase&amp;quot;&amp;gt;If true, generate lowercase string&amp;lt;/param&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;Random string&amp;lt;/returns&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private string RandomString(int size, bool lowerCase)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StringBuilder builder = new StringBuilder();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Random random = new Random();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; char ch;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; size; i++)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(ch);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (lowerCase)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return builder.ToString().ToLower();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return builder.ToString();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;summary&amp;gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// generate a random number between min and max    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;param name=&amp;quot;min&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;param name=&amp;quot;max&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private int RandomNumber(int min, int max)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Random random = new Random();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return random.Next(min, max);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string GetMixedRandomNumber()   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StringBuilder builder = new StringBuilder();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(RandomString(4, true));    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(RandomNumber(1000, 9999));    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; builder.Append(RandomString(2, false));    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return builder.ToString();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-6685707028521420590?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/6685707028521420590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=6685707028521420590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/6685707028521420590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/6685707028521420590'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/07/random-string-generator-web-service.html' title='Random string generator web service'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-7045180268004597122</id><published>2009-07-02T18:00:00.000-05:00</published><updated>2009-07-14T18:02:24.075-05:00</updated><title type='text'>Object-relational mapping (ORM)</title><content type='html'>&lt;p&gt;NHibernate 2.0 released &lt;a href="http://en.wikipedia.org/wiki/August_23"&gt;August 23&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/2008"&gt;2008&lt;/a&gt; makes it easier to write modularized .NET applications.&lt;/p&gt;  &lt;p&gt;NHibernate is a great framework for doing object-to-relational mapping (ORM). &lt;/p&gt;  &lt;p&gt;Some of the beginner issues about NHibernate is that the documentation is lacking. Look to the Java Hibernate project, for&amp;#160; examples . Also read &lt;a href="http://weblogs.asp.net/pwilson/default.aspx"&gt;Paul Wilson's .NET Blog&lt;/a&gt; for great examples and a &amp;quot;Real&amp;quot; NHibernate Example App&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;As most of you know that follow my blog, I not only have my own &lt;/em&gt;&lt;a href="http://www.ORMapper.net"&gt;&lt;em&gt;WilsonORMapper&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, but I've also been tinkering with &lt;/em&gt;&lt;a href="http://www.nhibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; some.&amp;#160; Why?&amp;#160; I needed to use a &amp;quot;free&amp;quot; set of code for my recent presentation on O/R Mapping at the &lt;/em&gt;&lt;a href="http://www.atlantacodecamp.com"&gt;&lt;em&gt;Atlanta Code Camp&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&amp;#160; Anyhow, here's the long promised &lt;/em&gt;&lt;a href="http://Download.WilsonDotNet.com/WilsonNHibernateExample.zip"&gt;&lt;em&gt;link to download&lt;/em&gt;&lt;/a&gt;&lt;em&gt; my &amp;quot;real&amp;quot; NHibernate example app.&amp;#160; What do I mean by calling it &amp;quot;real&amp;quot;?&amp;#160; Well to put it bluntly, my experience is that its impossible to find a realistic and decently complex app for &lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; (or &lt;/em&gt;&lt;a href="http://www.Hibernate.org"&gt;&lt;em&gt;Hibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt;).&amp;#160; My example app is the exact same one I updated for my &lt;/em&gt;&lt;a href="http://Download.WilsonDotNet.com/WilsonORMapperDemo.zip"&gt;&lt;em&gt;WilsonORMapper&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, except I modified it slightly to support &lt;/em&gt;&lt;a href="http://Download.WilsonDotNet.com/WilsonNHibernateExample.zip"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&amp;#160; This means that it is first of all a real and fully functioning WinForm app -- complete with data-binding in grids and all your basic CRUD.&amp;#160; It also means that this example includes several types of primary keys, relationships, and inheritance -- and did I mention it works!        &lt;br /&gt;Sure there is lots of documentation for &lt;/em&gt;&lt;a href="http://www.Hibernate.org"&gt;&lt;em&gt;Hibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; (and thus for &lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; too), including books, but the examples are either typically small snippets, and many are outdated and just don't work with NHibernate v0.8.&amp;#160; Some people have criticized the small amount of documentation I have for my &lt;/em&gt;&lt;a href="http://www.ORMapper.net"&gt;&lt;em&gt;WilsonORMapper&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, and rightly so, but I've always included a real example app that goes a long way in getting people started -- and without this I found it quite difficult to get up to speed on &lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate &lt;/em&gt;&lt;/a&gt;&lt;em&gt;since I was forced to dig into scattered documents, forums, and just plain old-fashioned trial-and-error in many cases!&amp;#160; Here's an example -- &lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; has multiple ways to model related collections (sets, bags, lists, and maps), which certainly is an advantage if you need flexibility, but just try to figure out which one to use for a many-to-many related collection that you want to be bindable -- the answer is use the bag.        &lt;br /&gt;Anyhow, what's intriguing to me is how close both the basic approach and the mapping file syntax is for my &lt;/em&gt;&lt;a href="http://www.ORMapper.net"&gt;&lt;em&gt;WilsonORMapper&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and&lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; -- they are remarkably similar and there's very little effort to switch between them.&amp;#160; Of course there are certainly differences too -- &lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is more flexible if you need that (most don't), while my &lt;/em&gt;&lt;a href="http://www.ORMapper.net"&gt;&lt;em&gt;WilsonORMapper&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is a little easier (far simpler codebase), supports more databases (including Access), and provides DAL capabilities as well as O/R Mapping.&amp;#160; Both mappers have features the other lacks -- but they both have the basic set of features that most people need -- and both work as my example apps demonstrate.&amp;#160; What are some other features my &lt;/em&gt;&lt;a href="http://www.ORMapper.net"&gt;&lt;em&gt;WilsonORMapper&lt;/em&gt;&lt;/a&gt;&lt;em&gt; has?&amp;#160; Supports stored procedures, custom collection types, real batch updates/deletes, server-side paging, lazy-loading without keeping &amp;quot;session&amp;quot; open, interface to avoid reflection, null values even in .NET v1.1, and I'm sure there are others I could list.        &lt;br /&gt;What about &lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; you ask?&amp;#160; I can't do it much justice to be fair since I'm not that experienced with it, but a few come to mind: more caching options, normalized inheritance, built-in one-to-one, two-way graph syncs, more cascade options, eager load option -- and again there are bound to be more.&amp;#160; But the basics are pretty similar (although I prefer my &lt;/em&gt;&lt;a href="http://www.ORMapper.net"&gt;&lt;em&gt;WilsonORMapper&lt;/em&gt;&lt;/a&gt;&lt;em&gt; of course) -- so if you're an&lt;/em&gt;&lt;a href="http://www.NHibernate.org"&gt;&lt;em&gt;NHibernate&lt;/em&gt;&lt;/a&gt;&lt;em&gt; fan, then please download and enjoy my &amp;quot;real&amp;quot; &lt;/em&gt;&lt;a href="http://Download.WilsonDotNet.com/WilsonNHibernateExample.zip"&gt;&lt;em&gt;NHiberate example&lt;/em&gt;&lt;/a&gt;&lt;em&gt; app -- and feel free to add your own comments here on either mapper (or others), although please include some real details if you do.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;NHibernate is a port of &lt;a href="https://www.hibernate.org/344.html"&gt;Hibernate Core&lt;/a&gt; for Java to the .NET Framework. It handles persisting plain .NET objects to and from an underlying relational database. Given an XML description of your entities and relationships, NHibernate automatically generates SQL for loading and storing the objects. Optionally, you can describe your mapping metadata with attributes in your source code.&lt;/p&gt;  &lt;p&gt;NHibernate supports transparent persistence, your object classes don't have to follow a restrictive programming model. Persistent classes do not need to implement any interface or inherit from a special base class. This makes it possible to design the business logic using plain .NET (CLR) objects and object-oriented idiom.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;NHibernate&lt;/b&gt; is an &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;Object-relational mapping&lt;/a&gt; (ORM) solution for the &lt;a href="http://en.wikipedia.org/wiki/.NET_Framework"&gt;Microsoft .NET&lt;/a&gt; platform: it provides a &lt;a href="http://en.wikipedia.org/wiki/Software_framework"&gt;framework&lt;/a&gt; for mapping an &lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming"&gt;object-oriented&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Domain_model"&gt;domain model&lt;/a&gt; to a traditional &lt;a href="http://en.wikipedia.org/wiki/Relational_database"&gt;relational database&lt;/a&gt;. Its purpose is to relieve the developer from a significant portion of relational data&lt;a href="http://en.wikipedia.org/wiki/Persistence_(computer_science)"&gt;persistence&lt;/a&gt;-related programming tasks.&lt;/p&gt;  &lt;p&gt;NHibernate is &lt;a href="http://en.wikipedia.org/wiki/Free_software"&gt;free&lt;/a&gt; as &lt;a href="http://en.wikipedia.org/wiki/Open_source_software"&gt;open source software&lt;/a&gt; that is distributed under the &lt;a href="http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"&gt;GNU Lesser General Public License&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;NHibernate is a port of the popular &lt;a href="http://en.wikipedia.org/wiki/Java_(programming_language)"&gt;Java&lt;/a&gt; O/R mapper &lt;a href="http://en.wikipedia.org/wiki/Hibernate_(Java)"&gt;Hibernate&lt;/a&gt; to .NET. Version 1.0 mirrored the feature set of Hibernate 2.1, as well as a number of features from Hibernate 3.&lt;/p&gt;  &lt;p&gt;NHibernate 1.2.1, released in November &lt;a href="http://en.wikipedia.org/wiki/2007"&gt;2007&lt;/a&gt;, introduced many more features from Hibernate 3 and support for .NET 2.0, &lt;a href="http://en.wikipedia.org/wiki/Stored_procedure"&gt;stored procedures&lt;/a&gt;, generics, and nullable types.&lt;/p&gt;  &lt;p&gt;NHibernate 2.0 was released &lt;a href="http://en.wikipedia.org/wiki/August_23"&gt;August 23&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/2008"&gt;2008&lt;/a&gt;. It is comparable to Hibernate 3.2 in terms of features. With the version 2.0 release, NHibernate dropped support for .NET 1.1.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;NHibernate key features:&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Natural programming model&lt;/strong&gt; - NHibernate supports natural OO idiom; inheritance, polymorphism, composition and the .NET collections framework, including generic collections. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Native .NET&lt;/strong&gt; - NHibernate API uses .NET conventions and idioms &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Support for fine-grained object models&lt;/strong&gt; - a rich variety of mappings for collections and dependent objects &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;No build-time bytecode enhancement&lt;/strong&gt; - there's no extra code generation or bytecode processing steps in your build procedure &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;The query options&lt;/strong&gt; - NHibernate addresses both sides of the problem; not only how to get objects into the database, but also how to get them out again &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Custom SQL&lt;/strong&gt; - specify the exact SQL that NHibernate should use to persist your objects. Stored procedures are supported on Microsoft SQL Server. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Support for &amp;quot;conversations&amp;quot;&lt;/strong&gt; - NHibernate supports long-lived persistence contexts, detach/reattach of objects, and takes care of optimistic locking automatically &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Free/open source&lt;/strong&gt; - NHibernate is licensed under the LGPL (Lesser GNU Public License) &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-7045180268004597122?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/7045180268004597122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=7045180268004597122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/7045180268004597122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/7045180268004597122'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/07/object-relational-mapping-orm.html' title='Object-relational mapping (ORM)'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-636257077882873393</id><published>2009-06-26T11:16:00.001-05:00</published><updated>2009-06-26T11:26:39.693-05:00</updated><title type='text'>Internet Information Services</title><content type='html'>&lt;p&gt;What would you like to know about IIS? Below is everything i found about IIS on the web. IIS still serves over a third of all the websites on the web according to &lt;a href="http://en.wikipedia.org/wiki/Netcraft" target="_blank"&gt;Netcraft&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Internet Information Services&lt;/b&gt; (&lt;b&gt;IIS&lt;/b&gt;) - formerly called &lt;b&gt;Internet Information Server&lt;/b&gt; - is a set of Internet-based services for servers created by Microsoft for use with &lt;a title="Microsoft Windows" href="http://en.wikipedia.org/wiki/Microsoft_Windows"&gt;Microsoft Windows&lt;/a&gt;. It is the world's second most popular &lt;a title="Web server" href="http://en.wikipedia.org/wiki/Web_server"&gt;web server&lt;/a&gt; in terms of overall websites behind the industry leader &lt;a title="Apache HTTP Server" href="http://en.wikipedia.org/wiki/Apache_HTTP_Server"&gt;Apache HTTP Server&lt;/a&gt;. &lt;a title="As of 2008" href="http://en.wikipedia.org/wiki/As_of_2008"&gt;As of June 2008&lt;/a&gt; it served 35.39% of all websites according to &lt;a title="Netcraft" href="http://en.wikipedia.org/wiki/Netcraft"&gt;Netcraft&lt;/a&gt;.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-0"&gt;[1]&lt;/a&gt;&lt;/sup&gt; The servers currently include &lt;a title="File Transfer Protocol" href="http://en.wikipedia.org/wiki/File_Transfer_Protocol"&gt;FTP&lt;/a&gt;, &lt;a title="Simple Mail Transfer Protocol" href="http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol"&gt;SMTP&lt;/a&gt;, &lt;a title="Network News Transfer Protocol" href="http://en.wikipedia.org/wiki/Network_News_Transfer_Protocol"&gt;NNTP&lt;/a&gt;, and &lt;a title="HTTP" href="http://en.wikipedia.org/wiki/HTTP"&gt;HTTP&lt;/a&gt;/&lt;a title="HTTPS" href="http://en.wikipedia.org/wiki/HTTPS"&gt;HTTPS&lt;/a&gt;.     &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span&gt;Versions&lt;/span&gt;&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;IIS 1.0, &lt;a title="Windows NT 3.51" href="http://en.wikipedia.org/wiki/Windows_NT_3.51"&gt;Windows NT 3.51&lt;/a&gt; available as a free add-on &lt;/li&gt;    &lt;li&gt;IIS 2.0, &lt;a title="Windows NT 4.0" href="http://en.wikipedia.org/wiki/Windows_NT_4.0"&gt;Windows NT 4.0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;IIS 3.0, &lt;a title="Windows NT 4.0" href="http://en.wikipedia.org/wiki/Windows_NT_4.0"&gt;Windows NT 4.0&lt;/a&gt; Service Pack 3 &lt;/li&gt;    &lt;li&gt;IIS 4.0, &lt;a title="Windows NT 4.0" href="http://en.wikipedia.org/wiki/Windows_NT_4.0"&gt;Windows NT 4.0&lt;/a&gt; Option Pack &lt;/li&gt;    &lt;li&gt;IIS 5.0, &lt;a title="Windows 2000" href="http://en.wikipedia.org/wiki/Windows_2000"&gt;Windows 2000&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;IIS 5.1, &lt;a title="Windows XP" href="http://en.wikipedia.org/wiki/Windows_XP"&gt;Windows XP Professional&lt;/a&gt;,&lt;a title="Windows MCE" href="http://en.wikipedia.org/wiki/Windows_MCE"&gt;Windows MCE&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;IIS 6.0, &lt;a title="Windows Server 2003" href="http://en.wikipedia.org/wiki/Windows_Server_2003"&gt;Windows Server 2003&lt;/a&gt; and &lt;a title="Windows XP Professional x64 Edition" href="http://en.wikipedia.org/wiki/Windows_XP_Professional_x64_Edition"&gt;Windows XP Professional x64 Edition&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;IIS 7.0, &lt;a title="Windows Server 2008" href="http://en.wikipedia.org/wiki/Windows_Server_2008"&gt;Windows Server 2008&lt;/a&gt; and &lt;a title="Windows Vista" href="http://en.wikipedia.org/wiki/Windows_Vista"&gt;Windows Vista&lt;/a&gt; and &lt;a title="Windows 7" href="http://en.wikipedia.org/wiki/Windows_7"&gt;Windows 7&lt;/a&gt; (Pre-beta) &lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:8f4a0776-af0d-4f36-9492-a14e1be849ed" class="wlWriterEditableSmartContent"&gt;&lt;div id="631d70d3-7f5e-4857-a9ad-cf78ca188c31" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=KZRc8CkfEhs&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/_mpUiymzYlPY/SkT2u-1z_RI/AAAAAAAABO0/cSCE2zmjib0/videoeed6112c1abc%5B2%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('631d70d3-7f5e-4857-a9ad-cf78ca188c31'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/KZRc8CkfEhs&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/KZRc8CkfEhs&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt; &lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vBNoTK31zPo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vBNoTK31zPo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:0f9098de-8db6-4f4a-9cba-d4a5b224510c" class="wlWriterEditableSmartContent"&gt;&lt;div id="ad7d87fe-9cda-4aa8-8056-ec182bd9fe4e" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=zQUPqas6TLo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_mpUiymzYlPY/SkT2vXwbE4I/AAAAAAAABO4/wPf7oAhhbaQ/video4fcf65f26e80%5B2%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('ad7d87fe-9cda-4aa8-8056-ec182bd9fe4e'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/zQUPqas6TLo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/zQUPqas6TLo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:fb60d2be-6343-4b6c-aa71-f92bc3683afd" class="wlWriterEditableSmartContent"&gt;&lt;div id="3ad05fbb-1324-4d35-8e42-eddcab96743b" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=WMOnmVXKhhI&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_mpUiymzYlPY/SkT2vjv6KEI/AAAAAAAABO8/iibXF7Klpgk/video94d4ec608f83%5B2%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('3ad05fbb-1324-4d35-8e42-eddcab96743b'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/WMOnmVXKhhI&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/WMOnmVXKhhI&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;h2&gt;&lt;span&gt;History&lt;/span&gt;&lt;/h2&gt;  &lt;p&gt;The first Microsoft &lt;a title="Webserver" href="http://en.wikipedia.org/wiki/Webserver"&gt;webserver&lt;/a&gt; was a research project by the European Microsoft Windows NT Academic Centre (EMWAC), part of the &lt;a title="University of Edinburgh" href="http://en.wikipedia.org/wiki/University_of_Edinburgh"&gt;University of Edinburgh&lt;/a&gt; in &lt;a title="Scotland" href="http://en.wikipedia.org/wiki/Scotland"&gt;Scotland&lt;/a&gt;, and was distributed as &lt;a title="Freeware" href="http://en.wikipedia.org/wiki/Freeware"&gt;freeware&lt;/a&gt;.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-1"&gt;[2]&lt;/a&gt;&lt;/sup&gt; However since the EMWAC server was unable to scale sufficiently to handle the volume of traffic going to microsoft.com, Microsoft was forced to develop its own webserver, IIS.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-2"&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;IIS was initially released as an additional set of Internet based services for Windows NT 3.51. IIS 2.0 followed, adding support for the Windows NT 4.0 operating system; and IIS 3.0 introduced the &lt;a title="Active Server Pages" href="http://en.wikipedia.org/wiki/Active_Server_Pages"&gt;Active Server Pages&lt;/a&gt; dynamic scripting environment.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-3"&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;IIS 4.0 dropped support for the &lt;a title="Gopher (protocol)" href="http://en.wikipedia.org/wiki/Gopher_%28protocol%29"&gt;Gopher protocol&lt;/a&gt; and was bundled with Windows NT as a separate &amp;quot;Option Pack&amp;quot; CD-ROM.&lt;sup&gt;&lt;span title="This claim needs references to reliable sources&amp;#160;since September 2008"&gt;[&lt;i&gt;&lt;a title="Wikipedia:Citation needed" href="http://en.wikipedia.org/wiki/Wikipedia:Citation_needed"&gt;citation needed&lt;/a&gt;&lt;/i&gt;]&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;The current shipping version of IIS is 7.0 for &lt;a title="Windows Vista" href="http://en.wikipedia.org/wiki/Windows_Vista"&gt;Windows Vista&lt;/a&gt; and &lt;a title="Windows Server 2008" href="http://en.wikipedia.org/wiki/Windows_Server_2008"&gt;Windows Server 2008&lt;/a&gt;, 6.0 for &lt;a title="Windows Server 2003" href="http://en.wikipedia.org/wiki/Windows_Server_2003"&gt;Windows Server 2003&lt;/a&gt; and &lt;a title="Windows XP Professional x64 Edition" href="http://en.wikipedia.org/wiki/Windows_XP_Professional_x64_Edition"&gt;Windows XP Professional x64 Edition&lt;/a&gt;, and IIS 5.1 for &lt;a title="Windows XP" href="http://en.wikipedia.org/wiki/Windows_XP"&gt;Windows XP Professional&lt;/a&gt;. Windows XP has a restricted version of IIS 5.1 that supports only 10 simultaneous connections and a single web site.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-4"&gt;[5]&lt;/a&gt;&lt;/sup&gt; IIS 6.0 added support for &lt;a title="IPv6" href="http://en.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt;. A &lt;a title="FastCGI" href="http://en.wikipedia.org/wiki/FastCGI"&gt;FastCGI&lt;/a&gt; module is also available for IIS5.1, IIS6&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-5"&gt;[6]&lt;/a&gt;&lt;/sup&gt; and IIS7.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-6"&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;IIS 7.0 is not installed by Windows Vista by default but it can be selected from the list of optional components. It is available in all editions of Windows Vista save Home Basic and Starter. IIS 7 on Vista does not limit the number of allowed connections as IIS on XP did but limits concurrent requests to 10 (Windows Vista Ultimate, Business, and Enterprise Editions) or 3 (Vista Home Premium). Additional requests are queued which hampers performance but they are not rejected as with XP which resulted in the 'server too busy' error message. &lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-7"&gt;[8]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span&gt;Security&lt;/span&gt;&lt;/h2&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;br /&gt;&lt;/td&gt;        &lt;td&gt;         &lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Earlier versions of IIS were hit with a number of &lt;a title="Vulnerability (computing)" href="http://en.wikipedia.org/wiki/Vulnerability_%28computing%29"&gt;vulnerabilities&lt;/a&gt;, chief among them &lt;a title="http://www.cert.org/advisories/CA-2001-13.html" href="http://www.cert.org/advisories/CA-2001-13.html" rel="nofollow"&gt;CA-2001-19&lt;/a&gt; which led to the infamous &lt;a title="Code Red worm" href="http://en.wikipedia.org/wiki/Code_Red_worm"&gt;Code Red worm&lt;/a&gt;; however, both versions 6.0 and 7.0 currently have no reported issues that affect them.&lt;sup&gt;&lt;span title="This claim needs references to reliable sources&amp;#160;since October 2008"&gt;[&lt;i&gt;&lt;a title="Wikipedia:Citation needed" href="http://en.wikipedia.org/wiki/Wikipedia:Citation_needed"&gt;citation needed&lt;/a&gt;&lt;/i&gt;]&lt;/span&gt;&lt;/sup&gt; In IIS 6.0 Microsoft opted to change the behaviour of pre-installed &lt;a title="ISAPI" href="http://en.wikipedia.org/wiki/ISAPI"&gt;ISAPI&lt;/a&gt; handlers,&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-8"&gt;[9]&lt;/a&gt;&lt;/sup&gt; many of which were culprits in the vulnerabilities of 4.0 and 5.0, thus reducing the &lt;a title="Attack surface" href="http://en.wikipedia.org/wiki/Attack_surface"&gt;attack surface&lt;/a&gt; of IIS. In addition, IIS 6.0 added a feature called &amp;quot;Web Service Extensions&amp;quot; that prevents IIS from launching any program without explicit permission by an administrator. With the current release IIS 7.0 the components are modularised so that only the required components have to be installed, thus further reducing the attack surface. In addition, security features are added such as URLFiltering which rejects suspicious URLs based on a user-defined rule set.&lt;/p&gt;  &lt;p&gt;By default IIS 5.1 and lower run websites in-process under the SYSTEM account,&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-9"&gt;[10]&lt;/a&gt;&lt;/sup&gt; a default Windows account with 'superuser' rights. Under 6.0 all request handling processes have been brought under a Network Services account with significantly fewer privileges so that should there be an vulnerability in a feature or custom code it won't necessarily compromise the entire system given the &lt;a title="Sandbox (computer security)" href="http://en.wikipedia.org/wiki/Sandbox_%28computer_security%29"&gt;sandboxed&lt;/a&gt; environment these worker processes run in. IIS 6.0 also contained a new kernel HTTP stack (&lt;code&gt;http.sys&lt;/code&gt;) with a stricter HTTP request parser and response cache for both static and dynamic content.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span&gt;Authentication Mechanisms&lt;/span&gt;&lt;/h2&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;br /&gt;&lt;/td&gt;        &lt;td&gt;         &lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;IIS 5.0 and higher support the following &lt;a title="Authentication" href="http://en.wikipedia.org/wiki/Authentication"&gt;authentication&lt;/a&gt; mechanisms:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Basic access authentication" href="http://en.wikipedia.org/wiki/Basic_access_authentication"&gt;Basic access authentication&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Digest access authentication" href="http://en.wikipedia.org/wiki/Digest_access_authentication"&gt;Digest access authentication&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Integrated Windows Authentication" href="http://en.wikipedia.org/wiki/Integrated_Windows_Authentication"&gt;Integrated Windows Authentication&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title=".NET Passport Authentication" href="http://en.wikipedia.org/wiki/.NET_Passport_Authentication"&gt;.NET Passport Authentication&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span&gt;Version 7.0&lt;/span&gt;&lt;/h2&gt;  &lt;p&gt;Debuting with &lt;a title="Windows Vista" href="http://en.wikipedia.org/wiki/Windows_Vista"&gt;Windows Vista&lt;/a&gt;, and included in &lt;a title="Windows Server 2008" href="http://en.wikipedia.org/wiki/Windows_Server_2008"&gt;Windows Server 2008&lt;/a&gt;, IIS 7.0 features a modular &lt;a title="Software architecture" href="http://en.wikipedia.org/wiki/Software_architecture"&gt;architecture&lt;/a&gt;. Instead of a &lt;a title="Monolithic system" href="http://en.wikipedia.org/wiki/Monolithic_system"&gt;monolithic&lt;/a&gt; server which features all services, IIS 7 has a core web server &lt;a title="Software engine" href="http://en.wikipedia.org/wiki/Software_engine"&gt;engine&lt;/a&gt;. &lt;a title="Module" href="http://en.wikipedia.org/wiki/Module"&gt;Modules&lt;/a&gt; offering specific functionality can be added to the engine to enable its features. The advantage of having this architecture is that only the features required can be enabled and that the functionalities can be extended by using custom modules.&lt;/p&gt;  &lt;p&gt;IIS 7 will ship with a handful of modules, but Microsoft will make other modules available online.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-10"&gt;[11]&lt;/a&gt;&lt;/sup&gt; The following sets of modules are slated to ship with the server:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a title="HTTP" href="http://en.wikipedia.org/wiki/HTTP"&gt;HTTP&lt;/a&gt; Modules &lt;/li&gt;    &lt;li&gt;&lt;a title="Computer security" href="http://en.wikipedia.org/wiki/Computer_security"&gt;Security&lt;/a&gt; Modules &lt;/li&gt;    &lt;li&gt;Content Modules &lt;/li&gt;    &lt;li&gt;&lt;a title="Data compression" href="http://en.wikipedia.org/wiki/Data_compression"&gt;Compression&lt;/a&gt; Modules &lt;/li&gt;    &lt;li&gt;&lt;a title="Cache" href="http://en.wikipedia.org/wiki/Cache"&gt;Caching&lt;/a&gt; Modules &lt;/li&gt;    &lt;li&gt;&lt;a title="Data logging" href="http://en.wikipedia.org/wiki/Data_logging"&gt;Logging&lt;/a&gt; and &lt;a title="Diagnostic program" href="http://en.wikipedia.org/wiki/Diagnostic_program"&gt;Diagnostics&lt;/a&gt; Modules &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Writing extensions to IIS 7 using &lt;a title="ISAPI" href="http://en.wikipedia.org/wiki/ISAPI"&gt;ISAPI&lt;/a&gt; has been deprecated in favor of the module &lt;a title="Application programming interface" href="http://en.wikipedia.org/wiki/Application_programming_interface"&gt;API&lt;/a&gt;, which allows modules to be plugged in anywhere within the request processing pipeline. Much of IIS's own functionality is built on this API, and as such, developers will have much more control over a request process than was possible in prior versions. Modules can be written using C++, or using the IHttpModule interface from a &lt;a title=".NET Framework" href="http://en.wikipedia.org/wiki/.NET_Framework"&gt;.NET Framework&lt;/a&gt; &lt;a title="Programming language" href="http://en.wikipedia.org/wiki/Programming_language"&gt;language&lt;/a&gt;. Modules can be loaded globally where the services provided by the module can effect all sites, or loaded on a per-site basis. IIS 7 has an integrated mode application pool where .NET modules are loaded into the pipeline using the module API, rather than ISAPI. As a result &lt;a title="ASP.NET" href="http://en.wikipedia.org/wiki/ASP.NET"&gt;ASP.NET&lt;/a&gt; code can be used with all requests to the server.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-11"&gt;[12]&lt;/a&gt;&lt;/sup&gt; For applications requiring strict IIS 6.0 compatibility, the Classic application pool mode loads asp.NET as an ISAPI.&lt;/p&gt;  &lt;p&gt;A significant change from previous versions of IIS is that all Web server configuration information is stored solely in &lt;a title="XML" href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt; configuration files, instead of in the &lt;a title="Metabase" href="http://en.wikipedia.org/wiki/Metabase"&gt;metabase&lt;/a&gt;. The server has a global configuration file that provides defaults, and each virtual web's document root (and any subdirectory thereof) may contain a &lt;b&gt;web.config&lt;/b&gt; containing settings that augment or override the defaults. Changes to these files take effect immediately. This marks a significant departure from previous versions whereby web interfaces, or machine administrator access, were required to change simple settings such as default document, active modules and security/authentication. It also eliminates the need to perform metabase synchronization between multiple servers in a farm of web servers.&lt;/p&gt;  &lt;p&gt;IIS 7 also features a completely rewritten administration interface that takes advantage of modern &lt;a title="Microsoft Management Console" href="http://en.wikipedia.org/wiki/Microsoft_Management_Console"&gt;MMC&lt;/a&gt; features such as task panes and asynchronous operation. Configuration of &lt;a title="ASP.NET" href="http://en.wikipedia.org/wiki/ASP.NET"&gt;ASP.NET&lt;/a&gt; is more fully integrated into the administrative interface.&lt;/p&gt;  &lt;p&gt;Other changes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Platform for Internet Content Selection" href="http://en.wikipedia.org/wiki/Platform_for_Internet_Content_Selection"&gt;PICS&lt;/a&gt; content ratings, support for &lt;a title="Microsoft Passport" href="http://en.wikipedia.org/wiki/Microsoft_Passport"&gt;Microsoft Passport&lt;/a&gt;, and server-side &lt;a title="Image maps" href="http://en.wikipedia.org/wiki/Image_maps"&gt;image maps&lt;/a&gt; are no longer included. &lt;/li&gt;    &lt;li&gt;Executing commands via server-side includes is no longer permitted. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;IISRESET -reboot&lt;/b&gt; has been removed. &lt;/li&gt;    &lt;li&gt;The &lt;b&gt;CONVLOG&lt;/b&gt; tool, which converts IIS log files into &lt;a title="NCSA" href="http://en.wikipedia.org/wiki/NCSA"&gt;NCSA&lt;/a&gt; format, has been removed. &lt;/li&gt;    &lt;li&gt;Support for enabling a folder for &amp;quot;Web Sharing&amp;quot; via the &lt;a title="Windows Explorer" href="http://en.wikipedia.org/wiki/Windows_Explorer"&gt;Windows Explorer&lt;/a&gt; interface has been removed. &lt;/li&gt;    &lt;li&gt;IIS Media Pack (see below), which allows IIS to be used as a bare-bones media server, without using &lt;a title="Windows Media Services" href="http://en.wikipedia.org/wiki/Windows_Media_Services"&gt;Windows Media Services&lt;/a&gt;.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-12"&gt;[13]&lt;/a&gt;&lt;/sup&gt; &lt;/li&gt;    &lt;li&gt;New &lt;a title="FTP" href="http://en.wikipedia.org/wiki/FTP"&gt;FTP&lt;/a&gt; module, that integrates with the new configuration store, as well as the new management environment.&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-13"&gt;[14]&lt;/a&gt;&lt;/sup&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span&gt;IIS Media Pack&lt;/span&gt;&lt;/h2&gt;  &lt;p&gt;The IIS Media Pack&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-14"&gt;[15]&lt;/a&gt;&lt;/sup&gt; is a set of free add-on &lt;a title="Modules" href="http://en.wikipedia.org/wiki/Modules"&gt;modules&lt;/a&gt; for delivering digital audio and video files from an Internet Information Services 7.0 (&lt;a title="IIS7" href="http://en.wikipedia.org/wiki/IIS7"&gt;IIS7&lt;/a&gt;) Web server. Download delivery from a Web server to &lt;a title="Media player" href="http://en.wikipedia.org/wiki/Media_player"&gt;media player&lt;/a&gt; software is often as a progressive download, which allows the end user's media player to quickly start rendering the media file even as the download is still in progress. Examples of media player software that will work with the IIS Media Pack include Adobe &lt;a title="Flash Player" href="http://en.wikipedia.org/wiki/Flash_Player"&gt;Flash Player&lt;/a&gt;, Apple &lt;a title="QuickTime Player" href="http://en.wikipedia.org/wiki/QuickTime_Player"&gt;QuickTime Player&lt;/a&gt;, RealNetworks &lt;a title="RealPlayer" href="http://en.wikipedia.org/wiki/RealPlayer"&gt;RealPlayer&lt;/a&gt;, Microsoft &lt;a title="Windows Media Player" href="http://en.wikipedia.org/wiki/Windows_Media_Player"&gt;Windows Media Player&lt;/a&gt;, and Microsoft &lt;a title="Silverlight" href="http://en.wikipedia.org/wiki/Silverlight"&gt;Silverlight&lt;/a&gt;. The IIS Media Pack provides some of the cost savings and content control benefits of &lt;a title="Streaming media" href="http://en.wikipedia.org/wiki/Streaming_media"&gt;streaming media&lt;/a&gt; servers to Web server delivery of media files.&lt;/p&gt;  &lt;p&gt;The first module, Bit Rate Throttling, was released to the general public on March 14, 2008&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-15"&gt;[16]&lt;/a&gt;&lt;/sup&gt;. For media files, Bit Rate Throttling downloads the first few seconds of the file as fast as possible, allowing playback to begin very quickly, and then automatically detects the encoded bit rate of the file and meters out the rest of the download at that bit rate. If an end user stops playback before the end of the file, the server has only downloaded a few more seconds of file than were actually consumed, reducing bandwidth costs when compared to traditional send-and-forget HTTP downloads. Metering the delivery of media files also reduces overall bandwidth and CPU usage on the IIS server, freeing resources to serve a higher number of concurrent users. The following eleven &lt;a title="Media file formats" href="http://en.wikipedia.org/wiki/Media_file_formats"&gt;media file formats&lt;/a&gt; are supported by default in the Bit Rate Throttling module: ASF, AVI, FLV, M4V, MOV, MP3, MP4, RM, RMVB, WMA, WMV. Additional media file formats can be added using the IIS configuration system. Non-media files may also be throttled at a server-administrator-specified delivery rate.&lt;/p&gt;  &lt;p&gt;The second module is called Web Playlists, and is now in its second Customer Technology Preview (CTP) release&lt;sup&gt;&lt;a title="" href="http://en.wikipedia.org/wiki/Internet_Information_Services#cite_note-16"&gt;[17]&lt;/a&gt;&lt;/sup&gt;. This feature allows an IIS server administrator to specify a sequenced playback order for a set of media files without exposing the source &lt;a title="URLs" href="http://en.wikipedia.org/wiki/URLs"&gt;URLs&lt;/a&gt;. Playback order and the ability to limit whether an end user can seek within or skip a file are controlled on the IIS server. The Web Playlists feature can also be used to dynamically generate personalized playlists for users.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: verdana; color: rgb(67,67,67)"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div style="margin: 0pt"&gt;   &lt;p&gt;Internet Information Services (IIS) 7.0 provides a new request-processing architecture that includes:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;A new service, Windows Process Activation Service (WAS), which enables sites to use protocols other than HTTP and HTTPS &lt;/li&gt;      &lt;li&gt;A Web server engine that can be customized by adding or removing modules &lt;/li&gt;      &lt;li&gt;A new approach to processing requests, integrating the request-processing pipelines from IIS and ASP.NET &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;This article describes the components, modules and request-processing architecture in the following sections:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#Components"&gt;IIS 7.0 Components&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#Protocol"&gt;Protocol Listeners&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#Hypertext"&gt;Hypertext Transfer Protocol Stack (HTTP.sys)&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#WWW"&gt;World Wide Web Publishing Service (WWW service)&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#WAS"&gt;Windows Process Activation Service (WAS)&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#IIS"&gt;IIS 7.0 Modules&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#Native"&gt;Native Modules&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#Managed"&gt;Managed Modules&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#Request"&gt;IIS 7.0 Request Processing&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#Application"&gt;IIS 7.0 Application Pools&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/page.aspx/101/#HTTP"&gt;HTTP Request Processing in IIS 7.0&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;IIS 7.0 Components&lt;/h2&gt;    &lt;p&gt;IIS 7.0 contains several components that perform important functions for the application and Web server roles in Windows Server&lt;span&gt;® &lt;/span&gt;2008. Each component has responsibilities, such as listening for requests made to the server, managing processes, and reading configuration files. These components include protocol listeners, such as HTTP.sys, and services, such as World Wide Web Publishing Service (WWW service) and Windows Process Activation Service (WAS).&lt;/p&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;Protocol Listeners&lt;/h2&gt;    &lt;p&gt;Protocol listeners receive protocol-specific requests, send them to IIS for processing, and then return responses to requestors. For example, when a client browser requests a Web page from the Internet, the HTTP listener, HTTP.sys, picks up the request and sends it to IIS for processing. Once IIS processes the request, HTTP.sys returns a response to the client browser.&lt;/p&gt;    &lt;p&gt;By default, IIS 7.0 provides HTTP.sys as the protocol listener that listens for HTTP and HTTPS requests. HTTP.sys was introduced in IIS 6.0 as an HTTP-specific protocol listener for HTTP requests. HTTP.sys remains the HTTP listener in IIS 7.0, but includes support for Secure Sockets Layer (SSL).&lt;/p&gt;    &lt;p&gt;To support services and applications that use protocols other than HTTP and HTTPS, you can use technologies such as Windows Communication Foundation (WCF). WCF has listener adapters that provide the functionality of both a protocol listener and a listener adapter. Listener adapters are covered later in this document. For more information about WCF, see &lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://go.microsoft.com/fwlink/?LinkId=88604"&gt;Windows Communication Foundation&lt;/a&gt; on MSDN.&lt;/p&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;Hypertext Transfer Protocol Stack (HTTP.sys)&lt;/h2&gt;    &lt;p&gt;The HTTP listener is part of the networking subsystem of Windows operating systems, and it is implemented as a kernel-mode device driver called the HTTP protocol stack (HTTP.sys). HTTP.sys listens for HTTP requests from the network, passes the requests onto IIS for processing, and then returns processed responses to client browsers.&lt;/p&gt;    &lt;p&gt;In IIS 6.0, HTTP.sys replaced Windows Sockets API (Winsock), which was a user-mode component used by previous versions of IIS to receive HTTP requests and send HTTP responses. IIS 7.0 continues to rely on HTTP.sys for HTTP requests.&lt;/p&gt;    &lt;p&gt;HTTP.sys provides the following benefits:&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;ul&gt;       &lt;li&gt;Kernel-mode caching. Requests for cached responses are served without switching to user mode. &lt;/li&gt;        &lt;li&gt;Kernel-mode request queuing. Requests cause less overhead in context switching because the kernel forwards requests directly to the correct worker process. If no worker process is available to accept a request, the kernel-mode request queue holds the request until a worker process picks it up. &lt;/li&gt;        &lt;li&gt;Request pre-processing and security filtering. &lt;/li&gt;     &lt;/ul&gt;   &lt;/div&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;World Wide Web Publishing Service (WWW service)&lt;/h2&gt;    &lt;p&gt;In IIS 7.0, functionality that was previously handled by the World Wide Web Publishing Service (WWW Service) alone is now split between two services: WWW Service and a new service, Windows Process Activation Service (WAS). These two services run as LocalSystem in the same Svchost.exe process, and share the same binaries.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;&amp;#160;&amp;#160; You may also see the WWW Service referred to as W3SVC in documentation.&lt;/p&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;How WWW Service works in IIS 6.0&lt;/h3&gt;    &lt;p&gt;In IIS 6.0, WWW Service manages the following main areas in IIS:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;HTTP administration and configuration &lt;/li&gt;      &lt;li&gt;Process management &lt;/li&gt;      &lt;li&gt;Performance monitoring &lt;/li&gt;   &lt;/ul&gt;    &lt;h4 style="color: rgb(0,0,0)"&gt;HTTP Administration and Configuration&lt;/h4&gt;    &lt;p&gt;WWW Service reads configuration information from the IIS metabase and uses that information to configure and update the HTTP listener, HTTP.sys. In addition, WWW service starts, stops monitors, and manages worker processes that process HTTP requests.&lt;/p&gt;    &lt;h4 style="color: rgb(0,0,0)"&gt;Performance Monitoring&lt;/h4&gt;    &lt;p&gt;WWW Service monitors performance and provides performance counters for Web sites and for the IIS cache.&lt;/p&gt;    &lt;h4 style="color: rgb(0,0,0)"&gt;Process Management&lt;/h4&gt;    &lt;p&gt;WWW Service manages application pools and worker processes, such as starting, stopping, and recycling worker processes. Additionally, WWW Service monitors health of the worker processes, and invokes rapid fail detection to stop new processes from starting when several worker processes fail in a configurable amount of time.&lt;/p&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;How WWW Service works in IIS 7.0&lt;/h3&gt;    &lt;p&gt;In IIS 7.0, WWW service no longer manages worker processes. Instead, WWW Service is the listener adapter for the HTTP listener, HTTP.sys. As the listener adapter, WWW Service is primarily responsible for configuring HTTP.sys, updating HTTP.sys when configuration changes, and notifying WAS when a request enters the request queue.&lt;/p&gt;    &lt;p&gt;Additionally, WWW Service continues to collect the counters for Web sites. Because performance counters remain part of the WWW Service, they are HTTP specific and do not apply to WAS.&lt;/p&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;Windows Process Activation Service (WAS)&lt;/h2&gt;    &lt;p&gt;In IIS 7.0, Windows Process Activation Service (WAS) manages application pool configuration and worker processes instead of WWW Service. This enables you to use the same configuration and process model for HTTP and non-HTTP sites.&lt;/p&gt;    &lt;p&gt;Additionally, you can run WAS without WWW Service if you do not need HTTP functionality. For example, you can manage a Web service through a WCF listener adapter, such as NetTcpActivator, without running the WWW Service if you do not need to listen for HTTP requests in HTTP.sys. For information about WCF listener adapters and hosting WCF applications in IIS 7.0 by using WAS, see &lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://go.microsoft.com/fwlink/?LinkId=81261"&gt;Hosting in WCF&lt;/a&gt; on MSDN.&lt;/p&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Configuration Management in WAS&lt;/h3&gt;    &lt;p&gt;On startup, WAS reads certain information from the ApplicationHost.config file, and passes that information to listener adapters on the server. Listener adapters are components that establish communication between WAS and protocol listeners, such as HTTP.sys. Once listener adapters receive configuration information, they configure their related protocol listeners and prepare the listeners to listen for requests.&lt;/p&gt;    &lt;p&gt;In the case of WCF, a listener adapter includes the functionality of a protocol listener. So, a WCF listener adapter, such as NetTcpActivator, is configured based on information from WAS. Once NetTcpActivator is configured, it listens for requests that use the net.tcp protocol. For more information about WCF listener adapters, see &lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://go.microsoft.com/fwlink/?LinkId=88413"&gt;WAS Activation Architecture&lt;/a&gt; on MSDN.&lt;/p&gt;    &lt;p&gt;The following list describes the type of information that WAS reads from configuration:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Global configuration information &lt;/li&gt;      &lt;li&gt;Protocol configuration information for both HTTP and non-HTTP protocols &lt;/li&gt;      &lt;li&gt;Application pool configuration, such as the process account information &lt;/li&gt;      &lt;li&gt;Site configuration, such as bindings and applications &lt;/li&gt;      &lt;li&gt;Application configuration, such as the enabled protocols and the application pools to which the applications belong &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;If ApplicationHost.config changes, WAS receives a notification and updates the listener adapters with the new information.&lt;/p&gt;    &lt;h4 style="color: rgb(0,0,0)"&gt;Process Management&lt;/h4&gt;    &lt;p&gt;WAS manages application pools and worker processes for both HTTP and non-HTTP requests. When a protocol listener picks up a client request, WAS determines if a worker process is running or not. If an application pool already has a worker process servicing requests, the listener adapter passes the request onto the worker process for processing. If there is no worker process in the application pool, WAS will start a worker process so that the listener adapter can pass the request to it for processing.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Note: &lt;/b&gt;Because WAS manages processes for both HTTP and non-HTTP protocols, you can run applications with different protocols in the same application pool. For example, you can develop an application, such as an XML service, and host it over both HTTP and net.tcp.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;  &lt;div style="margin: 0pt"&gt;   &lt;h2 style="color: rgb(0,0,0)"&gt;IIS 7.0 Modules&lt;/h2&gt;    &lt;p&gt;IIS 7.0 provides a new architecture that is different from previous versions of IIS. Instead of keeping the majority of functionality within the server itself, IIS 7.0 includes a Web server engine in which you can add or remove components, called modules, depending on your needs.&lt;/p&gt;    &lt;p&gt;Modules are individual features that the server uses to process requests. For example, IIS uses authentication modules to authenticate client credentials, and cache modules to manage cache activity.&lt;/p&gt;    &lt;p&gt;The new architecture provides the following advantages over previous versions of IIS:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;You can control which modules you want on the server. &lt;/li&gt;      &lt;li&gt;You can customize a server to a specific role in your environment. &lt;/li&gt;      &lt;li&gt;You can use custom modules to replace existing modules or introduce new features. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;The IIS 7.0 architecture also improves security and eases administration. By removing unnecessary modules, you reduce the server's attack surface and memory footprint, which is the amount of memory that server worker processes use on the machine. You also eliminate the need to manage features that are unnecessary for your sites and applications.&lt;/p&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;Native Modules&lt;/h2&gt;    &lt;p&gt;The following sections describe the native modules that are available with a full installation of IIS 7.0. You can remove them or replace them with custom modules, depending on your needs.&lt;/p&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;HTTP Modules&lt;/h3&gt;    &lt;p&gt;Several modules in IIS 7.0 perform tasks specific to Hypertext Transfer Protocol (HTTP) in the request-processing pipeline. HTTP modules include modules to respond to information and inquiries sent in client headers, to return HTTP errors, to redirect requests, and more.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)" colspan="2"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/th&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)" colspan="2"&gt;             &lt;p&gt;CustomErrorModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Sends default and configured HTTP error messages when an error status code is set on a response.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Custerr.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)" colspan="2"&gt;             &lt;p&gt;HttpRedirectionModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports configurable redirection for HTTP requests.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Redirect.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)" colspan="2"&gt;             &lt;p&gt;ProtocolSupportModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs protocol-related actions, such as setting response headers and redirecting headers based on configuration.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Protsup.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Security Modules&lt;/h3&gt;    &lt;p&gt;Several modules in IIS 7.0 perform tasks related to security in the request-processing pipeline. In addition, there are separate modules for each of the authentication schemes, which enable you to select modules for the types of authentication you want on your server. There are also modules that perform URL authorization, and a module that filters requests.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;AnonymousAuthenticationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs Anonymous authentication when no other authentication method succeeds.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Authanon.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;BasicAuthenticationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs Basic authentication.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Authbas.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;CertificateMappingAuthenticationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs Certificate Mapping authentication using Active Directory.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Authcert.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;DigestAuthenticationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs Digest authentication.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Authmd5.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;IISCertificateMappingAuthenticationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs Certificate Mapping authentication using IIS certificate configuration.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Authmap.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;RequestFilteringModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs URLScan tasks such as configuring allowed verbs and file extensions, setting limits, and scanning for bad character sequences.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Modrqflt.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;UrlAuthorizationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs URL authorization.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Urlauthz.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;WindowsAuthenticationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs NTLM integrated authentication.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Authsspi.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;IpRestrictionModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Restricts IPv4 addresses listed in the ipSecurity list in configuration.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\iprestr.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Content Modules&lt;/h3&gt;    &lt;p&gt;Several modules in IIS 7.0 perform tasks related to content in the request-processing pipeline. Content modules include modules to process requests for static files, to return a default page when a client doesn't specify a resource in a request, to list the contents of a directory, and more.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/th&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;CgiModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Executes Common Gateway Interface (CGI) processes to build response output.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Cgi.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;DefaultDocumentModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Attempts to return a default document for requests made to the parent directory.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Defdoc.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;DirectoryListingModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Lists the contents of a directory.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\dirlist.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;IsapiModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Hosts ISAPI extension DLLs.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Isapi.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;IsapiFilterModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports ISAPI filter DLLs.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Filter.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;ServerSideIncludeModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Processes server-side includes code.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Iis_ssi.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;StaticFileModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Serves static files.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Static.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;FastCgiModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports FastCGI, which provides a high-performance alternative to CGI.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\iisfcgi.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Compression Modules&lt;/h3&gt;    &lt;p&gt;Two modules in IIS 7.0 perform compression in the request-processing pipeline.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/th&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;DynamicCompressionModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Compresses responses and applies Gzip compression transfer coding to responses.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Compdyn.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;StaticCompressionModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Performs pre-compression of static content.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Compstat.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Caching Modules&lt;/h3&gt;    &lt;p&gt;Several modules in IIS 7.0 perform tasks related to caching in the request-processing pipeline. Caching improves performance of your Web sites and Web applications by storing processed information, such as Web pages, in memory on the server, and then reusing that information in subsequent requests for the same resource.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/th&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;FileCacheModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Provides user mode caching for files and file handles.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Cachfile.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;HTTPCacheModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Provides kernel mode and user mode caching in HTTP.sys.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Cachhttp.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;TokenCacheModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Provides user mode caching of user name and token pairs for modules that produce Windows user principals.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Cachtokn.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;UriCacheModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Provides user mode caching of URL information.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Cachuri.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Logging and Diagnostics Modules&lt;/h3&gt;    &lt;p&gt;Several modules in IIS 7.0 perform tasks related to logging and diagnostics in the request-processing pipeline. The logging modules support loading of custom modules and passing information to HTTP.sys. The diagnostics modules follow and report events during request processing.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/th&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;CustomLoggingModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Loads custom logging modules.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Logcust.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;FailedRequestsTracingModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports the Failed Request Tracing feature.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Iisfreb.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;HttpLoggingModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Passes information and processing status to HTTP.sys for logging.&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Loghttp.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;RequestMonitorModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Tracks requests currently executing in worker processes and reports information with Runtime Status and Control Application Programming Interface (RSCA).&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Iisreqs.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;TracingModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Reports events to Microsoft Event Tracing for Windows (ETW).&lt;/p&gt;           &lt;/td&gt;            &lt;td&gt;             &lt;p&gt;Inetsrv\Iisetw.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Managed Support Modules&lt;/h3&gt;    &lt;p&gt;A couple of modules in IIS 7.0 support managed integration in the IIS request-processing pipeline.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="374"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)" width="54"&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/th&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;ManagedEngine&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Provides integration of managed code modules in the IIS request-processing pipeline.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="54"&gt;             &lt;p&gt;Microsoft.NET\Framework\v2.0.50727\webengine.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;ConfigurationValidationModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Validates configuration issues, such as when an application is running in Integrated mode but has handlers or modules declared in the system.web section.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="54"&gt;             &lt;p&gt;Inetsrv\validcfg.dll&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;Managed Modules&lt;/h2&gt;    &lt;p&gt;In addition to native modules, IIS 7.0 enables you to use managed code modules to extend IIS functionality. Some of the managed modules, such as UrlAuthorization, have a native module counterpart that provides a native alternative to the managed module.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;&amp;#160;&amp;#160; Managed modules depend on the ManagedEngine module.&lt;/p&gt;    &lt;p&gt;The following table lists the managed modules that are available with a full installation of IIS 7.0.For more information about the managed modules, see the &lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://go.microsoft.com/fwlink/?LinkId=88414"&gt;.NET Framework SDK 2.0&lt;/a&gt; on MSDN.&lt;/p&gt;    &lt;div style="margin: 0pt"&gt;     &lt;table style="border-bottom-style: none; padding-bottom: 0pt; list-style-type: none; margin: 15px 0pt; padding-left: 0pt; padding-right: 0pt; border-left-style: none; border-top: rgb(102,102,102) 1px solid; border-right: rgb(102,102,102) 1px solid; padding-top: 0pt" border="0" cellspacing="0" cellpadding="0" width="411"&gt;&lt;tbody valign="top"&gt;         &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Module Name&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Description&lt;/p&gt;           &lt;/th&gt;            &lt;th style="text-align: left; background-color: rgb(229,229,229)" width="84"&gt;             &lt;p&gt;Resource&lt;/p&gt;           &lt;/th&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;AnonymousIdentification&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Manages anonymous identifiers, which are used by features that support anonymous identification such as ASP.NET profile.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Security.AnonymousIdentificationModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;DefaultAuthentication&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Ensures that an authentication object is present in the context.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Security.DefaultAuthenticationModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;FileAuthorization&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Verifies that a user has permission to access the requested file.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Security.FileAuthorizationModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;FormsAuthentication&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports authentication by using Forms authentication.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Security.FormsAuthenticationModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;OutputCache&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports output caching.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Caching.OutputCacheModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Profile&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Manages user profiles by using ASP.NET profile, which stores and retrieves user settings in a data source such as a database.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Profile.ProfileModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;RoleManager&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Manages a RolePrincipal instance for the current user.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Security.RoleManagerModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;Session&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports maintaining session state, which enables storage of data specific to a single client within an application on the server.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.SessionState.SessionStateModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;UrlAuthorization&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Determines whether the current user is permitted access to the requested URL, based on the user name or the list of roles that a user is a member of.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Security.UrlAuthorizationModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;UrlMappingsModule&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Supports mapping a real URL to a more user-friendly URL.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.UrlMappingsModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;th style="text-align: left; background-color: rgb(229,229,229)"&gt;             &lt;p&gt;WindowsAuthentication&lt;/p&gt;           &lt;/th&gt;            &lt;td&gt;             &lt;p&gt;Sets the identity of the user for an ASP.NET application when Windows authentication is enabled.&lt;/p&gt;           &lt;/td&gt;            &lt;td width="84"&gt;             &lt;p&gt;System.Web.Security.WindowsAuthenticationModule&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/div&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;IIS 7.0 Request Processing&lt;/h2&gt;    &lt;p&gt;In IIS 7.0, the IIS and ASP.NET request pipelines combine to process requests with an integrated approach. The new request-processing architecture consists of an ordered list of native and managed modules that perform specific tasks in response to requests.&lt;/p&gt;    &lt;p&gt;This design provides several benefits over previous versions of IIS. First, all file types can use features that were originally available only to managed code. For example, you can now use ASP.NET Forms authentication and Uniform Resource Locator (URL) authorization for static files, Active Server Pages (ASP) files, and all other file types in your sites and applications.&lt;/p&gt;    &lt;p&gt;Second, this design eliminates the duplication of several features in IIS and ASP.NET. For example, when a client requests a managed file, the server calls the appropriate authentication module in the integrated pipeline to authenticate the client. In previous versions of IIS, this same request would go through an authentication process in both the IIS pipeline and in the ASP.NET pipeline.&lt;/p&gt;    &lt;p&gt;Third, you can manage all of the modules in one location, instead of managing some features in IIS and some in the ASP.NET configuration. This simplifies the administration of sites and applications on the server.&lt;/p&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;IIS 7.0 Application Pools&lt;/h2&gt;    &lt;p&gt;Application pools separate applications by process boundaries to prevent an application from affecting another application on the server. In IIS 7.0, application pools continue to use IIS 6.0 worker process isolation mode. In addition, you can now specify a setting that determines how to process requests that involve managed resources: Integrated mode or Classic mode.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; In IIS 6.0, worker process isolation mode and IIS 5.0 isolation mode are set at the server level. This makes it impossible to run both isolation modes on the same server. However, in IIS 7.0, Integrated mode and Classic mode are set at the application pool level, which enables you to run applications simultaneously in application pools with different process modes on the same server.&lt;/p&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Integrated application pool mode&lt;/h3&gt;    &lt;p&gt;When an application pool is in Integrated mode, you can take advantage of the integrated request-processing architecture of IIS and ASP.NET. When a worker process in an application pool receives a request, the request passes through an ordered list of events. Each event calls the necessary native and managed modules to process portions of the request and to generate the response.&lt;/p&gt;    &lt;p&gt;There are several benefits to running application pools in Integrated mode. First the request-processing models of IIS and ASP.NET are integrated into a unified process model. This model eliminates steps that were previously duplicated in IIS and ASP.NET, such as authentication. Additionally, Integrated mode enables the availability of managed features to all content types.&lt;/p&gt;    &lt;h3 style="color: rgb(0,0,0)"&gt;Classic application pool mode&lt;/h3&gt;    &lt;p&gt;When an application pool is in Classic mode, IIS 7.0 handles requests as in IIS 6.0 worker process isolation mode. ASP.NET requests first go through native processing steps in IIS and are then routed to Aspnet_isapi.dll for processing of managed code in the managed runtime. Finally, the request is routed back through IIS to send the response.&lt;/p&gt;    &lt;p&gt;This separation of the IIS and ASP.NET request-processing models results in duplication of some processing steps, such as authentication and authorization. Additionally, managed code features, such as forms authentication, are only available to ASP.NET applications or applications for which you have script mapped all requests to be handled by aspnet_isapi.dll.&lt;/p&gt;    &lt;p&gt;Be sure to test your existing applications for compatibility in Integrated mode before upgrading a production environment to IIS 7.0 and assigning applications to application pools in Integrated mode. You should only add an application to an application pool in Classic mode if the application fails to work in Integrated mode. For example, your application might rely on an authentication token passed from IIS to the managed runtime, and, due to the new architecture in IIS 7.0, the process breaks your application.&lt;/p&gt;    &lt;h2 style="color: rgb(0,0,0)"&gt;HTTP Request Processing in IIS 7.0&lt;/h2&gt;    &lt;p&gt;IIS 7.0 has a similar HTTP request-processing flow as IIS 6.0. The diagrams in this section provide an overview of an HTTP request in process.&lt;/p&gt;    &lt;p&gt;The following list describes the request-processing flow that is shown in figure 1:&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;When a client browser initiates an HTTP request for a resource on the Web server, HTTP.sys intercepts the request. &lt;/li&gt;      &lt;li&gt;HTTP.sys contacts WAS to obtain information from the configuration store. &lt;/li&gt;      &lt;li&gt;WAS requests configuration information from the configuration store, applicationHost.config. &lt;/li&gt;      &lt;li&gt;WWW Service receives configuration information, such as application pool and site configuration. &lt;/li&gt;      &lt;li&gt;WWW Service uses the configuration information to configure HTTP.sys. &lt;/li&gt;      &lt;li&gt;WAS starts a worker process for the application pool to which the request was made. &lt;/li&gt;      &lt;li&gt;The worker process processes the request and returns a response to HTTP.sys. &lt;/li&gt;      &lt;li&gt;The client receives a response. &lt;/li&gt;   &lt;/ol&gt; &lt;/div&gt;  &lt;div style="margin: 0pt"&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/file.axd?i=15"&gt;&lt;img border="0" alt="" src="http://learn.iis.net/file.axd?i=15" width="412" height="369" /&gt;&lt;/a&gt;&amp;#160; &lt;p&gt;&lt;span&gt;&lt;b&gt;Figure 1: Overview of an HTTP Request&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;In a worker process, an HTTP request passes through several ordered steps, called events, in the Web Server Core. At each event, a native module processes part of the request, such as authenticating the user or adding information to the event log. If a request requires a managed module, the native ManagedEngine module creates an AppDomain, where the managed module can perform the necessary processing, such as authenticating a user with Forms authentication. When the request passes through all of the events in the Web Server Core, the response is returned to HTTP.sys. Figure 2, below, shows an HTTP request entering the worker process.&lt;/p&gt;    &lt;p&gt;&lt;a style="margin: 0pt; color: rgb(3,74,243)" href="http://learn.iis.net/file.axd?i=16"&gt;&lt;img border="0" alt="" src="http://learn.iis.net/file.axd?i=16" width="407" height="300" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;span&gt;&lt;b&gt;Figure 2: Detail of a HTTP request inside the Worker Process&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div&gt;&lt;img style="text-align: left; margin: 5px auto 5px 0pt; display: block" id="9917261740192771" src="http://www.google.com/chart?cht=d&amp;amp;chdp=sites&amp;amp;chl=%5B%5BYouTube+Video%27%3D16%27f%5Cbf%5Chv%27a%5C%3D210%270%27%3D209%270%27dim%27%5Cbox1%27b%5CDBD9BB%27fC%5CDBD9BB%27eC%5C15%27sk%27%5C%5B%22Boom%3F%22%27%5Dh%27a%5CV%5C%3D12%27f%5Cbf%5C%5DV%5Cta%5C%3D211%27%3D0%27%3D210%27%3D352%27dim%27%5C%3D211%27%3D0%27%3D210%27%3D352%27vdim%27%5Cbox1%27b%5Cva%5CFFFEF0%27fC%5CDBD9BB%27eC%5Csites_youtube%27i%5Chv-0-0%27a%5C%5Do%5CLauto%27f%5C" width="407" height="342" props="showBorder:true;showBorderTitle:true;borderTitle:Boom?" type="youtube" origsrc="bfQabSJGsak" /&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;h2&gt;&lt;span&gt;Links      &lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Microsoft Personal Web Server" href="http://en.wikipedia.org/wiki/Microsoft_Personal_Web_Server"&gt;PWS&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="List of FTP server software" href="http://en.wikipedia.org/wiki/List_of_FTP_server_software"&gt;List of FTP server software&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="List of mail servers" href="http://en.wikipedia.org/wiki/List_of_mail_servers"&gt;List of mail servers&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Comparison of web servers" href="http://en.wikipedia.org/wiki/Comparison_of_web_servers"&gt;Comparison of web servers&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Metabase" href="http://knol.google.com/k/iggy-mwangi/-/3ii6pqy66hd53/3"&gt;Metabase&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="ASP.NET" href="http://en.wikipedia.org/wiki/ASP.NET"&gt;ASP.NET&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Windows Communication Foundation" href="http://en.wikipedia.org/wiki/Windows_Communication_Foundation"&gt;Windows Communication Foundation&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-636257077882873393?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/636257077882873393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=636257077882873393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/636257077882873393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/636257077882873393'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/06/internet-information-services.html' title='Internet Information Services'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_mpUiymzYlPY/SkT2u-1z_RI/AAAAAAAABO0/cSCE2zmjib0/s72-c/videoeed6112c1abc%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-8028340534231701097</id><published>2009-06-24T11:57:00.002-05:00</published><updated>2009-06-24T20:52:01.041-05:00</updated><title type='text'>Data modeling process and steps</title><content type='html'>&lt;p&gt;&lt;a title="WordPress 2.7 Database Schema" href="http://www.flickr.com/photos/45745303@N00/3640432505/"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px;" alt="WordPress 2.7 Database Schema" src="http://static.flickr.com/3542/3640432505_b28ae524cc.jpg" align="right" border="0" width="194" height="167" /&gt;&lt;/a&gt;Most applications need a data model to be developed or improved. There are lots of websites that cover &lt;a href="http://en.wikipedia.org/wiki/Data_Modeling_" target="_blank"&gt;data modeling &lt;/a&gt;in detail but i typically use the below steps to create a &lt;a href="http://en.wikipedia.org/wiki/Data_Model" target="_blank"&gt;data model&lt;/a&gt;. The steps can be carried out iteratively or in sequence. Often times the process is an iterative process that never really ends.&lt;/p&gt;  &lt;p&gt;The most important thing is to get a good conceptual model together. This often includes a couple of simplified business data and work flow diagrams. This are useful for talking about the business or need with your teams.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Business data and work flow diagrams. &lt;/li&gt;    &lt;li&gt;Conceptual data model &lt;/li&gt;    &lt;li&gt;Data requirements &lt;/li&gt;    &lt;li&gt;Data definitions &lt;/li&gt;    &lt;li&gt;Business concepts &lt;/li&gt;    &lt;li&gt;Entity classes and attributes &lt;/li&gt;    &lt;li&gt;Relationships (associations ) &lt;/li&gt;    &lt;li&gt;Logical Data Model &lt;/li&gt;    &lt;li&gt;Physical Data Model (create objects in the database) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Below are some possible steps often involved in data modeling. The should be performed in an iterative manner. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Identify entity types &lt;/li&gt;    &lt;li&gt;Identify attributes &lt;/li&gt;    &lt;li&gt;Apply naming conventions &lt;/li&gt;    &lt;li&gt;Identify relationships &lt;/li&gt;    &lt;li&gt;Apply any required data model patterns &lt;/li&gt;    &lt;li&gt;Assign keys &lt;/li&gt;    &lt;li&gt;Normalize to reduce data redundancy &lt;/li&gt;    &lt;li&gt;Denormalize to improve performance &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Data modeling is the process of creating and extending data models which are visual representations of data and its organization. The ERD Diagram (Entity Relationship Diagram) is the most popular type of data model. Data models typically exist as Conceptual, Logical and Physical Data models.&lt;/p&gt;  &lt;p&gt;Actual implementation of the conceptual model is called a logical data model. To implement one conceptual data model may require multiple logical data models. Data modeling defines the relationships between data elements and structures. Data modeling techniques are used to model data in a standard, consistent, predictable manner in order to manage it as a resource. The use of this standard is strongly recommended for all projects requiring a standard means of defining and analyzing the data resources within an organization. &lt;/p&gt;  &lt;p&gt;Data modeling may be performed during various types of projects and in multiple phases of projects. Data models are usually progressive and there should be is no such thing as the final data model for a business or application. A data model should be considered a living document that will change in response to business needs and situations. The data models should ideally be stored in a repository so that they can be retrieved, expanded, and edited over time. Some two possible types of data modeling are Strategic data modeling and Tactical data modeling. Strategic data modeling: This is part of the creation of an information systems strategy, which defines an overall vision and architecture for information systems is defined. Information engineering is a methodology that embraces this approach. &lt;/p&gt;  &lt;p&gt;Tactical or Analytic data modeling during systems analysis are usually logical data models are created as part of the development of new databases. Data modeling also enables the development business requirements for a database. It is sometimes called database modeling because a data model is eventually implemented in a database. &lt;/p&gt;  &lt;p&gt;A conceptual schema or conceptual data model is a map of concepts and their relationships. This describes the semantics of an organization and represents a series of assertions about its nature. Specifically, it describes the things of significance to an organization (entity classes), about which it is inclined to collect information, and characteristics of (attributes) and associations between pairs of those things of significance (relationships).&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="SQL Saturday #12 - Paul" href="http://www.flickr.com/photos/38259534@N05/3601994400/"&gt;&lt;img alt="SQL Saturday #12 - Paul" src="http://static.flickr.com/2312/3601994400_f3b70a3223.jpg" border="0" width="340" height="319" /&gt;&lt;/a&gt;&lt;a title="Day 009 - Web Design..." href="http://www.flickr.com/photos/33988590@N00/3309654437/"&gt;&lt;img alt="Day 009 - Web Design..." src="http://static.flickr.com/3539/3309654437_6d7a8d5671.jpg" border="0" width="413" height="311" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-8028340534231701097?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/8028340534231701097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=8028340534231701097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/8028340534231701097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/8028340534231701097'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/06/data-modeling-process-and-steps.html' title='Data modeling process and steps'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-4275620171232804274</id><published>2009-06-24T08:09:00.003-05:00</published><updated>2009-06-26T22:11:36.403-05:00</updated><title type='text'>Web Deployment Projects with Visual Studio 2008</title><content type='html'>&lt;p&gt;Visual Studio 2008 provides deployment support through its Copy Web Site and Publish Web Site features. While these are ideal for many scenarios, there are other, more advanced scenarios where developers need the following capabilities: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;More control over assembly naming and output. &lt;/li&gt;    &lt;li&gt;Custom pre-processing and post-processing for the build. &lt;/li&gt;    &lt;li&gt;The ability to exclude, add, and transform files and directories during builds. &lt;/li&gt;    &lt;li&gt;The ability to modify the Web.config file to change database connection strings, application settings, or the URLs for Web references, depending on the build configuration. (For example, it might be necessary to use different values for development, test, staging, and release settings). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;Web Deployment Projects&lt;/h4&gt;  &lt;p&gt;Web Deployment Projects is an add-in package to Visual Studio 2008 . It does not change the behavior of any feature in Visual Studio 2008 ; it simply adds additional functionality specific to Web site deployment.&lt;/p&gt;  &lt;p&gt;A Web Deployment project is an MSBuild project file for a Web site. It fully integrates into the Visual Studio 2008 build configuration manager and supports configuration options for compilation and deployment, such as Debug and Release. A Web Deployment project is extensible, enabling you to create pre-build and post-build actions.&lt;/p&gt;  &lt;p&gt;Web Deployment projects do not change the way Visual Studio 2008 Web site projects build. Instead, they take an existing Web site project as input and generate a precompiled Web site as output. A Web Deployment project does not change the files in the source Web site project in any way.&lt;/p&gt;  &lt;h5&gt;Feature Summary&lt;/h5&gt;  &lt;p&gt;A Web Deployment project provides the following features for building and deploying ASP.NET 2.0 or greater Web sites: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ASP.NET 2.0 precompilation as part of the build process. &lt;/li&gt;    &lt;li&gt;More flexible options for generating compiled assemblies from a Web project, including these alternatives:      &lt;ul&gt;       &lt;li&gt;A single assembly for the entire Web site. &lt;/li&gt;        &lt;li&gt;One assembly per content folder. &lt;/li&gt;        &lt;li&gt;A single assembly for all UI components. &lt;/li&gt;        &lt;li&gt;An assembly for each compiled file in the Web site. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Assembly signing options. &lt;/li&gt;    &lt;li&gt;The ability to define custom pre-build and post-build actions. &lt;/li&gt;    &lt;li&gt;The ability to exclude folders from the build. &lt;/li&gt;    &lt;li&gt;The ability to modify settings in the Web.config file, such as the &lt;strong&gt;&amp;lt;connectionString&amp;gt;&lt;/strong&gt; element, based on the Visual Studio build configuration. &lt;/li&gt;    &lt;li&gt;Support for creating .msi files with setup projects. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The extensibility of Web Deployment projects enables you to tailor the build and deploy process to suit your needs. This is done without sacrificing the optimized workflow improvements achieved with Visual Studio 2008 Web site projects.&lt;/p&gt;  &lt;h4&gt;Installing Web Deployment Projects&lt;/h4&gt;  &lt;p&gt;Installing Web Deployment projects installs both a Visual Studio 2008 add-in package and the new ASP.NET merge utility (aspnet_merge.exe).&lt;/p&gt;  &lt;p&gt;By default, the installation process installs files into the locations listed in the following table.&lt;/p&gt;  &lt;p&gt;Location/Files&lt;/p&gt;  &lt;p&gt;C:\Program Files\MSBuild\Microsoft\WebDeployment\v8.0  &lt;br /&gt;aspnet_merge.exe ,Microsoft.WebDeployment.targets,Microsoft.WebDeployment.Tasks.dll&lt;/p&gt;  &lt;p&gt;C:\Program Files\Microsoft Visual Studio 8\Common7\Packages  &lt;br /&gt;MsWebDeployProj.dll , WebDeploy.wdproj&lt;/p&gt;  &lt;p&gt;C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\1033  &lt;br /&gt;MsWebDeployProjUi.dll&lt;/p&gt;  &lt;p&gt;You can install Web Deployment projects on a computer that does not have Visual Studio 2008 installed. This is useful if you want to use MSBuild features on a dedicated build computer. MSBuild is part of the Microsoft .NET Framework version 2.0 and does not require installation of Visual Studio 2008.&lt;/p&gt;  &lt;h4&gt;New Menu Commands&lt;/h4&gt;  &lt;p&gt;Installing Web Deployment Projects adds the &lt;strong&gt;Add Web Deployment Project&lt;/strong&gt; command to the &lt;strong&gt;Build&lt;/strong&gt; menu and to the shortcut menu for the selected Web project in Solution Explorer. The new command is supported only for local IIS Web sites and for file system Web sites. Web Deployment Projects do not support remote FrontPage or FTP Web sites.&lt;/p&gt;  &lt;blockquote&gt;&lt;strong&gt;Note&lt;/strong&gt;   The &lt;strong&gt;Add Web Deployment Project &lt;/strong&gt;command is the only way to add a Web Deployment project to the solution. This new project type is not available in the &lt;strong&gt;New Project&lt;/strong&gt; dialog box.&lt;/blockquote&gt;  &lt;p&gt;When you create a Web Deployment project, the new Web Deployment project is associated with the Web site you created it for. Generally there is a one-to-one relationship between the Web site and the Web Deployment project. Each Web site in a solution can have its own Web Deployment project. You can also optionally create multiple Web Deployment projects for the same site.&lt;/p&gt;  &lt;p&gt;Advanced scenarios merging multiple Web sites into a single Web site can be achieved through custom build actions as described in the section &lt;a href="http://msdn.microsoft.com/en-us/library/aa479568.aspx#custwdp"&gt;Customizing Web Deployment Projects&lt;/a&gt; later in this paper.&lt;/p&gt;  &lt;h4&gt;Adding a Web Deployment Project&lt;/h4&gt;  &lt;p&gt;To add a Web Deployment project to a Web site, follow these steps. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;In Solution Explorer, select the name of the Web site to work with. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Build&lt;/strong&gt; menu, choose &lt;strong&gt;Add Web Deployment Project&lt;/strong&gt;.       &lt;p&gt;The &lt;strong&gt;Add Web Deployment Project&lt;/strong&gt; dialog box is displayed: &lt;/p&gt;      &lt;p&gt;&lt;img alt="Aa479568.webdep_fig01(en-us,MSDN.10).gif" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig01%28en-us,MSDN.10%29.gif" width="365" height="158" /&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Specify a name and location for the project.      &lt;p&gt;By default, the project name is the same as the Web site with &lt;code&gt;_deploy&lt;/code&gt; appended to the name. The default location is in the same folder as the solution. &lt;/p&gt;      &lt;p&gt;In the example shown here, the Web site path is C:\MyProjects\MyWeb. The project file will be named MyWeb_deploy.webdeployproj, and the project folder path will be C:\MyProjects\MyWeb_deploy\. &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;.       &lt;p&gt;A new project is added to the solution and automatically associated with the Web site. The new Web Deployment project is now part of the build process. &lt;/p&gt;      &lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;   When creating a new Web site project that you will add other projects to (such as a class library project or a Web Deployment project), start by creating an empty solution in the location of your choice. Then add the new Web site to that solution. This ensures that Visual Studio puts all of the project files in the same set of directories and subdirectories. &lt;/p&gt;      &lt;p&gt;The new Web Deployment project does not contain any files or child nodes in the solution hierarchy. Instead, it is an MSBuild project file that enables you to customize the build rules for the associated Web site. &lt;/p&gt;      &lt;p&gt;You can view properties for the current Web Deployment project in the &lt;strong&gt;Properties&lt;/strong&gt; window. (These properties are distinct from the settings for build configurations, which you edit using the &lt;strong&gt;Property Pages&lt;/strong&gt; dialog box, as discussed in the next section.) &lt;/p&gt;      &lt;p&gt;&lt;img alt="Aa479568.webdep_fig02(en-us,MSDN.10).gif" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig02%28en-us,MSDN.10%29.gif" /&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Web Deployment Project Property Pages&lt;/h4&gt;  &lt;p&gt;You can create and edit individual configurations for the current Web Deployment project using the &lt;strong&gt;Property Pages&lt;/strong&gt; dialog box. (This dialog box is available by right-clicking the project in Solution Explorer and then selecting &lt;strong&gt;Property Pages&lt;/strong&gt;). The &lt;strong&gt;Property Pages&lt;/strong&gt; dialog box for a Web Deployment project displays four property pages: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Compilation &lt;/li&gt;    &lt;li&gt;Output Assemblies &lt;/li&gt;    &lt;li&gt;Signing &lt;/li&gt;    &lt;li&gt;Deployment &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The properties on each of these property pages can have unique values for each build configuration. Visual Studio 2005 provides two default configurations: Debug and Release. You can use these predefined configurations or define new configurations (such as Staging or Production), depending on your needs. All the settings you make in the &lt;strong&gt;Property Pages&lt;/strong&gt; dialog box apply to the selected configuration. &lt;/p&gt;  &lt;h5&gt;Compilation Page&lt;/h5&gt;  &lt;p&gt;The &lt;strong&gt;Compilation&lt;/strong&gt; page of the Web Deployment project's property pages dialog box looks like the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/Aa479568.webdep_fig03l%28en-us,MSDN.10%29.gif"&gt;&lt;img alt="Click here for larger image" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig03s%28en-us,MSDN.10%29.gif" width="416" height="248" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The following table describes the properties you can set in the &lt;strong&gt;Compilation&lt;/strong&gt; page. &lt;/p&gt;  &lt;p&gt;Setting/Description&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Output folder&lt;/strong&gt;   &lt;br /&gt;Specifies the folder to contain the precompiled image of the Web site. The default is to create a subfolder with the same name as the configuration in the folder where the Web Deployment project file is stored.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Generate debug information&lt;/strong&gt;   &lt;br /&gt;Generates .pdb files when compiling. This setting will also update the value of the &lt;strong&gt;&amp;lt;compilation debug="true"/&amp;gt;&lt;/strong&gt;&lt;code&gt; &lt;/code&gt;element in the configuration file of the precompiled Web site.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Use IIS Metabase path for source input&lt;/strong&gt;   &lt;br /&gt;Specifies the full IIS metabase path of the source Web site application. This setting corresponds to the &lt;strong&gt;–m&lt;/strong&gt; option of the aspnet_compiler.exe command. &lt;/p&gt;  &lt;p&gt;For example, a metabase path might be /LM/W3SVC/1/ROOT/&lt;em&gt;MyWeb&lt;/em&gt;/, where &lt;em&gt;MyWeb&lt;/em&gt; is the virtual directory.&lt;/p&gt;  &lt;p&gt;This setting is useful if your Web site contains one or more sub-Web sites. During compilation, the compiler processes all the files in a directory tree. If there are sub-Web sites, this will result in build errors. To avoid these errors, you can specify the IIS metabase path of the Web site you are compiling, which causes the ASP.NET compiler to skip any sub-Web sites defined in the IIS metabase.&lt;/p&gt;  &lt;p&gt;To compile the sub-Web sites, you must add a separate Web Deployment project for each of the sub-Web sites.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Allow this precompiled site to be updatable&lt;/strong&gt;   &lt;br /&gt;Enables ASP.NET Web pages and user controls (.aspx and .ascx files) to be updated after compilation; only the code-behind files are compiled. If this option is not checked, the HTML markup for pages and controls is removed and compiled into the assembly output.&lt;/p&gt;  &lt;h5&gt;Output Assemblies Page&lt;/h5&gt;  &lt;p&gt;The &lt;strong&gt;Output Assemblies&lt;/strong&gt; page of the Web Deployment project's property pages dialog box looks like the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/Aa479568.webdep_fig05l%28en-us,MSDN.10%29.gif"&gt;&lt;img alt="Click here for larger image" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig05s%28en-us,MSDN.10%29.gif" width="419" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The following table describes the properties you can set in the &lt;strong&gt;Output Assemblies&lt;/strong&gt; page. &lt;/p&gt;  &lt;p&gt;Setting / Description&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Merge all outputs to a single assembly&lt;/strong&gt;   &lt;br /&gt;Merges all the output assemblies from the compiler into a single assembly. This setting is equivalent to the &lt;strong&gt;-o &lt;em&gt;assemblyname&lt;/em&gt;&lt;/strong&gt; option of the aspnet_merge.exe command. This results in the same behavior that Visual Studio .NET 2003 supports, where one assembly is generated for each Web project.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Treat as library component&lt;/strong&gt;   &lt;br /&gt;Removes the App_code.compiled file. This enables the project's App_Code.dll assembly to be added to the Bin folder of another Web site without conflicting with the App_Code.dll assembly in the other Web site. This setting is equivalent to the &lt;strong&gt;-r&lt;/strong&gt; option of the aspnet_merge.exe command. &lt;/p&gt;  &lt;p&gt;This option is useful for building a library of .ascx controls.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Merge each folder output to its own assembly&lt;/strong&gt;   &lt;br /&gt;Creates a separate output assembly for each folder. This enables you to update your Web site at the folder level rather than updating the entire application. This setting is equivalent to the &lt;strong&gt;-prefix &lt;em&gt;prefixname&lt;/em&gt;&lt;/strong&gt; option of the aspnet_merge.exe command. &lt;/p&gt;  &lt;p&gt;You can optionally specify a prefix that will be pre-pended to all generated assembly names. For example, if you specify the prefix MyCompany, the name becomes MyCompany.&lt;em&gt;SubfolderName.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Merge all pages and controls to a single assembly&lt;/strong&gt;   &lt;br /&gt;Merges the output assemblies for all pages and user controls in the Web site into a single assembly. This enables you to update UI elements separately from updating other code. Special folders such as App_Code, App_WebReferences, and so on are each compiled into a separate assembly. &lt;/p&gt;  &lt;p&gt;This setting is equivalent to the &lt;strong&gt;–w &lt;em&gt;assemblyname&lt;/em&gt;&lt;/strong&gt; option of the aspnet_merge.exe command.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Create a separate assembly for each page and control&lt;/strong&gt;   &lt;br /&gt;Compiles each page and user control into a separate assembly. This setting does not run aspnet_merge.exe. Instead, it uses the &lt;strong&gt;-fixednames&lt;/strong&gt; option of the aspnet_compiler.exe command. &lt;/p&gt;  &lt;blockquote&gt;&lt;strong&gt;Note&lt;/strong&gt;   Compiling with the &lt;strong&gt;-fixednames&lt;/strong&gt; option disables the compiler's batch optimizations and can result in longer compile times for large Web sites.&lt;/blockquote&gt;  &lt;p&gt;This option is useful for granular updates of your deployed Web site.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Version Output Assemblies&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Assembly Version&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;File Version&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sets the assembly version and/or the file version attribute of merged assemblies. The format is &lt;em&gt;0.0.0.0&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;This setting overrides the assembly attributes defined in the AssemblyInfo.vb or AssemblyInfo.cs file in the App_Code directory.&lt;/p&gt;  &lt;p&gt;This setting is equivalent to the &lt;strong&gt;-copyattrs &lt;/strong&gt;&lt;em&gt;assemblyfile&lt;/em&gt; option of the aspnet_merge.exe command.&lt;/p&gt;  &lt;h5&gt;Signing Page&lt;/h5&gt;  &lt;p&gt;The &lt;strong&gt;Signing&lt;/strong&gt; page of the Web Deployment project's property pages dialog box looks like the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/Aa479568.webdep_fig07l%28en-us,MSDN.10%29.gif"&gt;&lt;img alt="Click here for larger image" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig07s%28en-us,MSDN.10%29.gif" width="409" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The following table describes the properties you can set in the &lt;strong&gt;Signing&lt;/strong&gt; page. &lt;/p&gt;  &lt;p&gt;Setting /Description&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Key file location&lt;/strong&gt;   &lt;br /&gt;Specifies the path to the keyfile used to sign the assemblies. Keyfiles are produced with the Sn.exe utility included with the .NET Framework SDK.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Delay signing&lt;/strong&gt;   &lt;br /&gt;Compiles the assemblies with delay signing. This enables the assemblies to be signed as part of a post-build process.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mark assemblies with AllowPartiallyTrustedCallers attribute (APTCA). &lt;/strong&gt;  &lt;br /&gt;Specifies that types in strongly named assemblies can be called by partially trusted code only when the assemblies have been marked with the &lt;strong&gt;AllowPartiallyTrustedCallers&lt;/strong&gt; attribute (APTCA). This attribute removes the implicit link demand for the Full trust permission set that is otherwise automatically enforced on each publicly accessible method in each type.&lt;/p&gt;  &lt;h5&gt;Deployment Page&lt;/h5&gt;  &lt;p&gt;The Deployment page of the Web Deployment project's property pages dialog box looks like the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/Aa479568.webdep_fig09l%28en-us,MSDN.10%29.gif"&gt;&lt;img alt="Click here for larger image" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig09s%28en-us,MSDN.10%29.gif" width="416" height="251" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The following table describes the properties you can set in the Deployment page. &lt;/p&gt;  &lt;p&gt;Setting /Description&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Enable Web.config file section replacement&lt;/strong&gt;   &lt;br /&gt;Enables the replacement of any section in the root Web.config file with the content of a matching section in a separate (external) .config file. The external file can contain only the section being replaced. &lt;/p&gt;  &lt;p&gt;This option enables you to define elements that are written to the root Web.config file at deployment time, which in turn provides a way to create deployment-specific configuration sections. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Enforce matching section replacements&lt;/strong&gt;   &lt;br /&gt;Requires that the specified section in the Web.config file have the same number of elements as the replacement section in the external .config file. A build error occurs if there is a mismatch in the number of elements. This option helps you detect when changes have been made to the Web.config file but are not reflected in external .config files.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Use external configuration source file&lt;/strong&gt;   &lt;br /&gt;Updates the Web.config file by replacing existing sections with elements that reference a .config file, using the &lt;strong&gt;configSource&lt;/strong&gt; attribute: &lt;/p&gt;  &lt;pre&gt;&amp;lt;appSettings&lt;br /&gt;&lt;code&gt;&lt;strong&gt;configSource="appSettings.config"&lt;/strong&gt;&lt;/code&gt; /&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If this option is not selected, the section is replaced entirely with the elements in the .config file. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This option is useful for changing the database connection strings or Web reference URLs for each build configuration.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Create an IIS virtual directory for the output folder&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creates an IIS virtual directory pointing to the output folder for this build configuration, using the name you specify. This is useful for immediate testing of the precompiled Web application. To avoid conflict with other configurations, include the configuration name as part of the virtual directory name. For example, use virtual directory names such as MyWeb_Staging and MyWeb_Release.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Replace the existing virtual directory&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If the virtual directory already exists and is pointing to a different folder, updates the metabase to point to the output folder for this configuration . If this option is not selected, an error occurs if the virtual directory path does not match the output folder. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Remove the App_Data folder&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Removes the App_Data folder from the precompiled image of the Web site. This is useful if you are changing connection strings to access a SQL Server database and no longer require a SQL Server Express or Access database in the App_Data folder.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Managing Custom Build Configurations&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Using Visual Studio build configurations, you can define the specific build processes that are necessary for producing a staging or release build of your Web application. There are three build configurations commonly used for building Web site applications: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Debug build configuration&lt;/strong&gt;   This is the default build configuration used at design time. In team development scenarios, it is often desirable to isolate developers so that they do not overwrite one another's changes while editing and debugging. In those cases, developers typically use either a local IIS Web site (and a locally installed instance of IIS) or a file system Web site and the built-in ASP.NET development server. Similarly, each developer will typically use a local SQL Server, SQL Server Express, or Access database. Developers can even implement Web services locally and consume them using a Web reference that points to http://localhost/. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Staging build configuration&lt;/strong&gt;   Once developers have a version of the Web site ready for testing, they can produce a build configured for a testing or staging environment. The staging environment is often a replica of the production or release environment. For example, a staging environment will likely use a shared SQL Server database containing test data. Web services may also be distributed across other computers in the staging environment. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Release build configuration&lt;/strong&gt;   When the Web site is ready for a production release, database connections and Web references must be changed to reflect the production environment. For optimal performance, it is also recommend that the Debug compilation mode be set to False in the application's Web.config file. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Web Deployment projects enable you to customize the build process and tailor the Web site application to the environment in which it will be deployed.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;All property values for a Web deployment project apply to a specific build configuration. By changing the selected configuration, you can change the settings for a specific configuration. Alternatively, by selecting &lt;strong&gt;All Configurations&lt;/strong&gt;, you can apply a change globally across all configurations.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To create a new configuration, in the project &lt;strong&gt;Property Pages&lt;/strong&gt; dialog box, click the &lt;strong&gt;Configuration Manager&lt;/strong&gt; button:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/Aa479568.webdep_fig11l%28en-us,MSDN.10%29.gif"&gt;&lt;img alt="Click here for larger image" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig11s%28en-us,MSDN.10%29.gif" width="414" height="91" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This displays the &lt;strong&gt;Configuration Manager&lt;/strong&gt; dialog box. The configuration manager enables you to create new configurations and to specify which projects to build as part of that configuration. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Visual Studio exposes two levels of build configurations: solution configurations and project configurations. For more information about build configurations, see &lt;a href="http://msdn2.microsoft.com/en-us/library/kkz9kefa%28en-US,VS.80%29.aspx"&gt;Build Configurations&lt;/a&gt; on the MSDN Web site.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The configuration manager shows the active solution configuration and the build configuration setting for each project for that solution configuration. After you add a Web Deployment project to the solution, the configuration manager lists both the Web site project and the Web Deployment project. By default, both projects are configured to build whenever the solution is built:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img alt="Aa479568.webdep_fig13(en-us,MSDN.10).gif" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig13%28en-us,MSDN.10%29.gif" width="413" height="267" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You should disable building the Web Deployment project in the Debug configuration. Building a Web Deployment project unnecessarily increases the time it takes to build a solution or start a debug session when you press F5. You should enable building the Web Deployment project only in solution configurations intended for deployment builds.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Using the &lt;strong&gt;Configuration Manager&lt;/strong&gt; dialog box, you can create a new Staging configuration. You can also specify which projects should build when a specific solution configuration is built. For more information about the configuration manager, see &lt;a href="http://msdn2.microsoft.com/en-us/library/t1hy4dhz.aspx"&gt;Configuration Manager Dialog Box&lt;/a&gt; on the MSDN Web site.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The builds for Web site projects are optimized for developer productivity and do not run the ASP.NET 2.0 compiler to precompile the site. The build for the Web Deployment projects invoke the ASP.NET 2.0 compiler to precompile the site and take advantage of the new assembly merge utility (aspnet_merge.exe). When you create your solution configurations, you should build either the Web site project or the Web Deployment project, but not both. The following table presents a matrix suggesting the project build settings for different solution configurations.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Solution configuration&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Build strategy&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Debug&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Staging&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Release&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Build Web site project&lt;br /&gt;&lt;br /&gt;True&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;False&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;False&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Build Web Deployment project&lt;br /&gt;&lt;br /&gt;False&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;True&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;True&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To specify the solution configuration to use when you build, select the configuration name from the &lt;strong&gt;Solution Configurations&lt;/strong&gt; list on the toolbar:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img alt="Aa479568.webdep_fig14(en-us,MSDN.10).gif" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig14%28en-us,MSDN.10%29.gif" width="396" height="111" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;Note&lt;/strong&gt;   Some Visual Studio Development Settings, such as the Web Development Settings and Visual Basic Development Settings, do not include the &lt;strong&gt;Solution Configurations&lt;/strong&gt; command on the toolbar. To add the command, from the &lt;strong&gt;Tools&lt;/strong&gt; menu, choose &lt;strong&gt;Customize&lt;/strong&gt;. Click the &lt;strong&gt;Commands&lt;/strong&gt; tab, select the &lt;strong&gt;Build&lt;/strong&gt; category, and then from the commands list drag the &lt;strong&gt;Solution Configurations&lt;/strong&gt; command to the toolbar.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img alt="Aa479568.webdep_fig15(en-us,MSDN.10).gif" src="http://i.msdn.microsoft.com/Aa479568.webdep_fig15%28en-us,MSDN.10%29.gif" width="419" height="333" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Building a Web Deployment Project&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When you have your build configurations established, you can initiate a build for any configuration. There are two ways to build a Web Deployment project—from within Visual Studio 2008 or from the command line using MSBuild.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Building Within Visual Studio 2008&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To build within Visual Studio 2008, in the toolbar, select &lt;strong&gt;Release&lt;/strong&gt; from the &lt;strong&gt;Solution Configurations&lt;/strong&gt; list in the toolbar. This makes Release the current solution configuration. Then from the &lt;strong&gt;Build&lt;/strong&gt; menu, choose &lt;strong&gt;Build Solution&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The output for the build is displayed in the Output window. An example of the output from a build is shown in the following listing. Notice that in this example, the Web site project was skipped, and instead the Web Deployment project was built.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;------ Skipped Build: Project: c:\...\MyWeb\, Configuration: Debug .NET ------&lt;br /&gt;Project not selected to build for this solution configuration&lt;br /&gt;------ Build started: Project: MyWeb_deploy, Configuration: Release Any CPU ------&lt;br /&gt;Build started 11/7/2005 9:40:09 AM.&lt;br /&gt;Target AspNetCompiler:&lt;br /&gt;  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe –&lt;br /&gt;v /MyWeb -p c:\MyProjects\MyWeb\MyWeb -u -f&lt;br /&gt;c:\MyProjects\MyWeb\MyWeb_deploy\Release\&lt;br /&gt;  Updateing web.config compilation debug = 'False' ...&lt;br /&gt;  Successfully updated web.config compilation debug = 'False' ...&lt;br /&gt;  Removing directory "c:\MyProjects\MyWeb\MyWeb_deploy\Release\\App_Data".&lt;br /&gt;Target GenerateAssemblyInfo:&lt;br /&gt;  Generating AssemblyInfo ...&lt;br /&gt;  Setting [assembly: AssemblyFileVersion("2.0.0.0")]&lt;br /&gt;  Setting [assembly: AssemblyVersion("2.0.0.0")]&lt;br /&gt;  Successfully Generated AssebmlyInfo ...&lt;br /&gt;  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe&lt;br /&gt;/out:c:\MyProjects\MyWeb\MyWeb_deploy\AssemblyInfo\Release\AssemblyInfo&lt;br /&gt;.dll /target:library&lt;br /&gt;c:\MyProjects\MyWeb\MyWeb_deploy\AssemblyInfo\Release\AssemblyInfo.cs&lt;br /&gt;Target AspNetMerge:&lt;br /&gt;  Running aspnet_merge.exe ...&lt;br /&gt;  C:\Program Files\MSBuild\Microsoft\WebDeployment\v8.0\aspnet_merge.exe&lt;br /&gt;c:\MyProjects\MyWeb\MyWeb_deploy\Release -o MyCompany.MyWeb -copyattrs&lt;br /&gt;c:\MyProjects\MyWeb\MyWeb_deploy\AssemblyInfo\Release\AssemblyInfo.dll&lt;br /&gt;  Successfully merged 'c:\MyProjects\MyWeb\MyWeb_deploy\Release'.&lt;br /&gt;Target ReplaceWebConfigSections:&lt;br /&gt;  Updating web.config: RootPath =&lt;br /&gt;c:\MyProjects\MyWeb\MyWeb_deploy\Release\, ValidateSections = False,&lt;br /&gt;UseExternalConfigSource = True&lt;br /&gt;  Replacing section connectionStrings with file release.config&lt;br /&gt;  Update of web.config Succeeded.&lt;br /&gt;Target CreateVirtualDirectory:&lt;br /&gt;  Initializing IIS Web Server...&lt;br /&gt;  Successfully created virtual directory 'MyWeb_Release'.&lt;br /&gt;  Granting IIS read access to the folder 'c:\MyProjects\MyWeb\MyWeb_deploy\Release'...&lt;br /&gt;  Grant folder access successful.&lt;br /&gt;  Not setting IIS access to folder&lt;br /&gt;'c:\MyProjects\MyWeb\MyWeb_deploy\Release\App_Data'. Folder does not exist.&lt;br /&gt;&lt;br /&gt;Build succeeded.&lt;br /&gt;&lt;br /&gt;Time Elapsed 00:00:11.52&lt;br /&gt;========== Build: 1 succeeded or up-to-date, 0 failed, 1 skipped&lt;br /&gt;==========&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To control the amount of information displayed by MSBuild, from the &lt;strong&gt;Tools&lt;/strong&gt; menu, choose &lt;strong&gt;Options&lt;/strong&gt;. Choose &lt;strong&gt;Projects and Solutions&lt;/strong&gt;, and under &lt;strong&gt;Build and Run&lt;/strong&gt;, select the level of detail you want from the &lt;strong&gt;MSBuild project build output verbosity&lt;/strong&gt; list. The settings are &lt;strong&gt;Quiet&lt;/strong&gt;, &lt;strong&gt;Minimal&lt;/strong&gt;, &lt;strong&gt;Normal&lt;/strong&gt;, &lt;strong&gt;Detailed&lt;/strong&gt;, and &lt;strong&gt;Diagnostic&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Building from the Command Line Using MSBuild&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can also build the solution or .wdproj file from the command line using the msbuild.exe command. To specify which configuration to build, set the configuration to use by passing it on the command line with the &lt;strong&gt;/p&lt;/strong&gt; switch, as shown in the following example:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;C:\MyProjects\MyWeb&amp;gt;msbuild MyWeb.sln &lt;code&gt;&lt;strong&gt;/p:Configuration=Release&lt;/strong&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The output from the build process will look like the following listing:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Microsoft (R) Build Engine Version 2.0.50727.42&lt;br /&gt;[Microsoft .NET Framework, Version 2.0.50727.42]&lt;br /&gt;Copyright (C) Microsoft Corporation 2005. All rights reserved.&lt;br /&gt;&lt;br /&gt;Build started 11/7/2005 10:01:05 AM.&lt;br /&gt;__________________________________________________&lt;br /&gt;Project "C:\MyProjects\MyWeb\MyWeb.sln" (default targets):&lt;br /&gt;&lt;br /&gt;Target ValidateSolutionConfiguration:&lt;br /&gt;  Building solution configuration "Release|Mixed Platforms".&lt;br /&gt;Target Build:&lt;br /&gt;  Target MyWeb_deploy:&lt;br /&gt;      __________________________________________________&lt;br /&gt;      Project "C:\MyProjects\MyWeb\MyWeb.sln" is building&lt;br /&gt;"C:\MyProjects\MyWeb\MyWeb_deploy\MyWeb_deploy.wdproj" (default&lt;br /&gt;targets):&lt;br /&gt;&lt;br /&gt;      Target AspNetCompiler:&lt;br /&gt;        &lt;br /&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v&lt;br /&gt;/MyWeb -p C:\MyProjects\MyWeb\MyWeb -u -f&lt;br /&gt;C:\MyProjects\MyWeb\MyWeb_deploy\Release\&lt;br /&gt;          Updateing web.config compilation debug = 'False' ...&lt;br /&gt;          Successfully updated web.config compilation debug = 'False' ...&lt;br /&gt;          Removing directory&lt;br /&gt;"C:\MyProjects\MyWeb\MyWeb_deploy\Release\\App_Data".&lt;br /&gt;      Target GenerateAssemblyInfo:&lt;br /&gt;          Generating AssemblyInfo ...&lt;br /&gt;          Setting [assembly: AssemblyFileVersion("2.0.0.0")]&lt;br /&gt;          Setting [assembly: AssemblyVersion("2.0.0.0")]&lt;br /&gt;          Successfully Generated AssebmlyInfo ...&lt;br /&gt;          C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe&lt;br /&gt;/out:C:\MyProjects\MyWeb\MyWeb_deploy\AssemblyInfo\Release\AssemblyInfo.dll /target:library&lt;br /&gt;C:\MyProjects\MyWeb\MyWeb_deploy\AssemblyInfo\Release\AssemblyInfo.cs&lt;br /&gt;      Target AspNetMerge:&lt;br /&gt;          Running aspnet_merge.exe ...&lt;br /&gt;          C:\Program&lt;br /&gt;Files\MSBuild\Microsoft\WebDeployment\v8.0\aspnet_merge.exe&lt;br /&gt;C:\MyProjects\MyWeb\MyWeb_deploy\Release -o MyCompany.MyWeb -copyattrs&lt;br /&gt;C:\MyProjects\MyWeb\MyWeb_deploy\AssemblyInfo\Release\AssemblyInfo.dll&lt;br /&gt;          Successfully merged&lt;br /&gt;'C:\MyProjects\MyWeb\MyWeb_deploy\Release'.&lt;br /&gt;      Target ReplaceWebConfigSections:&lt;br /&gt;          Updating web.config: RootPath =&lt;br /&gt;C:\MyProjects\MyWeb\MyWeb_deploy\Release\, ValidateSections = False,&lt;br /&gt;UseExternalConfigSource = True&lt;br /&gt;          Replacing section connectionStrings with file&lt;br /&gt;release.config&lt;br /&gt;          Update of web.config Succeeded.&lt;br /&gt;      Target CreateVirtualDirectory:&lt;br /&gt;          Initializing IIS Web Server...&lt;br /&gt;          Successfully created virtual directory 'MyWeb_Release'.&lt;br /&gt;          Granting IIS read access to the folder&lt;br /&gt;'C:\MyProjects\MyWeb\MyWeb_deploy\Release'...&lt;br /&gt;          Grant folder access successful.&lt;br /&gt;          Not setting IIS access to folder&lt;br /&gt;'C:\MyProjects\MyWeb\MyWeb_deploy\Release\App_Data'. Folder does not&lt;br /&gt;exist.&lt;br /&gt;&lt;br /&gt;Build succeeded.&lt;br /&gt;  0 Warning(s)&lt;br /&gt;  0 Error(s)&lt;br /&gt;&lt;br /&gt;Time Elapsed 00:00:14.13&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The files generated for this build are in the MyWeb_deploy\Release folder. Note the single output assembly MyCompany.MyWeb.dll.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Location&lt;br /&gt;&lt;br /&gt;Files&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;C:\MyProjects\MyWeb\MyWeb_deploy\Release&lt;br /&gt;&lt;br /&gt;Default.aspx &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;PrecompiledApp.config&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;release.config&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;web.config&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;C:\MyProjects\MyWeb\MyWeb_deploy\Release\bin&lt;br /&gt;&lt;br /&gt;App_Code.compiled &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;MyCompany.MyWeb.dll&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;a&gt;&lt;/a&gt;Customizing Web Deployment Projects&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Web Deployment projects are MSBuild project files. The Web Deployment project file has the file name extension .wdproj. All the properties you set using the Web Deployment projects property pages are persisted in the .wdproj file as MSBuild properties or items. For more information about MSBuild and its properties and settings, see &lt;a href="http://msdn2.microsoft.com/en-us/library/ms171452"&gt;MSBuild Overview&lt;/a&gt; on the MSDN Web site.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can customize the build process for Web Deployment projects by editing the Web Deployment project file. To do this, right-click the Web deployment project in Solution Explorer, and then select &lt;strong&gt;Open Project File&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the file you will find one property group for each configuration. This is where the &lt;strong&gt;Web Deployment Property Pages&lt;/strong&gt; dialog box persists the settings for each configuration you create.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Near the bottom of the file you see a comment block containing four MSBuild targets:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  &amp;lt;!-- To modify your build process, add your task inside one of the&lt;br /&gt;targets below and uncomment it.&lt;br /&gt;Other similar extension points exist, see&lt;br /&gt;Microsoft.WebDeployment.targets.&lt;br /&gt;&amp;lt;Target Name="BeforeBuild"&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;Target Name="BeforeMerge"&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;Target Name="AfterMerge"&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;Target Name="AfterBuild"&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;--&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can override these targets to add custom build tasks. For example, the Personal Web Starter Kit included with Visual Studio 2005 uses a special folder named Upload for uploading images from users. This folder must exist for upload functionality to work properly. To ensure that this folder always exists in the precompiled Web site, you can add the following target and task:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  &amp;lt;Target Name="AfterBuild"&amp;gt;&lt;br /&gt;  &amp;lt;MakeDir Directories="$(TargetDir)\Upload" /&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;MSBuild includes many predefined tasks, such as &lt;strong&gt;MakeDir&lt;/strong&gt;. MSBuild also provides a way for you to create your own tasks. For more information on custom MSBuild tasks, see &lt;a href="http://msdn2.microsoft.com/en-us/library/t9883dzc"&gt;How To: Write a Task&lt;/a&gt; on the MSDN Web site.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In addition to overriding targets and creating custom tasks, you can add properties and items to the MSBuild tasks included with Web Deployment projects. For example, by adding the following &lt;strong&gt;&amp;lt;ItemGroup&amp;gt;&lt;/strong&gt; section to a Web Deployment project, you can exclude the Test and Images folder from the build process:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;  &amp;lt;ExcludeFromBuild Include="$(SourceWebPhysicalPath)\Test\**\*.*"/&amp;gt;&lt;br /&gt;  &amp;lt;ExcludeFromBuild&lt;br /&gt;Include="$(SourceWebPhysicalPath)\Images\**\*.*"/&amp;gt;&lt;br /&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This is useful if you have test code in the Web site project that should not be included in the staging or release builds.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;By default, the ASP.NET merge tool applies the assembly attributes from the compiler-generated App_Code assembly to the merged assemblies. The attributes are defined in the AssemblyInfo.cs or AssemblyInfo.vb file included in the App_Code folder. Alternatively, you can define assembly attributes in the Web Deployment project file. This is useful if the attributes will vary between configurations. For example, when you define &lt;strong&gt;Assembly Version&lt;/strong&gt; and &lt;strong&gt;File Version&lt;/strong&gt; in the Web Deployment project property pages, the following &lt;strong&gt;&amp;lt;ItemGroup&amp;gt;&lt;/strong&gt; section is added to the Web Deployment project file:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;  &amp;lt;AssemblyAttributes Include="AssemblyVersion"&amp;gt;&lt;br /&gt;    &amp;lt;value&amp;gt;3.0.0.0&amp;lt;/value&amp;gt;&lt;br /&gt;  &amp;lt;/AssebmlyAttributes&amp;gt;&lt;br /&gt;  &amp;lt;AssebmlyAttributes Include="AssemblyFileVersion"&amp;gt;&lt;br /&gt;    &amp;lt;value&amp;gt;3.0.0.0&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This &lt;strong&gt;&amp;lt;ItemGroup&amp;gt;&lt;/strong&gt; section could also contain any other assembly attribute you want to be included in the merged assemblies. The following listing shows examples of additional assembly attributes defined in an &lt;strong&gt;&amp;lt;ItemGroup&amp;gt;&lt;/strong&gt; section:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;  &amp;lt;/AssebmlyAttributes&amp;gt;&lt;br /&gt;  &amp;lt;AssemblyAttributes Include="AssemblyTitle"&amp;gt;&lt;br /&gt;    &amp;lt;value&amp;gt;MyCompany MyWeb&amp;lt;/value&amp;gt;&lt;br /&gt;  &amp;lt;/AssemblyAttributes&amp;gt;&lt;br /&gt;  &amp;lt;AssemblyAttributes Include="AssemblyDescription"&amp;gt;&lt;br /&gt;    &amp;lt;value&amp;gt;Corporate Site&amp;lt;/value&amp;gt;&lt;br /&gt;  &amp;lt;/AssemblyAttributes&amp;gt;&lt;br /&gt;  &amp;lt;AssemblyAttributes Include="AssemblyCompany"&amp;gt;&lt;br /&gt;    &amp;lt;value&amp;gt;MyCompany&amp;lt;/value&amp;gt;&lt;br /&gt;  &amp;lt;/AssemblyAttributes&amp;gt;&lt;br /&gt;  &amp;lt;AssemblyAttributes Include="AssemblyCopyright"&amp;gt;&lt;br /&gt;    &amp;lt;value&amp;gt;Copyright © MyCompany 2005&amp;lt;/value&amp;gt;&lt;br /&gt;  &amp;lt;/AssemblyAttributes&amp;gt;&lt;br /&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Web Deployment Projects Reference&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following table lists the MSBuild tasks included in Web Deployment projects.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Tasks&lt;br /&gt;&lt;br /&gt;Description&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;ReplaceConfigSections&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Replaces a section in the Web.config file with the matching section from an external (.config) file.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;CreateVirtualDirectory&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creates an IIS virtual directory.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AspNetCompiler&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Calls aspnet_compiler.exe.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AspNetMerge&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Calls aspnet_merge.exe.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;GrantServerAccess&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Grants ASP.NET read or write access to specific folders.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;ToggleDebugCompilation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Changes the value of compilation debug setting in the Web.config file.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;GenerateAssemblyInfo&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Generates an assembly with the assembly attributes defined in the &lt;strong&gt;AssemblyAttributes&lt;/strong&gt; MSBuild item.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following table lists the MSBuild properties included in Web Deployment projects.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Properties&lt;br /&gt;&lt;br /&gt;Description&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;EnableCopyBeforeBuild&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Makes a copy of the Web site before running aspnet_compiler.exe. This is useful for modifying files before they are compiled.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;CopyBeforeBuildTargetPath&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies the folder where the copied Web site should be placed.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;SourceWebPhysicalPath&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies the path to the Web site being compiled.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;EnableUpdateable&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enables the Web site to be updatable.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AllowPartiallyTrustedCallers&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Allows partially trusted callers.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;DeleteAppDataFolder&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Deletes the App_Data folder in the precompiled Web site.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;UseMerge&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When true, causes the &lt;strong&gt;AspNetMerge&lt;/strong&gt; target to execute.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AssemblyPrefixName&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies the prefix for merged assemblies.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;SingleAssemblyName&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies the assembly name used when merging into a single assembly.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;ContentAssemblyName&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies the assembly name used when merging into a separate content assembly.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;MergeErrorStack&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Adds error stack trace information to the build output.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;DeleteAppCodeCompiledFiles&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Deletes the App_Code.compiled file.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;CopyAssemblyAttributes&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies that aspnet_merge.exe should copy the assembly attributes from the App_Code assembly into the merged assemblies.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AssemblyInfoDll&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies an alternate DLL containing the assembly attributes that aspnet_merge.exe should use.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;MergeXmlDocs&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Merge the xml documentation files associated with the assemblies compiled by the aspnet_compiler.exe. This is equivalent to the &lt;strong&gt;–xmldocs&lt;/strong&gt; argument of aspnet_merge.exe.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;MergeErrorLogFile&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies an alternate log file for the merge process.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;UseWebConfigReplacement&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When true, causes the &lt;strong&gt;ReplaceWebConfigSections&lt;/strong&gt; target to execute. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;UseExernalWebConfigReplacementFile&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies whether replaced sections will use the &lt;strong&gt;configSource&lt;/strong&gt; file reference. If false, the section is replaced in place.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;ValidateWebConfigReplacement&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Validates that the Web.config file section being replaced has the same number of elements as the replacement section.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;VirtualDirectoryAlias&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies the alias for the virtual directory that is created for the precompiled build output.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;VirtualDirectoryServer&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies the server on which to create the virtual directory. The default is 1.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;ReplaceExistingVirtualDirectory&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Replaces the existing virtual directory. If false, the build will fail if the path of the existing virtual directory in the IIS metabase does not match the path of the precompiled Web site.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following table lists the MSBuild items included in Web Deployment projects.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Items&lt;br /&gt;&lt;br /&gt;Description&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;ExcludeFromBuild&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Files to exclude from a build.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;WebConfigReplacementFiles&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sections to replace in the Web.config file.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AssemblyAttributes&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Assembly attributes to apply to merged assemblies.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;PrecompiledOutput&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All output files from the AspNetCompiler or AspNetMerge targets.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The following table lists the MSBuild targets included in Web Deployment projects.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Targets&lt;br /&gt;&lt;br /&gt;Description&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Clean&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Executes when performing a complete build.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Rebuild&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Executes when rebuilding.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AspNetCompiler&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Invokes the &lt;strong&gt;AspNetCompiler&lt;/strong&gt; task.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AspNetMerge&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Invokes the &lt;strong&gt;AspNetMerge&lt;/strong&gt; task.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;ReplaceWebConfigSections&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Invokes the &lt;strong&gt;ReplaceConfigSections&lt;/strong&gt; task.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;CreateVirtualDirectory&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Invokes the &lt;strong&gt;CreateVirtualDirectory&lt;/strong&gt; task.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;BuiltProjectOutputGroup&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Populates the project output group.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;GenerateAssemblyInfo&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Invokes the &lt;strong&gt;GenerateAssemblyInfo&lt;/strong&gt; task.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;BeforeBuild&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies an override for the &lt;strong&gt;BeforeBuild&lt;/strong&gt; target.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;BeforeMerge&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies an override for the &lt;strong&gt;BeforeMerge&lt;/strong&gt; target.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AfterMerge&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies an override for the &lt;strong&gt;AfterMerge&lt;/strong&gt; target.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;AfterBuild&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Specifies an override for the &lt;strong&gt;AfterBuild&lt;/strong&gt; target.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-4275620171232804274?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/4275620171232804274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=4275620171232804274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/4275620171232804274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/4275620171232804274'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/06/web-deployment-projects-with-visual.html' title='Web Deployment Projects with Visual Studio 2008'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-862291350151794082</id><published>2009-06-17T13:11:00.001-05:00</published><updated>2009-06-17T13:11:57.276-05:00</updated><title type='text'>IIS ASP.NET Web Deployment Tool (MS Deploy)</title><content type='html'>&lt;p&gt;The Web Deployment Tool (MS Deploy) is a command-line tool that is used for migrating and synchronizing Web sites and Web servers. See the following links for more information about the Web Deployment Tool (also referred to as MS Deploy)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/dd569024%28WS.10%29.aspx"&gt;Introducing MS Deploy&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/dd569098%28WS.10%29.aspx"&gt;MS Deploy Core Tasks&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/dd568968%28WS.10%29.aspx"&gt;MS Deploy Reference&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=8100895"&gt;Web Deployment Tool Resources on IIS.NET&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Web Deployment Tool is a tool for simplifying the deployment, management and migration of Web applications, sites and even entire servers. Developers can package a Web site, automatically including content, configuration, certificates and databases. These packages can be directly deployed to a server or packaged and shared with others. IT Professionals can enable developers to deploy these packages to a server and delegate access to non-admins. IT Professionals can also use the tool in their infrastructure to synchronize servers easily on both IIS 6.0 and IIS 7.0, or even to accomplish a migration from IIS 6.0 to IIS 7.0. &lt;/p&gt;  &lt;p&gt;Here are just a few of the tasks that be accomplished using the tool:&lt;/p&gt;  &lt;p&gt;1. Create a package that contains content, configuration and databases for deployment or sharing with others. &lt;/p&gt;  &lt;p&gt;2. Use the package as a way to version your application or create backups. &lt;/p&gt;  &lt;p&gt;3. Add parameters to replace a connection string or other value in a file during install of a package.&lt;/p&gt;  &lt;p&gt;4. Enable non-administrators to deploy packages and granularly control their access. &lt;/p&gt;  &lt;p&gt;5. Synchronize or migrate both sites and servers running IIS 6.0 and IIS 7.0.&lt;/p&gt;  &lt;h4&gt;Where to Get the Tool&lt;/h4&gt;  &lt;p&gt;Download the x86 version: &lt;a href="http://go.microsoft.com/fwlink/?LinkId=109365"&gt;http://go.microsoft.com/fwlink/?LinkId=109365&lt;/a&gt;&lt;a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1602"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download the x64 version: &lt;a href="http://go.microsoft.com/fwlink/?LinkId=109366"&gt;http://go.microsoft.com/fwlink/?LinkId=109366&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Web Deployment Tool forum: &lt;a href="http://forums.iis.net/1144.aspx"&gt;http://forums.iis.net/1144.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Web Deployment Team blog: &lt;a href="http://blogs.iis.net/msdeploy/"&gt;http://blogs.iis.net/msdeploy/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download the Help file: &lt;a href="http://go.microsoft.com/?linkid=8100895"&gt;http://go.microsoft.com/?linkid=8100895&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Start Using the Tool&lt;/h4&gt;  &lt;p&gt;The following articles cover the functionality of the tool and how to use it for common tasks.&lt;/p&gt;  &lt;h5&gt;Learn the Basics &lt;/h5&gt;  &lt;p&gt;1. &lt;a href="http://learn.iis.net/page.aspx/426/overview-of-ms-deploy/"&gt;Web Deployment Tool Overview&lt;/a&gt; (overview of the features) &lt;/p&gt;  &lt;p&gt;2. &lt;a href="http://learn.iis.net/page.aspx/421/installing-ms-deploy/"&gt;Installing the Web Deployment Tool&lt;/a&gt; (installation and remote service options)&lt;/p&gt;  &lt;h5&gt;Package and Deploy Applications&lt;/h5&gt;  &lt;p&gt;1. &lt;a href="http://learn.iis.net/page.aspx/514/create-a-package/"&gt;Export a Package through IIS Manager&lt;/a&gt; (create an application package including content, databases and more) &lt;/p&gt;  &lt;p&gt;2. &lt;a href="http://learn.iis.net/page.aspx/515/install-a-package/"&gt;Import a Package through IIS Manager&lt;/a&gt; (install an application package to a local or remote machine)&lt;/p&gt;  &lt;p&gt;3. &lt;a href="http://learn.iis.net/page.aspx/516/configure-the-web-deployment-handler/"&gt;Configure the Web Deployment Handler&lt;/a&gt; (enable remote deployment to an IIS 7.x server)&lt;/p&gt;  &lt;h5&gt;Synchronize Web Servers&lt;/h5&gt;  &lt;p&gt;1. &lt;a href="http://learn.iis.net/page.aspx/427/migrating-from-iis-60-to-iis-70-using-ms-deploy/"&gt;Migrating from IIS 6.0 to IIS 7.0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. &lt;a href="http://learn.iis.net/page.aspx/446/syncing-between-two-iis-70-servers/"&gt;Syncing between two IIS 7.0 servers&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. &lt;a href="http://learn.iis.net/page.aspx/445/syncing-between-two-iis-60-servers/"&gt;Syncing between two IIS 6.0 servers&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Advanced Topics&lt;/h5&gt;  &lt;p&gt;1. &lt;a href="http://learn.iis.net/page.aspx/424/viewing-the-dependencies-for-a-web-site/"&gt;Viewing Dependencies of a Web site&lt;/a&gt; (how to use the output of getDependencies)&lt;/p&gt;  &lt;p&gt;2. &lt;a href="http://learn.iis.net/page.aspx/423/using-custom-manifests/"&gt;Using Custom Manifests&lt;/a&gt; (how to define your own web site)&lt;/p&gt;  &lt;p&gt;3. &lt;a href="http://learn.iis.net/page.aspx/425/troubleshooting-ms-deploy"&gt;Troubleshooting MS Deploy&lt;/a&gt; (how to enable verbose output)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-862291350151794082?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/862291350151794082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=862291350151794082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/862291350151794082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/862291350151794082'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/06/iis-aspnet-web-deployment-tool-ms.html' title='IIS ASP.NET Web Deployment Tool (MS Deploy)'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-8464298096009577973</id><published>2009-06-17T09:08:00.001-05:00</published><updated>2009-06-17T12:53:27.564-05:00</updated><title type='text'>Internet Information Server (IIS) versions</title><content type='html'>&lt;p&gt;What versions of IIS are you running? How do you determine What version of IIS is installed on your server or desktop? You can look in IIS Manager to see what version of IIS you are using. Select the top node that is titled &lt;strong&gt;&lt;em&gt;Internet&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;Information Services&lt;/em&gt;&lt;/strong&gt; and look in the details, for Windows 2003 it should say II V6.0&lt;/p&gt; &lt;p&gt;Every Windows version has it's own IIS version:&lt;/p&gt;&lt;pre&gt;Windows Server 2000      5.0&lt;br /&gt;Windows XP Professional  5.1&lt;br /&gt;Windows Server 2003      6.0&lt;br /&gt;Windows Vista            7.0&lt;br /&gt;Windows Server 2008      7.0&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;It is recommended that folks upgrade to Microsoft Internet Information Services (IIS) version 7.0 running on Microsoft Windows Server 2008 because IIS 7.0 significantly increases Web infrastructure security&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Below is a list of all versions of IIS, and how they can be obtained.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version: 1.0&lt;/strong&gt; &lt;br&gt;Obtained from:Included with Windows NT 3.51 SP 3 (or as a self-contained download). Operating System:Windows NT Server 3.51&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version: 2.0 &lt;/strong&gt;&lt;br&gt;Obtained from:Included with Windows NT Server 4.0.&amp;nbsp; Operating System:Windows NT Server 4.0&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version:3.0 &lt;/strong&gt;&lt;br&gt;Obtained from:Included with Windows NT Server 4.0&lt;a href="http://www.microsoft.com/NTServer/nts/downloads/archive/NT4SvcPk3/default.asp"&gt; Service Pack 3&lt;/a&gt; (http://www.microsoft.com/NTServer/nts/downloads/archive/NT4SvcPk3/default.asp) (Internet Information Server 2.0 is automatically upgraded to Internet Information Server 3.0 during the install of SP3). Operating System:Windows NT Server 4.0&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version:4.0 &lt;br&gt;&lt;/strong&gt;Obtained from:Self-contained download from &lt;a href="http://www.microsoft.com/NTServer/nts/downloads/recommended/NT4OptPk/default.asp"&gt;www.microsoft.com&lt;/a&gt; (http://www.microsoft.com/NTServer/nts/downloads/recommended/NT4OptPk/default.asp) or the Windows NT Option Pack compact disc. Operating System:Windows NT Server 4.0 SP3 and Microsoft Internet Explorer 4.01&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version:5.0 &lt;br&gt;&lt;/strong&gt;Obtained from:Built-in component of Windows 2000. Operating System:Windows 2000&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version:5.1 &lt;/strong&gt;&lt;br&gt;Obtained from:Built-in component of Windows XP Professional. &lt;br&gt;Operating System:Windows XP Professional&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version: 6.0 &lt;br&gt;&lt;/strong&gt;Obtained from:Built-in component of Windows Server 2003. &lt;br&gt;Operating System:WIndows Server 2003&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;IIS Version:7.0 &lt;/strong&gt;&lt;br&gt;Obtained from:Built-in component of Windows Vista and Windows Server 2008. Operating System:Windows Vista and WIndows Server 2008&amp;nbsp; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;u&gt;How do I determine which version of IIS / ASP I'm running?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;If you are running Windows Server 2003, you are running IIS 6.0 / ASP 3.0 (though some people like to call this ASP 4.0). &lt;br /&gt;&lt;li&gt;If you are running Windows XP, you are running IIS 5.1 / ASP 3.0. &lt;br /&gt;&lt;li&gt;If you are running Windows 2000, you are running IIS 5.0 / ASP 3.0. &lt;br /&gt;&lt;li&gt;If you are running Windows NT 4.0 or Windows 9x, you can determine which version of IIS / PWS you are running by one of the following methods:&amp;nbsp; &lt;p&gt;&amp;lt;%&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.write(Request.ServerVariables("SERVER_SOFTWARE"))&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' returns "Microsoft-IIS/4.0" for IIS 4.0 + ASP 2.0&amp;nbsp; &lt;br&gt;%&amp;gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;OR &lt;/p&gt;&lt;br /&gt;&lt;ul&gt;Look for Windows NT 4.0 Option Pack in Add/Remove Programs (Control Panel). If it is there, you are running IIS 4.0 (NT Server) or PWS 4.0 (NT Workstation or Win9x).&lt;/ul&gt;&lt;br&gt;OR&amp;nbsp; &lt;ol&gt;&lt;br /&gt;&lt;li&gt;Do a search for ASP.DLL on your system &lt;br /&gt;&lt;li&gt;right-click it and select Properties &lt;br /&gt;&lt;li&gt;Check the version tab:&amp;nbsp; &lt;ul&gt;IIS 3.0 shows 1.x&amp;nbsp; &lt;br&gt;IIS 4.0 shows 2.x&amp;nbsp; &lt;br&gt;IIS 5.0 shows 5.0.2195.x&amp;nbsp; &lt;br&gt;IIS 5.1 shows 5.1.2600.x&amp;nbsp; &lt;br&gt;IIS 6.0 shows 6.0.3790.x&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-8464298096009577973?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/8464298096009577973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=8464298096009577973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/8464298096009577973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/8464298096009577973'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/06/internet-information-server-iis.html' title='Internet Information Server (IIS) versions'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-7212520201666414134</id><published>2009-06-16T14:24:00.003-05:00</published><updated>2009-06-16T14:24:56.827-05:00</updated><title type='text'>Using ASP.NET 3.5 with Visual Studio 2008</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Web development couldn’t have got better with ASP.NET and VS 2008. Ajax is in the runtime, new controls, LINQ and CSS and JavaScript support. Below are all the new things that make the VS + ASP combination pretty cool.&lt;/p&gt;  &lt;h4&gt;New Features in ASP.NET 3.5&lt;/h4&gt;  &lt;h4&gt;ASP.NET AJAX&lt;/h4&gt;  &lt;p&gt;With ASP.NET AJAX, developers can quickly create pages with sophisticated, responsive user interfaces and more efficient client-server communication by simply adding a few server controls to their pages. Previously an extension to the ASP.NET runtime, ASP.NET AJAX is now built into the platform and makes the complicated task of building cross-platform, standards based AJAX applications easy. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;More Information&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-224.aspx"&gt;Watch the ASP.NET AJAX Support in VS2008 Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-229.aspx"&gt;Watch the Adding AJAX Functionality to an Existing ASP.NET Page Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-231.aspx"&gt;Watch the Creating and Using an AJAX-enabled Web Service in a Web Site Video &lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://ajax.asp.net/"&gt;The ASP.NET AJAX Site&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb398874%28VS.90%29.aspx"&gt;ASP.NET AJAX Overview&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;New ListView and DataPager Controls&lt;/h4&gt;  &lt;p&gt;The new ListView control gives you unprecedented flexibility in how you display your data, by allowing you to have complete control over the HTML markup generated. ListView‘s template approach to representing data is designed to easily work with CSS styles, which comes in handy with the new Visual Studio 2008 designer view. In addition, you can use the DataPager control to handle all the work of allowing your users to page through large numbers of records. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;More Information&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-225.aspx"&gt;Watch the ListView Control Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-221.aspx"&gt;Watch the DataPage Control Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui.aspx"&gt;Using the ASP.NET 3.5 ListView Control&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb398790%28VS.90%29.aspx"&gt;ListView Web Server Control&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;LINQ and other .NET Framework 3.5 Improvements&lt;/h4&gt;  &lt;p&gt;With the addition of Language Integrated Query (LINQ) in .NET Framework 3.5, the process of building SQL queries using error-prone string manipulation is a thing of the past. LINQ makes your relational data queries a first-class language construct in C# and Visual Basic, complete with compiler and Intellisense support. For Web applications, the ASP.NET LinqDataSource control allows you to easily use LINQ to filter, order and group data that can then be bound to any of the data visualization controls like the ListView and GridView controls. In addition, all the other improvements to .NET Framework 3.5, including the new HashSet collection, DateTime offset support, diagnostics, garbage collection, better thread lock support, and more, are all available to you in your ASP.NET applications. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;More Information&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.asp.net/learn/linq-videos/"&gt;Watch the LINQ How Do I Video Series&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx"&gt;Part 1: Introduction to LINQ and SQL&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/05/29/linq-to-sql-part-2-defining-our-data-model-classes.aspx"&gt;Part 2: Defining our Data Model Classes&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.asp"&gt;Part 3: Querying our Database&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx"&gt;Part 4: Updating our Database&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/16/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx"&gt;Part 5: Binding UI using the ASP:LinqDataSource Control&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx"&gt;Part 6: Retrieving Data Using Stored Procedures&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/08/23/linq-to-sql-part-7-updating-our-database-using-stored-procedures.aspx"&gt;Part 7: Updating our Database using Stored Procedures&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx"&gt;Part 8: Executing Custom SQL Expressions&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx"&gt;Part 9: Using a Custom LINQ Expression with the &amp;lt;asp:LinqDataSource&amp;gt; control&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb547113%28VS.90%29.aspx"&gt;LinqDataSource Technology Overview&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;WCF Support for RSS, JSON, POX and Partial Trust&lt;/h4&gt;  &lt;p&gt;With .NET Framework 3.5, Windows Communication Foundation (WCF) now supports building Web services that can be exposed using any number of the Internet standard protocols, such as SOAP, RSS, JSON, POX and more. Whether you are building an AJAX application that uses JSON, providing syndication of your data via RSS, or building a standard SOAP Web service, WCF makes it easy to create your endpoints, and now, with .NET Framework 3.5, supports building Web services in partial-trust situations like a typical shared-hosting environment. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;More Information&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/t745kdsh%28VS.90%29.aspx"&gt;Using ASP.NET Web Services Roadmap&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;New Web Features in Visual Studio 2008&lt;/h4&gt;  &lt;h4&gt;New Web Design Interface&lt;/h4&gt;  &lt;p&gt;Visual Studio 2008 has incorporated a new Web designer that uses the design engine from Expression Web. Moving between design and source view is faster than ever and the new split view capability means you can edit the HTML source and simultaneously see the results on the page. Support for style sheets in separate files has been added as well as a CSS properties pane which clarifies the sometimes-complex hierarchy of cascading styles, so that it is easy to understand why an element looks the way it does. In addition Visual Studio 2008 has full WYSIWYG support for building and using ASP.NET Nested Master Pages which greatly improves the ability to build a Web site with a consistent look and feel. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;More Information&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-220.aspx"&gt;Watch the New Designer Support in VS2008 Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-228.aspx"&gt;Watch the Quick Tour of the VS2008 IDE Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-226.aspx"&gt;Watch the VS2008 and Nested Masterpages Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-230.aspx"&gt;Watch the Creating and Modifying a CSS File Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/25/vs-2008-web-designer-and-css-support.aspx"&gt;VS 2008 Web Designer and CSS Support&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/09/vs-2008-nested-master-page-support.aspx"&gt;VS 2008 Nested Master Page Support&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb398931%28VS.90%29.aspx"&gt;Working with CSS Overview&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;JavaScript Debugging and Intellisense&lt;/h4&gt;  &lt;p&gt;In Visual Studio 2008, client-side JavaScript has now become a first-class citizen in regards to its debugging and Intellisense support. Not only does the Intellisense give standard JavaScript keyword support, but it will automatically infer variable types and provide method, property and event support from any number of included script files. Similarly, the JavaScript debugging support now allows for the deep Watch and Locals support in JavaScript that you are accustomed to having in other languages in Visual Studio. And despite the dynamic nature of a lot of JavaScript, you will always be able to visualize and step into the JavaScript code, no matter where it is generated from. This is especially convenient when building ASP.NET AJAX applications. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;More Information&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-223.aspx"&gt;Watch the JavaScript Intellisense Support in VS2008 Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-219.aspx"&gt;Watch the JavaScript Debugging in VS2008 Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-227.aspx"&gt;Watch the IntelliSense for JScript and ASP.NET AJAX Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/19/vs-2008-javascript-debugging.aspx"&gt;Visual Studio 2008 JavaScript Debugging&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/06/21/vs-2008-javascript-intellisense.aspx"&gt;Visual Studio 2008 JavaScript Intellisense&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Multi-targeting Support&lt;/h4&gt;  &lt;p&gt;In previous versions of Visual Studio, you could only build projects that targeted a single version of the .NET Framework. With Visual Studio 2008, we have introduced the concept of Multi-targeting. Through a simple drop-down, you can decide if you want a project to target .NET Framework 2.0, 3.0 or 3.5. The builds, the Intellisense, the toolbox, etc. will all adjust to the feature set of the specific version of the .NET Framework which you choose. This allows you to take advantage of the new features in Visual Studio 2008, like the Web design interface, and the improved JavaScript support, and still build your projects for their current runtime version. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;More Information&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-videos/video-222.aspx"&gt;Watch the Multi-Targeting Support in VS2008 Video&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/06/20/vs-2008-multi-targeting-support.aspx"&gt;Visual Studio 2008 Multi-Targeting Support&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb398197%28VS.90%29.aspx"&gt;.NET Framework Multi-targeting Overview&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;ASP.NET 3.5 and Visual Studio 2008&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.asp.net/Downloads/vs2008/#newFeatures"&gt;New Features in ASP.NET 3.5&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/Downloads/vs2008/#newWebFeatures"&gt;New Web Features in Visual Studio 2008&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.asp.net/Downloads/vs2008/#otherResources"&gt;Other Resources&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;ASP.NET 3.5 and Visual Studio 2008 bring great new functionality around Web development and design that makes building standards based, next generation Web sites easier than ever. From the inclusion of ASP.NET AJAX into the runtime, to new controls, the new LINQ data capabilities, to improved support for CSS, JavaScript and others, Web development has taken a significant step forward. &lt;/p&gt;  &lt;h4&gt;Other Resources&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/s57a598e%28VS.90%29.aspx"&gt;What‘s New in ASP.NET and Web Development&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa700830.aspx"&gt;Learn More about Visual Studio 2008&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Forums&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://forums.asp.net/Default.aspx?GroupID=34"&gt;ASP.NET AJAX Forums&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://forums.asp.net/1112.aspx"&gt;Visual Studio 2008 Forum&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://forums.asp.net/1125.aspx"&gt;Visual Web Developer 2008 Express Forum&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-7212520201666414134?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/7212520201666414134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=7212520201666414134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/7212520201666414134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/7212520201666414134'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/06/using-aspnet-35-with-visual-studio-2008.html' title='Using ASP.NET 3.5 with Visual Studio 2008'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-6483645064158462698</id><published>2009-06-09T15:47:00.000-05:00</published><updated>2009-07-14T16:25:11.125-05:00</updated><title type='text'>NUnit Quick Tutorial</title><content type='html'>&lt;p&gt;&lt;a title="Kent Beck on the Future of Unit Testing" href="http://www.flickr.com/photos/99579433@N00/375949820/"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" border="0" alt="Kent Beck on the Future of Unit Testing" align="right" src="http://static.flickr.com/137/375949820_d397000c61.jpg" width="228" height="172" /&gt;&lt;/a&gt;Unit testing is not only good practice but essential to developing great software. My favorite Unit testing framework is &lt;a href="http://en.wikipedia.org/wiki/Nunit" target="_blank"&gt;NUnit&lt;/a&gt;. I have used unit testing frameworks and love Test driven development too. Below is a short introduction to Unit Testing, TDD and some related links.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unit Tests&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A unit test is the smallest testable part of an application. Ideally, each &lt;a href="http://en.wikipedia.org/wiki/Test_case"&gt;test case&lt;/a&gt; is independent from the others: substitutes like &lt;a href="http://en.wikipedia.org/wiki/Method_stub"&gt;method stubs&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Mock_object"&gt;mock objects&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Mock_object#Mocks_and_fakes"&gt;fakes&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Test_harness"&gt;test harnesses&lt;/a&gt; can be used to assist testing a module in isolation. Unit tests are typically written and run by &lt;a href="http://en.wikipedia.org/wiki/Software_developer"&gt;software developers&lt;/a&gt; to ensure that code meets its design and behaves as intended. Its implementation can vary from being very manual (pencil and paper) to being formalized as part of &lt;a href="http://en.wikipedia.org/wiki/Build_automation"&gt;build automation&lt;/a&gt;. Unit testing allows the programmer to &lt;a href="http://en.wikipedia.org/wiki/Refactoring"&gt;refactor&lt;/a&gt; code at a later date, and make sure the module still works correctly (i.e. &lt;a href="http://en.wikipedia.org/wiki/Regression_testing"&gt;regression testing&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NUnit Basics&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" title="NUnit.org" alt="NUnit.org" align="right" src="http://www.nunit.org/img/logo.gif" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;NUnit is a unit-testing framework for all .Net languages. Initially ported from &lt;/em&gt;&lt;a href="http://www.junit.org"&gt;&lt;em&gt;JUnit&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, the current production release, version 2.5, is the sixth major release of this xUnit based unit testing tool for Microsoft .NET. It is written entirely in C# and has been completely redesigned to take advantage of many .NET language features, for example custom attributes and other reflection related capabilities. NUnit brings xUnit to all .NET languages.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;To get started using NUnit, read the &lt;a href="http://www.nunit.org/index.php?p=quickStart&amp;amp;r=2.5"&gt;Quick Start&lt;/a&gt; page. This article demonstrates the development process with NUnit in the context of a C# banking application. Check the&lt;a href="http://www.nunit.org/index.php?p=samples&amp;amp;r=2.5"&gt;Samples&lt;/a&gt; page for additional examples, including some in VB.Net, J# and managed C++.&lt;/p&gt;  &lt;h5&gt;Which Test Runner to use?&lt;/h5&gt;  &lt;p&gt;NUnit has two different ways to run your tests. The &lt;a href="http://www.nunit.org/index.php?p=nunit-console&amp;amp;r=2.5"&gt;console runner&lt;/a&gt;, nunit-console.exe, is the fastest to launch, but is not interactive. The &lt;a href="http://www.nunit.org/index.php?p=nunit-gui&amp;amp;r=2.5"&gt;gui runner&lt;/a&gt;, nunit-gui.exe, is a Windows Forms application that allows you to work selectively with your tests and provides graphical feedback.&lt;/p&gt;  &lt;p&gt;The key concepts and ideas behind NUnit can be learned by visiting the below links from the documentation.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=docHome&amp;amp;r=2.5"&gt;NUNIT 2.5&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=getStarted&amp;amp;r=2.5"&gt;GETTING STARTED&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=assertions&amp;amp;r=2.5"&gt;ASSERTIONS&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=constraintModel&amp;amp;r=2.5"&gt;CONSTRAINTS&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=attributes&amp;amp;r=2.5"&gt;ATTRIBUTES&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=nunit-console&amp;amp;r=2.5"&gt;CONSOLE RUNNER&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=nunit-gui&amp;amp;r=2.5"&gt;GUI RUNNER&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=configFiles&amp;amp;r=2.5"&gt;CONFIGURATION FILES&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=pnunit&amp;amp;r=2.5"&gt;PNUNIT&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=multiAssembly&amp;amp;r=2.5"&gt;MULTIPLE ASSEMBLIES&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=vsSupport&amp;amp;r=2.5"&gt;VISUAL STUDIO SUPPORT&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=extensibility&amp;amp;r=2.5"&gt;EXTENSIBILITY&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=releaseNotes&amp;amp;r=2.5"&gt;RELEASE NOTES&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=samples&amp;amp;r=2.5"&gt;SAMPLES&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.nunit.org/index.php?p=license&amp;amp;r=2.5"&gt;LICENSE&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;TDD&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=tdd&amp;amp;aq=f&amp;amp;oq=&amp;amp;aqi=g6g:s1g3" target="_blank"&gt;TDD&lt;/a&gt; or Test Driven Development is the practice of writing unit tests for your code before you actually write that code. By writing a test and then writing the code to make that test pass you have a much better idea of what the goal and purpose of your code is. Test Driven Development not only increases the quality of your code, but also allows you to refactor the internals of a method or class and quickly and easily test the outside interface of the object.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Test-driven development&lt;/b&gt; (TDD) is a &lt;a href="http://en.wikipedia.org/wiki/Software_development"&gt;software development&lt;/a&gt; technique that uses short development iterations based on pre-written &lt;a href="http://en.wikipedia.org/wiki/Test_case"&gt;test cases&lt;/a&gt; that define desired improvements or new functions. Each iteration produces code necessary to pass that iteration's tests. Finally, the programmer or team &lt;a href="http://en.wikipedia.org/wiki/Code_refactoring"&gt;refactors&lt;/a&gt; the code to accommodate changes. A key TDD concept is that preparing tests before coding facilitates rapid feedback changes. Note that test-driven development is a &lt;a href="http://en.wikipedia.org/wiki/Software_engineering"&gt;software design method&lt;/a&gt;, not merely a method of testing&lt;/p&gt;  &lt;p&gt;TestDriven.Net is a unit testing add-in for Visual Studio. It supports multiple unit testing frameworks including NUnit, MbUnit, xUnit and MSTest.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://www.testdriven.net/images/td_rocket2.gif" /&gt;TestDriven.Net makes it easy to run unit tests with a single click, anywhere in your Visual Studio solutions. It supports all versions of Microsoft Visual Studio and it integrates with the best .NET development tools.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Other Unit testing Frameworks&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;csUnit &lt;/strong&gt;&lt;a href="http://www.csunit.org/ "&gt;&lt;strong&gt;http://www.csunit.org/&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; csUnit is a unit testing framework for the Microsoft .NET Framework. It targets test driven development using C#, Visual Basic .NET, and managed C++.     &lt;br /&gt;&lt;strong&gt;Requirement :&lt;/strong&gt; csUnit has been tested using the Microsoft .NET framework 1.0 Service Pack 2 runtime on an Intel-compatible platform.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.csunit.org/tutorials/tutorial7/index.html"&gt;Unit Testing with C# Tutorial        &lt;br /&gt;&lt;/a&gt;&lt;/strong&gt;How do I make use of the Assert class? How do I implement simple test cases for my class? How do I integrate csUnit with my code? These are some of the questions, which are answered in this all new tutorial.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Nester &lt;/strong&gt;&lt;a href="http://nester.sourceforge.net/ "&gt;&lt;strong&gt;http://nester.sourceforge.net/&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Nester is a tool for mutation analysis of your source code in order to assess the adequacy of your tests. It involves modification of programs to see if existing tests can distinguish the original program from the modified program.     &lt;br /&gt;&lt;strong&gt;Requirement:&lt;/strong&gt; Win32; .NET Framework 1.1; NUnit 2.1.5&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NUnit &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://www.nunit.org/"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;a href="http://www.nunit.org/&amp;nbsp;"&gt;http://www.nunit.org/&lt;/a&gt;&lt;/a&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Description:&lt;/strong&gt; NUnit is a unit-testing framework for all .Net languages. Initially ported from JUnit, the current version, 2.0 is the second major release of this xUnit based unit testing tool for Microsoft .NET. It is written entirely in C# and has been completely redesigned to take advantage of many .NET language features, for example custom attributes and other reflection related capabilities. NUnit brings xUnit to all .NET languages.       &lt;br /&gt;&lt;strong&gt;Requirement:&lt;/strong&gt; Windows NT/2000&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NUnit Addin for Visual Studio.NET &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://sourceforge.net/projects/nunitaddin/ "&gt;http://sourceforge.net/projects/nunitaddin/ &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Point and Test NUnit integration for Visual Studio.NET. The aim of this project it to simplify testing and debugging using the NUnit framework inside of Visual Studio.NET.     &lt;br /&gt;&lt;strong&gt;Requirement:&lt;/strong&gt; Windows&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;NUnitAsp&amp;#160; &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://nunitasp.sourceforge.net/"&gt;http://nunitasp.sourceforge.net/ &lt;/a&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Description:&lt;/strong&gt; NUnitAsp is a tool for automatically testing ASP.NET web pages. It's an extension to NUnit, a tool for test-driven development in .NET.     &lt;br /&gt;&lt;strong&gt;Requirement:&lt;/strong&gt; Windows NT/2000     &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NUnitForms &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://nunitforms.sourceforge.net/ "&gt;http://nunitforms.sourceforge.net/ &lt;/a&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Description:&lt;/strong&gt; An NUnit extension for testing Windows Forms applications, making it easy to write unit tests for your Windows Forms classes.     &lt;br /&gt;&lt;strong&gt;Requirement:&lt;/strong&gt; Windows NT/2000     &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Zanebug &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://www.adapdev.com/zanebug/ "&gt;http://www.adapdev.com/zanebug/ &lt;/a&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Description:&lt;/strong&gt; Zanebug is an advanced unit testing application for .NET. It supports existing NUnit tests, performance metrics, multiple test iterations, in-depth error information, pass / fail stats, perfmon integration, result graphing, etc.     &lt;br /&gt;&lt;strong&gt;Requirement:&lt;/strong&gt; Windows&lt;/p&gt;  &lt;p&gt;Also read &lt;a href="http://scottwhite.blogspot.com/2008/05/nunit-best-practices.html" target="_blank"&gt;Scott White’s&lt;/a&gt;&amp;#160; &lt;a href="http://scottwhite.blogspot.com/2008/05/nunit-best-practices.html"&gt;NUnit Best Practices&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Programming is not just an art, not just a science, but a discipline.&amp;#160; Part of what we all know we should be doing includes solid unit testing.&amp;#160; Below is my list of best practices, feel free to comment and add others I enjoy feedback. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create a separate assembly for your test fixtures      &lt;ul&gt;       &lt;li&gt;i.e. don't be lazy and put your test fixtures in the same assembly as the application code)&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Create a bin folder per solution and place nunit.framework.dll in there &lt;/li&gt;    &lt;li&gt;Each project should copy their binaries to the solution bin folder.&amp;#160; Your Post-Build event should look like this: copy $(TargetFileName) &amp;quot;../../../bin/&amp;quot; &lt;/li&gt;    &lt;li&gt;Categorize your test fixtures such as DAO, ETL and BusinessRules.&amp;#160; This will let you test pieces of your application more easily: [Category(&amp;quot;ETL&amp;quot;)] &lt;/li&gt;    &lt;li&gt;Once you have the basic interface of a class written, it is time to write your unit test for it.&amp;#160; Even though it will fail it will at least serve as a place holder to go back to as well as serving as a test for when things are working &lt;/li&gt;    &lt;li&gt;Make sure each test is atomic.&amp;#160; Therefore if you are inserting data into a table and you know say CustomerName must be unique, then the second time you run your test it will fail because of uniqueness.&amp;#160; For this reason have your persistence tests be all inclusive, include an insert, update and delete.&amp;#160; Put your delete code into a finally so that it is always executed regardless of if the other tests succeed or not &lt;/li&gt;    &lt;li&gt;If you notice all of your test fixtures perform certain setup every time, create a base class for this, let's say each one of your DAO classes will be instantiating a connection and opening it before starting and this connection needs to be closed at the end of testing whether it fails or succeeds      &lt;ul&gt;       &lt;li&gt;Obviously we would never want to handle connection objects in our Unit Tests, this would be bad design, in the real world it may be a stream or nhibernate session that you&amp;#160; are configuring.&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;blockquote&gt;[TestFixture]     &lt;br /&gt;public class DAOBaseFixture      &lt;br /&gt;{      &lt;br /&gt;SqlConnection cn;      &lt;br /&gt;[SetUp]      &lt;br /&gt;public void Init()      &lt;br /&gt;{      &lt;br /&gt;&amp;#160; cn = new SqlConnection();      &lt;br /&gt;&amp;#160; cn.Open(&amp;quot;...&amp;quot;);      &lt;br /&gt;}      &lt;br /&gt;[TearDown]      &lt;br /&gt;public Cleanup()      &lt;br /&gt;{      &lt;br /&gt;&amp;#160; cn.Close();      &lt;br /&gt;}&lt;/blockquote&gt;    &lt;blockquote&gt;}&lt;/blockquote&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;blockquote&gt;Now derivatives of this class won't even have to implement the [TestFixture] attribute nor take care of their setup.&amp;#160; They will be free to just take care of their own tests.&lt;/blockquote&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;blockquote&gt;public class CustomerDAOTests : DAOBaseFixture&lt;/blockquote&gt;    &lt;blockquote&gt;{&lt;/blockquote&gt;    &lt;blockquote&gt;[Test]&lt;/blockquote&gt;    &lt;blockquote&gt;[Category(&amp;quot;DAO&amp;quot;)]&lt;/blockquote&gt;    &lt;blockquote&gt;public void FindAll()&lt;/blockquote&gt;    &lt;blockquote&gt;{...}&lt;/blockquote&gt;    &lt;blockquote&gt;}&lt;/blockquote&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-6483645064158462698?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/6483645064158462698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=6483645064158462698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/6483645064158462698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/6483645064158462698'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2009/06/nunit-quick-tutorial.html' title='NUnit Quick Tutorial'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-7263181569690246939</id><published>2008-09-19T01:39:00.001-05:00</published><updated>2008-09-19T01:39:57.908-05:00</updated><title type='text'>Moving from IIS 6.0 to IIS 7.0</title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;Web applications in IIS 7.0 can be configured to use either Classic mode or Integrated mode. Classic mode maintains backward compatibility with earlier versions of IIS by using an ISAPI extension to invoke the ASP.NET runtime. This option usually requires few or no modifications to existing applications.IIS 7.0 Integrated mode is a unified request-processing pipeline that combines the ASP.NET request pipeline with the IIS core request pipeline. The integrated pipeline provides improved performance, provides modularity for configuration and administration, and adds flexibility for extending IIS with managed-code modules. For example, you can define a managed-code module in the App_Code folder of the Web application and register it to apply to all IIS requests, which includes requests for static files.Using IIS 7.0 Integrated mode might require minor changes to an application’s Web.config file. Some additional changes might be needed if the application uses any custom modules that implement the IHttpModule interface.For an overview of the request processing pipeline in Integrated mode in IIS 7.0, see ASP.NET Application Life Cycle Overview for IIS 7.0. When you use IIS 7.0, you can run applications in Classic mode and Integrated mode side-by-side on the same server. Both Classic and Integrated mode support the .NET Framework version 2.0 and later releases. The .NET Framework version 1.1 is supported in Classic mode only. For more information about how to upgrade from earlier versions of IIS to IIS 7.0, see Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic mode.Note:You can use the information in this topic to move Web applications from IIS 5.x to IIS 7.0. However, additional changes might be necessary, which are not discussed here. For more information see .&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/bb515251.aspx&gt;&lt;B&gt;Moving&lt;/B&gt; an &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Application&lt;/B&gt; &lt;B&gt;from&lt;/B&gt; &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;6&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; to &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;This topic describes how to move a Web &lt;B&gt;application&lt;/B&gt; &lt;B&gt;from&lt;/B&gt; Internet Information Services (&lt;B&gt;IIS&lt;/B&gt;) &lt;B&gt;6&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; to &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt;. Web applications in &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; can be configured to use either Classic ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/bb515251.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/bb515251.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73891764049541&amp;setlang=en-US&amp;w=1c8180b5,21c08ffc"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/zwk103ab.aspx&gt;How to: Create and Configure Virtual Directories in &lt;B&gt;IIS&lt;/B&gt; 5.0 and &lt;B&gt;6&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;You can use &lt;B&gt;IIS&lt;/B&gt; Manager to create a virtual directory for an ... &lt;B&gt;Moving&lt;/B&gt; an &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Application&lt;/B&gt; &lt;B&gt;from&lt;/B&gt; &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;6&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; to &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; Running Web Applications on Windows Vista with &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; and ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/zwk103ab.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/zwk103ab.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73849766754501&amp;setlang=en-US&amp;w=6a0c9b67,b9c2daa8"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://mvolo.com/blogs/serverside/archive/2008/04/15/Creating-portable-ASP.NET-applications-that-work-on-IIS-6.0_2C00_-IIS-7.0-Classic_2C00_-and-IIS-7.0-Integrated-modes.aspx&gt;&lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; Server-Side : Creating portable &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; applications that work ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... &lt;B&gt;moving&lt;/B&gt; the module and handler configuration from the &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;’s &lt;httpModules&gt; and &lt;httpHandlers&gt; sections to the &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; ... &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;application&lt;/B&gt; running on &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;6&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt;, or running in Classic mode on &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt;&lt;BR&gt;&lt;A HREF="http://mvolo.com/blogs/serverside/archive/2008/04/15/Creating-portable-ASP.NET-applications-that-work-on-IIS-6.0_2C00_-IIS-7.0-Classic_2C00_-and-IIS-7.0-Integrated-modes.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://mvolo.com/blogs/serverside/archive/2008/04/15/Creating-portable-ASP.NET-applications-that-work-on-IIS-6.0_2C00_-IIS-7.0-Classic_2C00_-and-IIS-7.0-Integrated-modes.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73884807266980&amp;setlang=en-US&amp;w=6bb2a8be,f5bdda91"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.discountasp.net/sp_iis7hosting.aspx&gt;IIS7 Hosting, &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; Hosting, &lt;B&gt;IIS&lt;/B&gt; 7 Hosting, Internet Information ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Team "I will be &lt;B&gt;moving&lt;/B&gt; ... &lt;B&gt;6&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; may or may not migrate as is to &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; ... &lt;B&gt;application&lt;/B&gt; configuration can now be stored in web.config with &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; configuration, and be deployed with content. &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://www.discountasp.net/sp_iis7hosting.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.discountasp.net/sp_iis7hosting.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73885491528646&amp;setlang=en-US&amp;w=655f0385,ac09717a"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://technet.microsoft.com/en-us/magazine/cc745952.aspx&gt;&lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt;: Top 10 Performance Improvements in &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... &lt;B&gt;Moving&lt;/B&gt; PHP and other &lt;B&gt;application&lt;/B&gt; frameworks to &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; and FastCGI will allow you to take advantage of various &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt; features, including the &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; ... &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;, PHP, and any other &lt;B&gt;IIS&lt;/B&gt; &lt;B&gt;7&lt;/B&gt;.&lt;B&gt;0&lt;/B&gt;-compatible &lt;B&gt;application&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://technet.microsoft.com/en-us/magazine/cc745952.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://technet.microsoft.com/en-us/magazine/cc745952.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73926044354083&amp;setlang=en-US&amp;w=f1f4f5b0,b02a6c10"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Web.config Files in IIS 7.0When you move an ASP.NET Web application to IIS 7.0 Integrated mode, you must update the Web.config file. IIS 7.0 includes changes in how you can administer Web.config files and in the types of settings that can be stored in the Web.config files. The new settings are in a new configuration section named system.webServer.In IIS 6.0, the ASP.NET MMC snap-in provides IIS-related administration features for configuring ASP.NET. For more information, see Walkthrough: Configuring ASP.NET Applications in IIS 6.0 using MMC.In IIS 7.0, the administration of ASP.NET applications is integrated more closely with IIS administration, and there is no separate snap-in. Instead, all IIS and ASP.NET configuration is done by using IIS Manager. Because IIS 7.0 configuration information is based on the .NET Framework configuration system, the Web.config file for an application that runs in IIS 7.0 contains both Web server and ASP.NET configuration settings. For example, in a Web.config file for an ASP.NET application running in IIS 7.0, you can specify the default file to return when a browser does not request a specific file. (In IIS 6.0 and earlier versions of IIS, this was a setting that was maintained in the IIS metabase.)Editing Web.config FilesYou can change the Web.config file for a Web application that is running in IIS 7.0 in the following ways:Editing the Web.config file directly, either by using Visual Studio or Visual Web Developer, or by using a text editor program.Using IIS Manager. For more information, see Internet Information Services (IIS) Manager.Using the ASP.NET Web Site Administration Tool. For more information, see ASP.NET Web Site Administration Tool.Note:Changes made in the Web Site Administration Tool do not affect child configuration elements in the system.webServer element.Using the IIS 7.0 command-line tool (Appcmd.exe). This utility enables you to specify IIS configuration settings and Web application configuration settings at the command line. For more information, see IIS 7.0 Command-Line Tool.The system.webServer SectionThe system.webServer configuration section in the Web.config file specifies IIS 7.0 settings that are applied to the Web application. The system.WebServer section is a child of the configuration element. For more information, see IIS 7.0: system.webServer Section Group (IIS Settings Schema).Examples of Web server settings that you can set in the system.WebServer configuration group include the following:The default document that the Web server returns to a client when request does not include a specific resource (defaultDocument element).The compression settings for responses (httpCompression element).Custom headers (customHeaders element of the httpProtocol section).Modules (modules element).Handlers (handlers element).Some settings apply only to IIS 7.0 Integrated mode and do not apply to Classic mode. For example, if the application is running in Classic mode, any managed-code modules and handlers specified in the system.WebServer section of the Web.config file are ignored. Instead, the managed-code modules and handlers must be defined as in earlier versions of IIS, by using the httpModules and httpHandlers elements of the system.web section.For examples of using the system.webServer configuration section, see How to: Configure the &lt;system.webServer&gt; Section for IIS 7.0. Moving a Web Application to Classic ModeTypically, moving a Web application from IIS 6.0 to IIS 7.0 Classic mode requires only that you put the application in an application pool that is running in Classic mode. For example, when you install IIS 7.0 with , by default the Web server is configured to operate in Integrated mode. It is also configured to run under the default application pool, which is called DefaultAppPool. To run a Web application in Classic mode, use the Classic.NETAppPool application or create a new application pool that is configured to run in Classic mode. For information about how to create an application pool, see Create an Application Pool.Any custom modules that implement the IHttpModule interface in an application that runs in Classic mode are notified only about pipeline requests that are handled by the ASP.NET runtime. For example, they are notified about requests for an .aspx page. The application life cycle for Classic mode is the same as the life cycle for ASP.NET in IIS 6.0. For more information, see ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0.If an application that runs in Classic mode contains a handler that requires a script map to handle a custom extension in IIS, you must register the handler in both the httpHandler group and the handler group. You map the custom file-name extension to the ASP.NET ISAPI extension (Aspnet_isapi.dll) by specifying the modules and scriptProcessor attributes in the handler element. These attributes specify that the module that defines the handler is an ISAPI extension, and they specify the path of that extension. This is how IIS 7.0 in Classic mode provides backward compatibility with earlier versions of IIS. However, if you run the application in Integrated mode, you must remove the modules and scriptProcessor attributes. For more information, see How to: Configure an HTTP Handler Extension in IIS.When you move a Web application from IIS 6.0 to Classic mode, it is not guaranteed to work in Integrated mode without changes. If you switch an application from Classic mode to Integrated mode (and change any custom modules and handlers), you might have to make additional changes for the application to run correctly in Integrated mode. The next section in this topic explains how to move an application to IIS 7.0 Integrated mode. Moving a Web Application to Integrated ModeWeb applications that do not include custom modules or handlers will usually work without changes in Integrated mode in IIS 7.0. Web applications that rely on custom modules or handlers require the following steps to enable the application to run in Integrated mode:Register custom modules and handlers in the system.webServer section of the Web.config file by using one of the methods described in the Migrating a Web Config File to Integrated Mode section later in this topic.Define event handlers for HttpApplication request pipeline events like BeginRequest and EndRequest only in the Init method of the custom module.Make sure that you have addressed any issues discussed in the "Known Differences Between Integrated Mode and Classic Mode" section of Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic mode.Modules that implement the IHttpModule interface are referred to as managed-code modules because they are built by using the .NET Framework. Managed-code modules can be registered at the server level or at the application level. Native-code modules are DLLs (non-managed code) that are registered only at the server level. Core ASP.NET features, such as session state and forms authentication, are implemented as managed modules in Integrated mode.When you move an application from Classic to Integrated mode, you can leave custom modules and handler registrations for Classic mode, or you can remove them. If you do not remove the httpModules and httpHandlers registrations that are used in Classic mode, you must set the validation element’s validateIntegratedModeConfiguration attribute to false to avoid errors. The validation element is a child element of the system.webServer element. For more information, see the section “Disabling the migration message” in ASP.NET Integration with IIS 7.0.Migrating a Web.config File for Use in Integrated ModeIf a module or handler is defined at the application level, the module or handler is not automatically invoked. This includes modules or handlers that are defined in an assembly in the Bin folder or as source code in the App_Code folder, and that are not registered defined in the system.webServer section of the Web.config file. In order for the module or handler to participate in the Integrated mode request pipeline, you must register the module or handler by using one of the following methods:Edit the Web.config directly and add the modules or handlers element to the system.webServer element. Note the difference from Classic mode in the element name—modules compared to httpModules and handlers compared to httpHandlers.Use IIS Manager to configure the module or handler. For more information, see Configuring Handler Mappings in IIS 7.0 and Configuring Modules in IIS 7.0.Use the IIS 7.0 command-line tool (Appcmd.exe). For more information, see Configure Settings for a Site, Application, Virtual Directory or URL by Using Appcmd.exe.Classes and Properties for Working with Integrated ModeWhen you work with an application in IIS 7.0 Integrated mode and the .NET Framework version 3.0 or later, you can use the following classes and members that are not available in Classic mode:The SubStatusCode() property of the HttpResponse object, which lets you set codes that are useful when failed request tracing is configured. For more information, see Troubleshooting Failed Requests Using Failed Request Tracing in IIS 7.0.The Headers() property of the HttpResponse object, which provides access to response headers.The IsPostNotification() and CurrentNotification() properties of the HttpContext object, which are used when you provide handlers for HttpApplication events.The Headers and ServerVariables properties of the HttpRequest object, which are write-enabled.&lt;BR&gt;&lt;hr&gt;&lt;br /&gt;&lt;b&gt;Videos from YouTube  &lt;/b&gt; &lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.NET 2.0 Nested GridView&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Screencast,Simple,Gridview,2.0,Example,Howto,Nested,Sample,ASP.NET,&lt;div id="videoQc53ZekBryE"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/22/2007 10:55:45 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; Data Access in the ASP.NET 2.0 Framework&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; 2.0,Walther,Data,Framework,Stephen,Howto,the,Access,Windows,Programming,in,ASP.NET,&lt;div id="videoAAHWfZG4Yj4"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 10/25/2007 7:32:57 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.Net (VB.Net) Session Variable ArrayList - Shalvin&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Tech,VB.Net,Shalvin,.Net,Session,ArrayList,Microsoft,Variable,&lt;div id="videoFlYlPCfMuas"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/2/2008 10:58:58 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; asp asp.net programacion tutorial master pages c#&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; c#,video,pages,asp.net,Film,master,tutorial,asp,programacion,&lt;div id="videoNR1Z_ubzBUc"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 11/3/2006 8:19:39 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; AJAX Y ASP.NET&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Howto,AJAX,ASP.NET,&lt;div id="videoWr1lSKDGX6Q"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 5/26/2007 2:39:34 PM&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-7263181569690246939?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/7263181569690246939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=7263181569690246939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/7263181569690246939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/7263181569690246939'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2008/09/moving-from-iis-60-to-iis-70.html' title='Moving from IIS 6.0 to IIS 7.0'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-1084975977796489998</id><published>2008-09-19T01:30:00.001-05:00</published><updated>2008-09-19T01:30:47.963-05:00</updated><title type='text'>ASP.NET Configuration</title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;Using the features of the ASP.NET configuration system, you can configure all of the ASP.NET applications on an entire server, a single ASP.NET application, or individual pages or application subdirectories. You can configure features, such as authentication modes, page caching, compiler options, custom errors, debug and trace options, and much more.The following sections describe the features of the ASP.NET configuration system.For information about configuring .NET Framework client applications, see Configuring Applications.Note:The features of the ASP.NET configuration system only apply to ASP.NET resources. For example, Forms Authentication only restricts access to ASP.NET files, not to static files or ASP (classic) files unless those resources are mapped to ASP.NET file name extensions. Use the configuration features of Internet Information Services (IIS) to configure non-ASP.NET resources. For information, see Working with the IIS Metabase and IIS Metabase Property Reference. Configuration FilesASP.NET configuration data is stored in XML text files that are each named Web.config. Web.config files can appear in multiple directories in ASP.NET applications. These files allow you to easily edit configuration data before, during, or after applications are deployed on the server. You can create and edit ASP.NET configuration files by using standard text editors, the ASP.NET MMC snap-in, the Web Site Administration Tool, or the ASP.NET configuration API.ASP.NET configuration files keep application configuration settings separate from application code. Keeping configuration data separate from code makes it easy for you to associate settings with applications, change settings as needed after deploying an application, and extend the configuration schema.For more information about how data is organized in ASP.NET configuration files, see ASP.NET Configuration Files. Available configuration settings are described in the ASP.NET Configuration Settings.Configuration File Hierarchy and InheritanceEach Web.config file applies configuration settings to the directory that it is in and to all of the child directories below it. Settings in child directories can optionally override or modify settings that are specified in parent directories. Configuration settings in a Web.config file can optionally be applied to individual files or subdirectories by specifying a path in a location element.The root of the ASP.NET configuration hierarchy is the systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\Web.config file, which includes settings that apply to all ASP.NET applications that run a specific version of the .NET Framework. Because each ASP.NET application inherits default configuration settings from the root Web.config file, you need to create Web.config files only for settings that override the default settings.Note:The root Web.config file inherits some basic configuration settings from the Machine.config file, which is located in the same directory. Some of these settings cannot be overridden in Web.config files. For more information, see ASP.NET Configuration File Hierarchy and Inheritance.At run time, ASP.NET uses the Web.config files to hierarchically compute a unique collection of configuration settings for each incoming URL request. These settings are calculated only once and then cached on the server. ASP.NET detects any changes to the configuration files and then automatically applies those changes to the affected applications, restarting the applications in most cases. Hierarchical configuration settings are automatically calculated and cached again whenever a configuration file in the hierarchy is changed. The IIS server does not have to be restarted for the changes to take effect unless the processModel section has been changed.For more information about how the ASP.NET configuration hierarchy works, see ASP.NET Configuration File Hierarchy and Inheritance and ASP.NET Configuration Scenarios.Directly Editing Configuration FilesYou can use a text editor or an XML editor to edit the configuration files directly. For proper syntax, see the reference topics in the configuration sections in ASP.NET Configuration Settings and General Configuration Settings (ASP.NET).&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/aa719558.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Configuration&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;The &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;configuration&lt;/B&gt; system features an extensible infrastructure that enables you to define &lt;B&gt;configuration&lt;/B&gt; settings at the time your &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; applications are first deployed so ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/aa719558.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/aa719558.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73878416395195&amp;setlang=en-US&amp;w=1f88e2d6,4f193f66"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/ssa0wsyf.aspx&gt;Web Site Administration Tool Security Tab &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Configuration&lt;/B&gt; ... Use the Security tab of the Web Site Administration Tool to manage rules for ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ssa0wsyf.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ssa0wsyf.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73886674081393&amp;setlang=en-US&amp;w=3b9a30fb,f8791d82"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://forums.asp.net/26.aspx&gt;&lt;B&gt;Configuration&lt;/B&gt; and Deployment - &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Forums &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Microsoft’s Joe Stagner recommends the following books on &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;configuration&lt;/B&gt; and deployment.&lt;BR&gt;&lt;A HREF="http://forums.asp.net/26.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://forums.asp.net/26.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73927497095798&amp;setlang=en-US&amp;w=4ff12393,bf484a49"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://wiki.asp.net/page.aspx/32/configuration/&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Wiki: &lt;B&gt;Configuration&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Microsoft portal site for the &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; development community. Download Visual Web Developer, post to the forums, read &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;net&lt;/B&gt; blogs and learn about &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;net&lt;/B&gt;.&lt;BR&gt;&lt;A HREF="http://wiki.asp.net/page.aspx/32/configuration/"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://wiki.asp.net/page.aspx/32/configuration/"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73916678737535&amp;setlang=en-US&amp;w=e39b64bd,68dacaf1"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://aspnet.4guysfromrolla.com/articles/021506-1.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;.4GuysFromRolla.com: Encrypting &lt;B&gt;Configuration&lt;/B&gt; Information in ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;This article, by Scott Mitchell, examines how to encrypt portions of the Web.config file in an &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0 application.&lt;BR&gt;&lt;A HREF="http://aspnet.4guysfromrolla.com/articles/021506-1.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://aspnet.4guysfromrolla.com/articles/021506-1.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73785296164221&amp;setlang=en-US&amp;w=34ee345,c370cd19"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://visualstudiomagazine.com/features/article.aspx?editorialsid=1290&gt;Create Master Pages in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;configuration&lt;/B&gt;&gt; &lt;system.web&gt; &lt;pages master= "~/MasterPages/BasicMasterPage.master" /&gt; &lt;/system.web&gt; &lt;/&lt;B&gt;configuration&lt;/B&gt;&gt; &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0 also allows you to nest master pages. For example, you might want to define the overall ... &lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/features/article.aspx?editorialsid=1290"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/features/article.aspx?editorialsid=1290"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;VisualStudio Magazine&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/16/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://visualstudiomagazine.com/features/article.aspx?editorialsid=1314&gt;Add Reports and Charts to Web Pages&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;The &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0 version of Visual Studio 2005's ReportViewer control and its Report Designer let Web page developers ... four basic steps: embed the ReportViewer server control; specify a report data source with the Table Adapter &lt;B&gt;Configuration&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/features/article.aspx?editorialsid=1314"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/features/article.aspx?editorialsid=1314"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;VisualStudio Magazine&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/12/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.windowsitpro.com/article/articleid/97204/Windows-IT-Pro-Innovators-Share-Their-Successes.html&gt;Windows IT Pro Innovators Share Their Successes&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Rowdy’s solution consists of a combination of ASP and &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;, plus several Microsoft utilities (adsutil.vbs, iisvdir ... The solution handles multiple site-&lt;B&gt;configuration&lt;/B&gt; options, including basic sites, FrontPage-extended sites, multimedia ... &lt;BR&gt;&lt;A HREF="http://www.windowsitpro.com/article/articleid/97204/Windows-IT-Pro-Innovators-Share-Their-Successes.html"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.windowsitpro.com/article/articleid/97204/Windows-IT-Pro-Innovators-Share-Their-Successes.html"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;WinInfo&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/8/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.securecomputing.net.au/Review/108652,ounce-labs-50.aspx&gt;on IT managers fear job loss after data breach&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... analysing source code and supports many different languages, including C/C++, Java/JSP,.NET (C#, VB.NET, &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;) Classic ... It is based on three primary views that reflect &lt;B&gt;configuration&lt;/B&gt;, triage and analysis respectively. The product performed very well ... &lt;BR&gt;&lt;A HREF="http://www.securecomputing.net.au/Review/108652,ounce-labs-50.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.securecomputing.net.au/Review/108652,ounce-labs-50.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Securecomputing.net.au&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/6/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://blogcritics.org/archives/2008/09/07/090551.php&gt;Windows XP SP3 Continues a Legacy of Failure&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Embedding Flash Games in Web Sites » Software Review – NetAdvantage For .NET Suite- NetAdvantage For &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2008 Volume ... remove it again, winds up hanging at the same spot. I reboot yet again, hit F8 to try to bring up "Last Known Good &lt;B&gt;Configuration&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://blogcritics.org/archives/2008/09/07/090551.php"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://blogcritics.org/archives/2008/09/07/090551.php"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Blogcritics.org&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/7/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Configuration ToolsThe ASP.NET configuration system provides tools that make application configuration easier than using a text editor because they include error detection.ASP.NET MMC Snap-inThe Microsoft Management Console (MMC) snap-in for ASP.NET provides a convenient way to manipulate ASP.NET configuration settings at all levels on a local or remote Web server. The ASP.NET MMC snap-in uses the ASP.NET configuration API, but it simplifies the process of editing configuration settings by providing a graphical user interface (GUI). In addition, the tool supports the ASP.NET configuration API features that control whether settings can be inherited by Web applications, and manage the dependencies between levels of the configuration hierarchy.Note:To use the ASP.NET MMC snap-in, you must log on to the computer with an account that has administrative privileges.The ASP.NET MMC snap-in appears as an ASP.NET tab on the property sheet of a virtual directory.For more information, see MMC Snap-In for ASP.NET.Web Site Administration ToolThe Web Site Administration Tool allows anyone with administrative privileges for the Web site to manage the configuration settings for that Web site. The Web Site Administration Tool is designed to provide a user-friendly, graphical editing tool for the configuration settings that are most commonly used in individual Web sites. Because the tool uses a browser-based interface, it allows you to change Web site settings remotely, which is useful for administering a site that is already deployed to a production Web server, such as a hosted Web site.The Web Site Administration Tool differs from the ASP.NET MMC snap-in in several ways. For instance, the ASP.NET MMC snap-in is ideal for administrator-level configuration because it provides access to the entire hierarchy of configuration files on the Web server instead of the configuration settings for a single Web site. Also, you must be an administrator to use the ASP.NET MMC snap-in, whereas the Web Site Administration Tool only allows individual Web site owners to configure the Web.config file in the root directory of sites to which they have administrative privileges. Finally, you cannot use the ASP.NET MMC snap-in to administer IIS remotely, but the browser interface for the Web Site Administration Tool allows remote configuration for versions of IIS beginning with IIS 6.0.The Web Site Administration Tool includes a tabbed interface that groups related configuration settings on the following tabs:A Security tab, which contains settings to help secure Web-application resources and to manage user accounts and roles.A Profile tab, which contains settings to manage how visitor information is gathered by the Web site.An Application tab, which contains settings to manage configuration elements that affect ASP.NET applications.A Provider tab, which contains settings to add, edit, delete, test, or assign application providers.The Web Site Administration Tool is automatically installed with the .NET Framework version 2.0 and later. For information about how the tool works, see ASP.NET Web Site Administration Tool.Command-line ToolsThe .NET Framework includes command-line tools that perform specific configuration operations. For example, the Aspnet_regiis.exe tool allows you to specify which version of the .NET Framework applies to your ASP.NET application. For more information, see .NET Framework Tools. ASP.NET Configuration APIThe ASP.NET configuration system provides a complete managed interface for programmatically configuring ASP.NET applications without directly editing the XML configuration files. In addition, the ASP.NET configuration API does the following:Simplifies administrative tasks by providing an integrated view of data from all levels of the configuration hierarchy.Supports deployment tasks, including creating configurations and configuring multiple computers with one script.Provides a single programming interface for developers who build ASP.NET applications, console applications and scripts, Web-based management tools, and MMC snap-ins.Prevents developers and administrators from making invalid configuration settings.Allows you to extend the configuration schema. You can define new configuration parameters and write configuration section handlers to process them.Provides static methods for obtaining configuration information from the application that is currently running, and non-static methods for obtaining configuration information from a separate application. Using static methods allows your application to run faster, but these methods can only be used from within the application about which you are obtaining configuration data.For more information, see ASP.NET Configuration API. Configuration SecurityThe ASP.NET configuration system helps protect configuration files from access by unauthorized users. ASP.NET configures IIS to deny access to any browser that requests access to the Machine.config or Web.config files. HTTP access error 403 (Forbidden) is returned to any browser that attempts to request a configuration file directly.Additionally, configuration files in one ASP.NET application are prevented from accessing configuration settings in other ASP.NET applications unless your configuration application is running in Full trust under an account that has permissions to read the configuration file in the other application.&lt;BR&gt;&lt;hr&gt;&lt;br /&gt;&lt;b&gt;Videos from YouTube  &lt;/b&gt; &lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.NET 2.0 Nested GridView&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Screencast,Simple,Gridview,2.0,Example,Howto,Nested,Sample,ASP.NET,&lt;div id="videoQc53ZekBryE"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/22/2007 10:55:45 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; Data Access in the ASP.NET 2.0 Framework&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; 2.0,Walther,Data,Framework,Stephen,Howto,the,Access,Windows,Programming,in,ASP.NET,&lt;div id="videoAAHWfZG4Yj4"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 10/25/2007 7:32:57 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.Net (VB.Net) Session Variable ArrayList - Shalvin&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Tech,VB.Net,Shalvin,.Net,Session,ArrayList,Microsoft,Variable,&lt;div id="videoFlYlPCfMuas"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/2/2008 10:58:58 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; asp asp.net programacion tutorial master pages c#&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; c#,video,pages,asp.net,Film,master,tutorial,asp,programacion,&lt;div id="videoNR1Z_ubzBUc"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 11/3/2006 8:19:39 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; AJAX Y ASP.NET&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Howto,AJAX,ASP.NET,&lt;div id="videoWr1lSKDGX6Q"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 5/26/2007 2:39:34 PM&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-1084975977796489998?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/1084975977796489998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=1084975977796489998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/1084975977796489998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/1084975977796489998'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2008/09/aspnet-configuration.html' title='ASP.NET Configuration'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-4023189732002518238</id><published>2008-09-19T01:26:00.001-05:00</published><updated>2008-09-19T01:26:58.164-05:00</updated><title type='text'>ASP.NET Login Controls</title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;The ASP.NET login controls provide a robust login solution for ASP.NET Web applications without requiring programming. By default, login controls integrate with ASP.NET membership and forms authentication to help automate user authentication for a Web site. For information about how to use ASP.NET membership with forms authentication, see Introduction to Membership.By default, the ASP.NET login controls work in plain text over HTTP. If you are concerned about security, use HTTPS with SSL encryption. For more information about SSL, see Configuring SSL on a Web Server or a Web Site in the IIS documentation.Note:Login controls might not function correctly if the Method of the ASP.NET Web page is changed from POST (the default) to GET.You can customize the contents of several ASP.NET login controls by specifying control templates and adding your own controls to the user interface (UI) of the control, or by replacing or removing optional controls not required for the UI of the control.You can also use the style properties of login controls as well as themes and skins to tailor the appearance of the control.Securing Login ControlsUpdated: November 2007ASP.NET login controls enable you to offer a solution for controlling access to Web pages based on user authentication, membership, and roles. Login controls include the CreateUserWizard control, Login control, LoginStatus control, LoginView control, PasswordRecovery control and ChangePassword control. The information in this topic describes how to improve the security of the login controls through best practices in configuration and coding.While following coding and configuration best practices can improve the security of your application, it is also important that you continually keep your Web server computer up to date with the latest security patches for Microsoft Windows and Internet Information Services (IIS), as well as any patches for Microsoft SQL Server or other data sources.&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/ms178329.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Login&lt;/B&gt; &lt;B&gt;Controls&lt;/B&gt; Overview &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;The &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;login&lt;/B&gt; &lt;B&gt;controls&lt;/B&gt; provide a robust &lt;B&gt;login&lt;/B&gt; solution for &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Web applications without requiring programming. By default, &lt;B&gt;login&lt;/B&gt; &lt;B&gt;controls&lt;/B&gt; integrate with &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; membership ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ms178329.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ms178329.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73942400043795&amp;setlang=en-US&amp;w=e1cd787e,661733b2"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/ms178329(VS.80).aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Login&lt;/B&gt; &lt;B&gt;Controls&lt;/B&gt; Overview &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;The &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;login&lt;/B&gt; &lt;B&gt;controls&lt;/B&gt; work together to provide for your &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Web applications a robust &lt;B&gt;login&lt;/B&gt; solution that requires no programming. By default, &lt;B&gt;login&lt;/B&gt; &lt;B&gt;controls&lt;/B&gt; integrate ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ms178329(VS.80).aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ms178329(VS.80).aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73888827004583&amp;setlang=en-US&amp;w=d19c4aaf,ed6eed37"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.c-sharpcorner.com/UploadFile/raj1979/LoginControl07242008104351AM/LoginControl.aspx&gt;&lt;B&gt;Login&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt; in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 3.5&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;In this step by step tutorial, I am going to discuss the &lt;B&gt;Login&lt;/B&gt; &lt;B&gt;control&lt;/B&gt; available in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 3.5. ... &lt;B&gt;Login&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt; in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 3.5 By Raj Beniwal July 28, 2008. In this step by step ... &lt;BR&gt;&lt;A HREF="http://www.c-sharpcorner.com/UploadFile/raj1979/LoginControl07242008104351AM/LoginControl.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.c-sharpcorner.com/UploadFile/raj1979/LoginControl07242008104351AM/LoginControl.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=74046646402295&amp;setlang=en-US&amp;w=e47c8e42,a10300e9"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.asp.net/CSSAdapters/Membership/Login.aspx&gt;&lt;B&gt;Login&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt; Adapter: &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0 CSS Friendly &lt;B&gt;Control&lt;/B&gt; Adapters 1.0 &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;The adapters are currently turned on. Do you want to keep them enabled?&lt;BR&gt;&lt;A HREF="http://www.asp.net/CSSAdapters/Membership/Login.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.asp.net/CSSAdapters/Membership/Login.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73936223237565&amp;setlang=en-US&amp;w=dd7d53e7,e885c699"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://forums.asp.net/t/1300227.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Login&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt; with C# - &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Forums &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Hi to all. I'm new using the &lt;B&gt;Login&lt;/B&gt; &lt;B&gt;control&lt;/B&gt;. I'm trying to use this so it can connect to MYSQL Database with a Username and Password from that DB, but don't know how this works.&lt;BR&gt;&lt;A HREF="http://forums.asp.net/t/1300227.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://forums.asp.net/t/1300227.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=74044991668391&amp;setlang=en-US&amp;w=560fcd53,a7b8b97b"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://www.zdnetasia.com/techguide/webdev/0,39044903,62045483,00.htm&gt;Secure &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; sites with Membership API&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;The Membership API provides methods for providing this functionality, and these methods are tied to the &lt;B&gt;Login&lt;/B&gt; &lt;B&gt;controls&lt;/B&gt; available for use on &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Web Forms. What &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0 features simplify your projects? What features would you like to see added ... &lt;BR&gt;&lt;A HREF="http://www.zdnetasia.com/techguide/webdev/0,39044903,62045483,00.htm"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.zdnetasia.com/techguide/webdev/0,39044903,62045483,00.htm"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Zd Net Asia.com&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/5/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt; The Login ControlThe Login control displays a user interface for user authentication. The Login control contains text boxes for the user name and password and a check box that allows users to indicate whether they want the server to store their identity using ASP.NET membership and automatically be authenticated the next time they visit the site.The Login control has properties for customized display, for customized messages, and for links to other pages where users can change their password or recover a forgotten password. The Login control can be used as a standalone control on a main or home page, or you can use it on a dedicated login page.If you use the Login control with ASP.NET membership, you do not need to write code to perform authentication. However, if you want to create your own authentication logic, you can handle the Login control's Authenticate event and add custom authentication code. The LoginView ControlThe LoginView control allows you to display different information to anonymous and logged-in users. The control displays one of two templates: the AnonymousTemplate or the LoggedInTemplate. In the templates, you can add markup and controls that display information appropriate for anonymous users and authenticated users, respectively.The LoginView control also includes events for ViewChanging and ViewChanged, which allow you to write handlers for when the user logs in and changes status. The LoginStatus ControlThe LoginStatus control displays a login link for users who are not authenticated and a logout link for users who are authenticated. The login link takes the user to a login page. The logout link resets the current user's identity to be an anonymous user.You can customize the appearance of the LoginStatus control by setting the LoginText and LoginImageUrl properties. The LoginName ControlThe LoginName control displays a user's login name if the user has logged in using ASP.NET membership. Alternatively, if your site uses integrated Windows authentication, the control displays the user's Windows account name. The PasswordRecovery ControlThe PasswordRecovery control allows user passwords to be retrieved based on the e-mail address that was used when the account was created. The PasswordRecovery control sends an e-mail message containing a password to the user.You can configure ASP.NET membership to store passwords using non-reversible encryption. In that case, the PasswordRecovery control generates a new password instead of sending the original password to the user.You can also configure membership to include a security question that the user must answer to recover a password. If you do, the PasswordRecovery control asks the question and checks the answer before recovering the password.The PasswordRecovery control requires that your application can forward e-mail message to a Simple Mail Transfer Protocol (SMTP) server. You can customize the text and format of the e-mail message sent to the user by setting the MailDefinition property.Note:Password information sent in an e-mail message is sent as clear text.The following example shows a PasswordRecovery control declared in an ASP.NET page with MailDefinition property settings to customize the e-mail message.&lt;asp:PasswordRecovery ID="PasswordRecovery1" Runat="server"     SubmitButtonText="Get Password" SubmitButtonType="Link"&gt;  &lt;MailDefinition From="administrator@Contoso.com"     Subject="Your new password"    BodyFileName="PasswordMail.txt" /&gt;&lt;/asp:PasswordRecovery&gt; The CreateUserWizard ControlThe CreateUserWizard control collects information from potential users. By default, the CreateUserWizard control adds the new user to the ASP.NET membership system.The CreateUserWizard control gathers the following user information:User namePasswordConfirmation of passwordE-mail addressSecurity questionSecurity answerThis information is used to authenticate users and recover user passwords, if necessary.Note:The CreateUserWizard control is inherited from the Wizard control.The following example shows a typical ASP.NET declaration for the CreateUserWizard control:&lt;asp:CreateUserWizard ID="CreateUserWizard1" Runat="server"     ContinueDestinationPageUrl="~/Default.aspx"&gt;  &lt;WizardSteps&gt;    &lt;asp:CreateUserWizardStep Runat="server"       Title="Sign Up for Your New Account"&gt;    &lt;/asp:CreateUserWizardStep&gt;    &lt;asp:CompleteWizardStep Runat="server"       Title="Complete"&gt;    &lt;/asp:CompleteWizardStep&gt;  &lt;/WizardSteps&gt;&lt;/asp:CreateUserWizard&gt; The ChangePassword ControlThe ChangePassword control allows users to change their password. The user must first supply the original password and then create and confirm the new password. If the original password is correct, the user password is changed to the new password. The control also includes support for sending an e-mail message about the new password.The ChangePassword control includes two templated views that are displayed to the user. The first is the ChangePasswordTemplate, which displays the user interface used to gather the data required to change the user password. The second template is the SuccessTemplate, which defines the user interface that is displayed after a user password has been successfully changed.The ChangePassword control works with authenticated and non-authenticated users. If a user has not been authenticated, the control prompts the user for a login name. If the user is authenticated, the control populates the text box with the user's login name.&lt;BR&gt;&lt;hr&gt;&lt;br /&gt;&lt;b&gt;Videos from YouTube  &lt;/b&gt; &lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.NET 2.0 Nested GridView&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Screencast,Simple,Gridview,2.0,Example,Howto,Nested,Sample,ASP.NET,&lt;div id="videoQc53ZekBryE"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/22/2007 10:55:45 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; Data Access in the ASP.NET 2.0 Framework&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; 2.0,Walther,Data,Framework,Stephen,Howto,the,Access,Windows,Programming,in,ASP.NET,&lt;div id="videoAAHWfZG4Yj4"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 10/25/2007 7:32:57 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.Net (VB.Net) Session Variable ArrayList - Shalvin&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Tech,VB.Net,Shalvin,.Net,Session,ArrayList,Microsoft,Variable,&lt;div id="videoFlYlPCfMuas"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/2/2008 10:58:58 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; asp asp.net programacion tutorial master pages c#&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; c#,video,pages,asp.net,Film,master,tutorial,asp,programacion,&lt;div id="videoNR1Z_ubzBUc"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 11/3/2006 8:19:39 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; AJAX Y ASP.NET&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Howto,AJAX,ASP.NET,&lt;div id="videoWr1lSKDGX6Q"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 5/26/2007 2:39:34 PM&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-4023189732002518238?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/4023189732002518238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=4023189732002518238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/4023189732002518238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/4023189732002518238'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2008/09/aspnet-login-controls.html' title='ASP.NET Login Controls'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-5155319191594231243</id><published>2008-09-19T00:15:00.001-05:00</published><updated>2008-09-19T00:15:22.944-05:00</updated><title type='text'>Detect Browser Types in ASP.NET Web Pages</title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;In your application, you might need to determine what type of browser a user is viewing pages with, and perhaps determine if the browser supports certain features.Note:ASP.NET can automatically determine browser capabilities and use this information to render appropriate HTML markup for ASP.NET server controls. o detect browser types in an ASP.NET pageQuery the Browser property, which contains an HttpBrowserCapabilities object. This object gets information from the browser or client device during an HTTP request, telling your application the type and level of support the browser or client device offers. The object in turn exposes information about browser capabilities using strongly typed properties and a generic name-value dictionary.The following code example shows how you can displays browser information the information in a text box on the page.Note:The properties exposed by the HttpBrowserCapabilities object indicate inherent capabilities of the browser, but do not necessarily reflect current browser settings. For example, the Cookies property indicates whether a browser inherently supports cookies, but it does not indicate whether the browser that made the request has cookies enabled. &lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/3yekbd5b.aspx&gt;How to: &lt;B&gt;Detect&lt;/B&gt; &lt;B&gt;Browser&lt;/B&gt; &lt;B&gt;Types&lt;/B&gt; in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Pages&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Different browsers and different versions of the same browsers support different features. In your application, you might need to determine what &lt;B&gt;type&lt;/B&gt; of &lt;B&gt;browser&lt;/B&gt; a user is viewing ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/3yekbd5b.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/3yekbd5b.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73892146973680&amp;setlang=en-US&amp;w=b647439d,490e816c"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.asp.net/learn/videos/video-368.aspx&gt;How Do I: &lt;B&gt;Detect&lt;/B&gt; &lt;B&gt;Browser&lt;/B&gt; Capabilities in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Pages&lt;/B&gt; : The ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;How Do I: &lt;B&gt;Detect&lt;/B&gt; &lt;B&gt;Browser&lt;/B&gt; Capabilities in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Pages&lt;/B&gt; ... in the HttpBrowserCapabilities object such as the &lt;B&gt;type&lt;/B&gt; of &lt;B&gt;browser&lt;/B&gt; and ... &lt;BR&gt;&lt;A HREF="http://www.asp.net/learn/videos/video-368.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.asp.net/learn/videos/video-368.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73903256241943&amp;setlang=en-US&amp;w=af62f57a,35f75c47"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.codeproject.com/kb/aspnet/detectbrowser.aspx&gt;CodeProject: &lt;B&gt;Detect&lt;/B&gt; the &lt;B&gt;browser&lt;/B&gt; using &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; and C#. Free source code ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... &lt;B&gt;browser&lt;/B&gt; &lt;B&gt;type&lt;/B&gt; that clients use; Author: Agus Kurniawan; Section: &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;; Chapter: &lt;B&gt;Web&lt;/B&gt; ... &lt;B&gt;Detect&lt;/B&gt; the &lt;B&gt;browser&lt;/B&gt; using &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; and C# By ... for &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; using C# language: &lt;%@ &lt;B&gt;Page&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://www.codeproject.com/kb/aspnet/detectbrowser.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.codeproject.com/kb/aspnet/detectbrowser.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73915850502466&amp;setlang=en-US&amp;w=b986c895,d2c0f308"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.codeproject.com/KB/aspnet/browsercaps.aspx&gt;CodeProject: &lt;B&gt;Browser&lt;/B&gt; Detection using &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;. Free source code and ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... &lt;B&gt;detect&lt;/B&gt; &lt;B&gt;browser&lt;/B&gt; &lt;B&gt;type&lt;/B&gt; in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;; Author: Chris Maunder; Section: &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;; Chapter: &lt;B&gt;Web&lt;/B&gt; ... &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; test &lt;B&gt;page&lt;/B&gt;; Download Owen Brady's NUnit test library; The old method: Determining &lt;B&gt;browser&lt;/B&gt; &lt;B&gt;type&lt;/B&gt; in ASP. In &lt;B&gt;web&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://www.codeproject.com/KB/aspnet/browsercaps.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.codeproject.com/KB/aspnet/browsercaps.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73884094108082&amp;setlang=en-US&amp;w=eb00666,9c0b1e1a"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://slingfive.com/pages/code/browserCaps/&gt;BrowserCaps and other &lt;B&gt;Browser&lt;/B&gt; Testing/Detection Resources&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;BrowserCaps and other &lt;B&gt;Browser&lt;/B&gt; Testing/Detection Resources BrowserCaps XML for &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;Net&lt;/B&gt; -- accurately &lt;B&gt;detect&lt;/B&gt; Mozilla/Firefox ... is working, copy my sample test &lt;B&gt;page&lt;/B&gt; into your &lt;B&gt;web&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://slingfive.com/pages/code/browserCaps/"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://slingfive.com/pages/code/browserCaps/"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73911615032106&amp;setlang=en-US&amp;w=f2cff95,2cbfcd4f"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Autodetection of Browser TypesBy default, the ASP.NET page framework determines browser capabilities by reading the user-agent information passed from the browser to the server during a request. (This information is available as the UserAgent property of the HttpRequest object.) The page matches the user-agent information against agent entries in configuration files and browser definition files.Note:The browserCaps section of configuration files (.config) has been deprecated in the .NET Framework version 2.0. For backward compatibility, the configuration settings in this section are still effective if they are set at the application level, but are merged with the information contained in browser definition files (.browser) located in the machine-level %SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG\Browsers folder and any existing application-level App_Browser folders. For more information, see Browser Definition File Schema (browsers Element).When the page finds a match between the current user-agent information and user agents listed in the file, it can read the corresponding browser capabilities, such as whether the browser supports scripting, styles, frames, and so on. Based on these capabilities, the controls on the page render Web controls using appropriate markup, such as XHTML, HTML 3.2, and so on. If ASP.NET is rendering HTML, it can determine whether to render recent (cascading style sheet-compliant) or earlier (non-CSS-compliant) versions of HTML elements. For older browsers, ASP.NET renders formatting information using elements (for example, a font element) rather than using CSS styles. Overriding Browser Type DetectionIf you want to explicitly control how the page is rendered instead of relying on automatic browser detection, you can set the page's ClientTarget property. You can set the property declaratively as an attribute of the @ Page directive for that page, or you can set it programmatically.The value of the ClientTarget property is an alias for the type of browser you want to render the page for. For example, to force the page to render for Microsoft Internet Explorer 6.0, you can use the alias uplevel. The alias must be defined in the clientTarget section of the configuration file. The predefined defaults are ie5, ie4, uplevel, and downlevel.By specifying the alias downlevel, you can force the page to render HTML 3.2-compatible elements no matter what browser has requested the page. Similarly, by specifying uplevel, you can force the page to render CSS style attributes even for older browser versions.You can create additional aliases by defining them in the Machine.config or Web.config file, which enables you to create custom browser definitions. For more information, see ASP.NET Configuration Settings. AJAX-enabled ASP.NET Controls and FeaturesAJAX-enabled features in ASP.NET are compatible with most modern browsers and run with the default security settings for these browsers. These controls and features require that the browser be able to run client script. The UpdatePanel and ScriptManager controls are examples of AJAX-enabled controls. For a list of compatible browsers and of recommended security settings for AJAX-enabled controls and features, see Browser Security Settings for AJAX Enabled ASP.NET Pages.Note:You can use the properties exposed by the HttpBrowserCapabilities object to determine whether a browser supports ECMAScript (JScript, JavaScript).For an overview of AJAX features in ASP.NET, see Adding AJAX and Client Capabilities Roadmap. Client ScriptSome functionality of ASP.NET server controls depends on being able to run client script. The client script is automatically generated and sent as part of the page, if the browser is capable of executing script. Even so, some users might have turned off script execution in their browsers, and will therefore not be able to fully use the control's capabilities. For more information, see Client Script in ASP.NET Web Pages. Working with Earlier Versions of BrowsersBrowsers are split into two groups, which are sometimes referred to as "uplevel" browsers (newer versions) and "downlevel" browsers (earlier versions). These groups define the type of native support that a browser offers, and they generally determine the presentation and behavior of a Web page.Browsers that are considered "uplevel" usually support at least the following:ECMAScript (JScript, JavaScript) version 1.2.HTML version 4.0.The Microsoft Document Object Model (MSDOM).Cascading style sheets (CSS)."Downlevel" browsers and client devices support the following only:HTML version 3.2The server control properties listed in the following table render differently in uplevel and downlevel browsers.Server control propertyRendering behavior in uplevel and downlevel browsersAccessKeyThis property does not work on any downlevel browsers for any controls. It is not HTML 4.0 and works only in Internet Explorer 4.0 or later.BackColorThis property works on downlevel browsers for only certain controls: Table, Panel, GridView, Calendar, and ValidationSummary. It also works for CheckBoxList, RadioButtonList, and DataList if the layout is in a Table control. In general, only controls that render as a table element can output a background color in HTML 3.2, whereas almost anything can in HTML 4.0. For controls that render span elements, including Label controls, validator controls, and list controls in Flow mode, BackColor works in Internet Explorer 5 and later but not in Internet Explorer 4.0.BorderColorThis property works on downlevel browsers only for the same table-based controls as BackColor. However, it is output as the bordercolor attribute, which is not part of the HTML 3.2 standard. Some browsers support this attribute, including Internet Explorer 3.0 and later, but not all browsers do.BorderStyleThis property does not work on any downlevel browsers. There is no equivalent to it in HTML 3.2.BorderWidthThis property works only in controls that render as an HTML table element (Table, Panel, GridView, and Calendar) or as an img element (Image, AdRotator). BorderWidth only works on downlevel browsers if specified in pixels; otherwise, it is always rendered as either border=1 or border=0. Also, BorderWidth only works with table-based controls if GridLines is set to a value other than None. This is because there is no way to specify a border without gridlines in HTML 3.2. For controls that render span elements, including Label controls, validator controls, and list controls in Flow mode, BorderWidth works in Internet Explorer 5 or later, but not in Internet Explorer 4.0.CssClassThis property is always rendered as the class attribute, regardless of the browser. Most uplevel browsers recognize the class attribute.EnabledThis property is used to specify whether a control raises its events and functions. In Internet Explorer 4.0 or later, setting Enabled to false has the effect of making the control appear unavailable and locked from input, using the disabled=true attribute.Font-Bold, Font-Italic, Font-Strikeout and similar propertiesThese properties are rendered as style attributes for uplevel browsers (for example, Font-Weight for bold and Font-Style for italic) and as independent elements (for example, b and i) for downlevel browsers.Font-SizeThis property works on downlevel browsers for all controls only if named font sizes are used (Small, Smaller, and so on). In uplevel browsers, this property is rendered as a style attribute; in downlevel browsers, it is rendered as a font element.Font-OverlineThis property does not work on any downlevel browser.ForeColorThis property works on downlevel browsers for all controls except Image, AdRotator, HyperLink, and LinkButton. For downlevel browsers, ForeColor is rendered by using font elements.HeightThis property does not work on downlevel browsers for Label controls, validator controls, HyperLink controls, or LinkButton controls. Height also does not work for CheckBoxList, RadioButtonList, and DataList controls if the layout for those controls is set to Flow. Only pixel and percentage measurements work.For table-based controls, height on inner tables is not rendered for downlevel browsers because the Height attribute has been deprecated in HTML 4.01. This results in a slightly different appearance between the uplevel and downlevel rendering. The most obvious difference will be if BackColor is set on the SideBarStyle property: in uplevel the BackColor appears to be the entire length of that column and in downlevel browsers it will only be as long as required to accommodate the text buttons.TabIndexThis property does not work on any downlevel browsers for any controls. It is not HTML 4.0 and only works in Internet Explorer 4.0 or later.ToolTipThis property does not work on any downlevel browsers.WidthThis property does not work on downlevel browsers for Label, HyperLink, LinkButton, or validator controls. Width also does not work for CheckBoxList, RadioButtonList, and DataList controls if the layout is set to Flow. Only pixel and percentage measurements work.&lt;BR&gt;&lt;hr&gt;&lt;br /&gt;&lt;b&gt;Videos from YouTube  &lt;/b&gt; &lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.NET 2.0 Nested GridView&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Screencast,Simple,Gridview,2.0,Example,Howto,Nested,Sample,ASP.NET,&lt;div id="videoQc53ZekBryE"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/22/2007 10:55:45 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; Data Access in the ASP.NET 2.0 Framework&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; 2.0,Walther,Data,Framework,Stephen,Howto,the,Access,Windows,Programming,in,ASP.NET,&lt;div id="videoAAHWfZG4Yj4"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 10/25/2007 7:32:57 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.Net (VB.Net) Session Variable ArrayList - Shalvin&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Tech,VB.Net,Shalvin,.Net,Session,ArrayList,Microsoft,Variable,&lt;div id="videoFlYlPCfMuas"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/2/2008 10:58:58 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; asp asp.net programacion tutorial master pages c#&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; c#,video,pages,asp.net,Film,master,tutorial,asp,programacion,&lt;div id="videoNR1Z_ubzBUc"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 11/3/2006 8:19:39 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; AJAX Y ASP.NET&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Howto,AJAX,ASP.NET,&lt;div id="videoWr1lSKDGX6Q"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 5/26/2007 2:39:34 PM&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-5155319191594231243?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/5155319191594231243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=5155319191594231243' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/5155319191594231243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/5155319191594231243'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2008/09/detect-browser-types-in-aspnet-web.html' title='Detect Browser Types in ASP.NET Web Pages'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-2096713843471049983</id><published>2008-09-19T00:09:00.001-05:00</published><updated>2008-09-19T00:09:15.270-05:00</updated><title type='text'>ASP.NET Web Server Control Event Model</title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;An important feature of ASP.NET is that it allows you to program Web pages using an event-based model that is similar to that in client applications. As a simple example, you can add a button to an ASP.NET Web page and then write an event handler for the button's click event. Although this is common in Web pages that work exclusively with client script (by handling the button's onclick event in dynamic HTML), ASP.NET brings this model to server-based processing.Events raised by ASP.NET server controls work somewhat differently than events in traditional HTML pages or in client-based Web applications. The difference arises primarily because of the separation of the event itself from where the event is handled. In client-based applications, events are raised and handled on the client. In ASP.NET Web pages, however, events associated with server controls originate on the client (browser) but are handled on the Web server by the ASP.NET page.For events raised on the client, the ASP.NET Web control event model requires that the event information be captured on the client and an event message transmitted to the server, through an HTTP post. The page must interpret the post to determine what event occurred and then call the appropriate method in your code on the server to handle the event.ASP.NET handles the task of capturing, transmitting, and interpreting the event. When you create event handlers in an ASP.NET Web page, you can typically do so without thinking about how the event information is captured and made available to your code. Instead, you can create event handlers in much the same way you would in a traditional client form. However, there are some aspects of event handling in ASP.NET Web pages that you should be aware of.&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/y3bwdsh3(VS.80).aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Server&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt; &lt;B&gt;Event&lt;/B&gt; &lt;B&gt;Model&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;An important feature of &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; is that it allows you to program &lt;B&gt;Web&lt;/B&gt; pages using an &lt;B&gt;event&lt;/B&gt;-based &lt;B&gt;model&lt;/B&gt; that is similar to that in client applications. As a simple example, you can ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/y3bwdsh3(VS.80).aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/y3bwdsh3(VS.80).aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73773511607393&amp;setlang=en-US&amp;w=d26b7152,c3fe3f18"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/59t350k3.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Server&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt; &lt;B&gt;Event&lt;/B&gt; &lt;B&gt;Model&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;Events&lt;/B&gt; raised by &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;server&lt;/B&gt; controls work somewhat differently than &lt;B&gt;events&lt;/B&gt; in traditional client forms or in client-based &lt;B&gt;Web&lt;/B&gt; applications.&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/59t350k3.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/59t350k3.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73849726895814&amp;setlang=en-US&amp;w=c71c2a73,38944d9a"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://asp.net/AJAX/Documentation/Live/tutorials/IScriptControlTutorial1.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; AJAX &gt; &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; AJAX Extensibility &gt; Adding Client Capabilities ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... &lt;B&gt;Model&lt;/B&gt; (DOM) elements by using a client &lt;B&gt;control&lt;/B&gt; ... &lt;B&gt;event&lt;/B&gt; of the DOM element. Creating the &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Server&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt;. A &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;server&lt;/B&gt; &lt;B&gt;control&lt;/B&gt; that includes client features by using &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2 ... &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;server&lt;/B&gt; &lt;B&gt;control&lt;/B&gt; in an &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://asp.net/AJAX/Documentation/Live/tutorials/IScriptControlTutorial1.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://asp.net/AJAX/Documentation/Live/tutorials/IScriptControlTutorial1.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73903612891968&amp;setlang=en-US&amp;w=98bf8593,f1660fd9"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://quickstarts.asp.net/3-5-extensions/silverlight/MediaPlayerControl.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Extensions &gt; &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Controls for Silverlight &gt; MediaPlayer ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MediaPlayer &lt;B&gt;Server&lt;/B&gt; &lt;B&gt;Control&lt;/B&gt; Introduction. The &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; ... client script class (based on the &lt;B&gt;model&lt;/B&gt; used in the &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; ... Studio to create the MediaPlayer &lt;B&gt;control&lt;/B&gt; and use &lt;B&gt;Web&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://quickstarts.asp.net/3-5-extensions/silverlight/MediaPlayerControl.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://quickstarts.asp.net/3-5-extensions/silverlight/MediaPlayerControl.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73883974841077&amp;setlang=en-US&amp;w=2c76ce79,6fac6960"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MVC Framework - ScottGu's Blog &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... years with &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; is built-in support for developing &lt;B&gt;web&lt;/B&gt; applications using a &lt;B&gt;model&lt;/B&gt; ... The &lt;B&gt;server&lt;/B&gt; &lt;B&gt;control&lt;/B&gt; &lt;B&gt;model&lt;/B&gt; also ... postback &lt;B&gt;model&lt;/B&gt;? Will &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MVC support using existing &lt;B&gt;server&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73921052761297&amp;setlang=en-US&amp;w=4a1cdf69,6acf9805"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://sev.prnewswire.com/computer-electronics/20071112/AQM08612112007-1.html&gt;Microsoft Outlines Pricing, Packaging and Licensing for Windows &lt;B&gt;Server&lt;/B&gt; ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... nears the final stages of Windows &lt;B&gt;Server&lt;/B&gt; 2008 development and the Feb. 27, 2008, worldwide launch &lt;B&gt;event&lt;/B&gt; ... give customers greater &lt;B&gt;control&lt;/B&gt; ... Services (IIS) 7.0, &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;, and the Microsoft .NET Framework, Windows &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Server&lt;/B&gt; 2008 helps ... &lt;BR&gt;&lt;A HREF="http://sev.prnewswire.com/computer-electronics/20071112/AQM08612112007-1.html"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://sev.prnewswire.com/computer-electronics/20071112/AQM08612112007-1.html"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;PR Newswire&lt;BR&gt;&lt;B&gt;NewsDateTime: 11/14/2007&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt; Event Set for Server Controls and PagesBecause most ASP.NET server control events require a round trip to the server for processing, they can affect the performance of a page. Therefore, server controls offer a limited set of events, usually only click-type events. Some server controls support change events. For example, the CheckBox Web server control raises a CheckedChanged event in server code when the user clicks the box. Some server controls support more abstract events. For example, the Calendar Web server control raises a SelectionChanged event that is a more abstract version of a click event.Events that occur often (and can be raised without the user knowing it), such as an onmouseover event, are not supported for server controls. ASP.NET server controls can still call client-side handlers for those events, as explained later under ASP.NET Web Server Control Event Model.Controls and the page itself also raise life-cycle events at each processing step, such as Init, Load, and PreRender. You can take advantage of these life-cycle events in your application. For example, in a page's Load event, you can set default values for controls. Event ArgumentsServer-based ASP.NET page and control events follow a standard .NET Framework pattern for event-handler methods. All events pass two arguments: an object representing the object that raised the event, and an event object containing any event-specific information. The second argument is usually of type EventArgs, but for some controls is of a type specific to that control. For example, for an ImageButton Web server control, the second argument is of type ImageClickEventArgs, which includes information about the coordinates where the user has clicked.Note:Events for the page (for example, the page's Load event) can accept the standard two arguments, but no values are passed in these arguments. Postback and Non-Postback Events in Server ControlsIn server controls, certain events, typically click events, cause the page to be posted back immediately to the server. Change events in HTML server controls and Web server controls, such as the TextBox control, do not immediately cause a post. Instead, they are raised the next time a post occurs.Note:If the browser supports it, validation controls can check user input using client script, without a round trip to the server. For details, see Validating User Input in ASP.NET Web Pages.After a page has been posted back, the page's initialization events (Page_Init and Page_Load) are raised, and then control events are processed. You should not create application logic that relies on the change events being raised in a specific order unless you have detailed knowledge of page event processing. For details, see ASP.NET Page Life Cycle Overview.If it useful for your application, you can specify that change events cause the page to post. Web server controls that support a change event include an AutoPostBack property. When this property is true, the control's change event causes the page to post immediately, without waiting for a click event. For example, by default, a CheckBox control's CheckedChanged event does not cause the page to be submitted. However, if you set the control's AutoPostBack property to true, as soon as a user clicks the check box, the page is sent to the server for processing.Note:For the AutoPostBack property to work properly, the user's browser must be set to allow scripting. This is the default in most cases. However, some users disable scripting for security reasons. For details, see Client Script in ASP.NET Web Pages. Forwarded EventsWeb server controls such as the Repeater, DataList, GridView, FormView, and DetailsView controls can contain button controls that themselves raise events. For example, each row in a GridView control can contain one or more buttons created dynamically by templates.Rather than each button raising an event individually, events from the nested controls are forwarded to the container control. The container in turn raises a generic ItemCommand event with parameters that allow you to discover which individual control raised the original event. By responding to this single event, you can avoid having to write individual event handlers for child controls.The ItemCommand event includes the two standard event arguments, an object referencing the source of the event and an event object containing event-specific information.Note:The GridView, DataList, and other data controls support additional events, such as EditCommand, DeleteCommand, and UpdateCommand, that are special cases of forwarded events.With buttons, you can use the CommandArgument property to pass a user-specified string to the event handler to help you identify what button raised the event. For example, in a DataList control, buttons raise the ItemCommand event. You can set the CommandArgument property of each button to a different value—perhaps one button's value is "ShowDetails" and another button's value is "AddToShoppingCart"—and then capture those values in the event handler later. Binding Events to MethodsAn event is a message like "a button has been clicked". In your application, the message must be translated into a method call in your code. The binding between the event message and a specific method—that is, an event handler—is done using an event delegate. For more information, see Events and Delegates.In ASP.NET Web pages, you do not need to explicitly code delegates if the control is created declaratively (in markup) on the page. Event binding can be accomplished in various ways, depending on what event you are binding and what programming language you are using. For details, see How to: Create Event Handlers in ASP.NET Web Pages.Binding Control EventsFor controls declared on the page, you can bind an event to a method by setting an attribute (property) in the control's markup. The following code example shows how to bind the Click event of an ASP.NET Button control to a method named ButtonClick.&lt;asp:button id="SampleButton" runat="server"    text="Submit" onclick="ButtonClick" /&gt;When the page is compiled, ASP.NET looks for a method named ButtonClick and confirms that the method has the appropriate signature (it accepts two arguments, one of type Object and another of type EventArgs). ASP.NET then automatically binds the event to the method.In Visual Basic, you can alternatively bind events to methods using the Handles keyword in the event handler declaration, as in the following code example:Binding Page EventsASP.NET pages raise life-cycle events such as Init, Load, PreRender, and others. By default, you can bind page events to methods using a naming convention of Page_eventname. For example, to create a handler for the page's Load event, you can create a method named Page_Load. At run time, ASP.NET will find methods based on this naming convention and automatically perform the binding between the event and the method. You can use the convention of Page_eventname for any event exposed by the Page class.Note:Page event-handling methods do not require any arguments.If you prefer, you can bind handlers to events explicitly. The automatic binding of page events based on the method naming convention is controlled by a page property named AutoEventWireup. By default, for C#, this property is set to true, and ASP.NET performs the automatic lookup and binding described earlier. Alternatively, you can set this property to false by adding the attribute AutoEventWireup=false in the @ Page directive. You can then create methods with any name and bind them to page events explicitly.By default, for Visual Basic, this property is set to false. In Visual Basic, handlers are bound to events by using the Handles keyword. This keyword is inserted automatically by Visual Studio as part of the method that you create when you select a page event from the drop-down box. The following example illustrates use of the Handles keyword:One disadvantage of the AutoEventWireup attribute is that it requires that the page event handlers have specific, predictable names. This limits your flexibility in how you name event handlers. Another disadvantage is that performance is adversely affected, because ASP.NET searches for methods at run-time. For a Web site with high traffic volumes, the impact on performance could be significant.Note:If you include explicit binding for page events, be sure that the AutoEventWireup property is set to false so that the method is not called twice.Explicit Binding for Dynamic ControlsIf you create controls by declaring them in markup, you can bind events to methods using an attribute (for example, onclick) or in Visual Basic, by using the Handles keyword. If you create controls dynamically (in code), you cannot use either of these methods, because the compiler does not have a reference to the control at compilation time.In that case, you must use explicit event binding. In Visual Basic, you can use the AddHandler statement to bind an event in a dynamically created control to an existing method. In C#, you create a delegate and associate it with the control's event. The following code example shows how you can bind a method named ButtonClick to a button's Click event:C#Button b = new Button;b.Text = "Click";b.Click += new System.EventHandler(ButtonClick);Placeholder1.Controls.Add(b); Responding to Both Client and Server Events in ASP.NET Server ControlsThis topic has discussed how to work with events raised in server code. Controls render elements to the browser, and those elements can also raise client-side events that you can handle in client script. Using client script, you can add mouse and keyboard event handling to ASP.NET server controls. For more information, see Client Script in ASP.NET Web Pages and How to: Add Client Script Events to ASP.NET Web Server Controls. Application and Session EventsIn addition to page and control events, ASP.NET provides ways for you to work with life-cycle events that are raised when your application starts or stops or when an individual user's session starts or stops, including the following:Application events are raised for all requests to an application. For example, the BeginRequest event of the HttpApplication object (Application_BeginRequest) is raised when any ASP.NET Web page or XML Web service in your application is requested. This event allows you to initialize resources that will be used for each request to the application. A corresponding event, the EndRequest event of the HttpApplication object (Application_EndRequest), provides you with an opportunity to close or otherwise dispose of resources used for the request.Session events are similar to application events (there is a Start and an End event), but are raised with each unique session within the application. A session begins when a user requests a page for the first time from your application and ends either when your application explicitly closes the session or when the session times out.Note:The Session_End event is not raised under all circumstances. For details, see End.&lt;BR&gt;&lt;hr&gt;&lt;br /&gt;&lt;b&gt;Videos from YouTube  &lt;/b&gt; &lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.NET 2.0 Nested GridView&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Screencast,Simple,Gridview,2.0,Example,Howto,Nested,Sample,ASP.NET,&lt;div id="videoQc53ZekBryE"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/22/2007 10:55:45 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; Data Access in the ASP.NET 2.0 Framework&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; 2.0,Walther,Data,Framework,Stephen,Howto,the,Access,Windows,Programming,in,ASP.NET,&lt;div id="videoAAHWfZG4Yj4"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 10/25/2007 7:32:57 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.Net (VB.Net) Session Variable ArrayList - Shalvin&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Tech,VB.Net,Shalvin,.Net,Session,ArrayList,Microsoft,Variable,&lt;div id="videoFlYlPCfMuas"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/2/2008 10:58:58 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; asp asp.net programacion tutorial master pages c#&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; c#,video,pages,asp.net,Film,master,tutorial,asp,programacion,&lt;div id="videoNR1Z_ubzBUc"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 11/3/2006 8:19:39 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; AJAX Y ASP.NET&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Howto,AJAX,ASP.NET,&lt;div id="videoWr1lSKDGX6Q"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 5/26/2007 2:39:34 PM&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-2096713843471049983?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/2096713843471049983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=2096713843471049983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/2096713843471049983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/2096713843471049983'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2008/09/aspnet-web-server-control-event-model.html' title='ASP.NET Web Server Control Event Model'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-2771980537026888515</id><published>2008-09-18T23:51:00.001-05:00</published><updated>2008-09-18T23:51:03.733-05:00</updated><title type='text'>ASP.NET Page Class</title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;When an ASP.NET page is requested and renders markup to a browser, the code that runs is not solely the code that you created for your page. Instead, at run time, ASP.NET generates and compiles one or more classes that actually perform the tasks required to run the page. This topic provides an overview of the code that is generated at run time. Generating and Running the Page Class CodeAn ASP.NET page runs as a unit, combining the server-side elements in a page, such as controls, with the event-handling code you have written. You do not have to precompile pages into assemblies. ASP.NET dynamically compiles pages and runs them the first time they are requested by a user. If there are any changes to the page or resources the page depends on, the page is automatically recompiled. The class or classes that the compiler creates depends on whether the page uses the single-file model or the code-behind model.ASP.NET also supports precompilation of a Web site to enhance performance and perform error checking as well as to support site deployment. For more information, see ASP.NET Web Site Precompilation Overview. Precompilation works for both single-file and code-behind page models, and the compiler output is the same for both models. Single-File PagesIn a single-file page, the markup, server-side elements, and event-handling code are all in a single .aspx file. When the page is compiled, the compiler generates and compiles a new class that derives from the base Page class or a custom base class defined with the Inherits attribute of the @ Page directive. For example, if you create a new ASP.NET Web page named SamplePage1 in your application's root directory then a new class named ASP.SamplePage1_aspx is derived from the Page class. For pages inside of application subfolders, the subfolder name is used as part of the generated class. The generated class contains declarations for the controls in the .aspx page and contains your event handlers and other custom code.After page generation, the generated class is compiled into an assembly, the assembly is loaded into the application domain, and then the page class is instantiated and executed to render output to the browser. If you make changes to the page that would affect the generated class—whether by adding controls or modifying your code—the compiled class code is invalidated and a new class is generated&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/ms178138.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Page&lt;/B&gt; &lt;B&gt;Class&lt;/B&gt; Overview &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;When an &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; is requested and renders markup to a browser, the code that runs is not solely the code that you created for your &lt;B&gt;page&lt;/B&gt;. Instead, at run time, &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; generates ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ms178138.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/ms178138.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73888236445367&amp;setlang=en-US&amp;w=18cc35bf,d73dde30"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://wiki.asp.net/page.aspx/425/how-to-adding-localization-support-to-aspnet-web-by-extending-page-class-c/&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Wiki: Internationalization: How to: Adding localization ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;How to: Adding localization support to &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; web by extending &lt;B&gt;Page&lt;/B&gt; &lt;B&gt;class&lt;/B&gt; (C#)&lt;BR&gt;&lt;A HREF="http://wiki.asp.net/page.aspx/425/how-to-adding-localization-support-to-aspnet-web-by-extending-page-class-c/"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://wiki.asp.net/page.aspx/425/how-to-adding-localization-support-to-aspnet-web-by-extending-page-class-c/"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73917546566811&amp;setlang=en-US&amp;w=d5560b62,11ece4c8"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://en.wikipedia.org/wiki/ASP.NET&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; - Wikipedia, the free encyclopedia&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;After the request has been processed, the instance of the &lt;B&gt;page&lt;/B&gt; &lt;B&gt;class&lt;/B&gt; is discarded and with it the entire control tree. State management. &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; applications are hosted in a web ... &lt;BR&gt;&lt;A HREF="http://en.wikipedia.org/wiki/ASP.NET"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://en.wikipedia.org/wiki/ASP.NET"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73920243910390&amp;setlang=en-US&amp;w=1f13baef,e8dce955"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.asp.net/ajax/documentation/live/ClientReference/Sys.WebForms/PageRequestManagerClass/default.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; AJAX &gt; Client Reference &gt; Sys.WebForms &gt; PageRequestManager ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Documentation for: &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Ajax Version 1.0. This documentation is for a previous version. For the current released version, see the &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Ajax documentation ... &lt;BR&gt;&lt;A HREF="http://www.asp.net/ajax/documentation/live/ClientReference/Sys.WebForms/PageRequestManagerClass/default.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.asp.net/ajax/documentation/live/ClientReference/Sys.WebForms/PageRequestManagerClass/default.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73918160244241&amp;setlang=en-US&amp;w=f79ebfb5,36329d5b"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://asp.net/AJAX/Documentation/Live/tutorials/ExposingWebServicesToAJAXTutorial.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; AJAX &gt; Web Services &gt; Exposing Web Services to Client Script &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... the whole &lt;B&gt;page&lt;/B&gt;, because only data is transferred between the browser and the Web server. &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; AJAX automatically creates JavaScript proxy &lt;B&gt;classes&lt;/B&gt; for ... methods to an &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://asp.net/AJAX/Documentation/Live/tutorials/ExposingWebServicesToAJAXTutorial.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://asp.net/AJAX/Documentation/Live/tutorials/ExposingWebServicesToAJAXTutorial.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73895949060368&amp;setlang=en-US&amp;w=88376a9e,4f57326b"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://visualstudiomagazine.com/features/article.aspx?editorialsid=1290&gt;Create Master Pages in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Opening up the code-behind file for the first time on a master &lt;B&gt;page&lt;/B&gt;, you'll see code that looks pretty much like your normal &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; code: Partial &lt;B&gt;Class&lt;/B&gt; BasicMasterPage_master Sub &lt;B&gt;Page&lt;/B&gt;_Load (ByVal sender As Object, _ ByVal e As System ... &lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/features/article.aspx?editorialsid=1290"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/features/article.aspx?editorialsid=1290"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;VisualStudio Magazine&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/16/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://visualstudiomagazine.com/columns/article.aspx?editorialsid=1907&gt;Build Printable &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Pages&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;Rename the file and all the &lt;B&gt;class&lt;/B&gt; name references to this new name (by default, VS.NET creates a &lt;B&gt;Page&lt;/B&gt; &lt;B&gt;class&lt;/B&gt; that matches the ... You can get the same result with fewer pages by creating a more generic printing &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; to handle all print requests ... &lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/columns/article.aspx?editorialsid=1907"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://visualstudiomagazine.com/columns/article.aspx?editorialsid=1907"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;VisualStudio Magazine&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/5/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.ddj.com/windows/210600104&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MVC Framework and Routing&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;The ASPX &lt;B&gt;page&lt;/B&gt; has a code-behind &lt;B&gt;class&lt;/B&gt; but usually does all of its work through markup and ASP-style code blocks. In &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MVC framework the view is an extremely thin object: &lt;h2&gt;&lt;%= Html.Encode(ViewData["Message"]) %&gt;&lt;/h2&gt; Communication between ... &lt;BR&gt;&lt;A HREF="http://www.ddj.com/windows/210600104"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.ddj.com/windows/210600104"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Dr. Dobb's Portal News&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/8/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://mcpmag.com/features/article.asp?EditorialsID=324&amp;whichpage=2&amp;pagesize=10&gt;Hacking SQL Server&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... Microsoft has updated ASP and ADO under the .NET platform, both &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; and ... The ASP &lt;B&gt;page&lt;/B&gt; would build the SQL statement to look something like this: ... the Events tab and remove all items from the “Selected Event &lt;B&gt;Class&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://mcpmag.com/features/article.asp?EditorialsID=324&amp;whichpage=2&amp;pagesize=10"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://mcpmag.com/features/article.asp?EditorialsID=324&amp;whichpage=2&amp;pagesize=10"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;MCPmag.com&lt;BR&gt;&lt;B&gt;NewsDateTime: 8/18/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt; Code-Behind PagesIn the code-behind model, the page's markup and server-side elements, including control declarations, are in an .aspx file, while your page code is in a separate code file. The code file contains a partial class—that is, a class declaration with the keyword partial (Partial in Visual Basic) indicating that it contains only some of the total code that makes up the full class for the page. In the partial class, you add the code that your application requires for the page. This typically consists of event handlers, but can include any methods or properties that you need.The inheritance model for code-behind pages is slightly more complex than that for single-file pages. The model is this:The code-behind file contains a partial class that inherits from a base page class. The base page class can be the Page class, or it can be another class that derives from Page.The .aspx file contains an Inherits attribute in the @ Page directive that points to the code-behind partial class.When the page is compiled, ASP.NET generates a partial class based on the .aspx file; this class is a partial class of the code-behind class file. The generated partial class file contains declarations for the page's controls. This partial class enables your code-behind file to be used as part of a complete class without requiring you to declare the controls explicitly.Finally, ASP.NET generates another class that inherits from the class generated in Step 3. This second generated class contains the code required to build the page. The second generated class and the code-behind class are compiled into an assembly that runs to render output to the browser.&lt;BR&gt;&lt;hr&gt;&lt;br /&gt;&lt;b&gt;Videos from YouTube  &lt;/b&gt; &lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.NET 2.0 Nested GridView&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Screencast,Simple,Gridview,2.0,Example,Howto,Nested,Sample,ASP.NET,&lt;div id="videoQc53ZekBryE"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/22/2007 10:55:45 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; Data Access in the ASP.NET 2.0 Framework&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; 2.0,Walther,Data,Framework,Stephen,Howto,the,Access,Windows,Programming,in,ASP.NET,&lt;div id="videoAAHWfZG4Yj4"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 10/25/2007 7:32:57 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.Net (VB.Net) Session Variable ArrayList - Shalvin&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Tech,VB.Net,Shalvin,.Net,Session,ArrayList,Microsoft,Variable,&lt;div id="videoFlYlPCfMuas"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/2/2008 10:58:58 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; asp asp.net programacion tutorial master pages c#&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; c#,video,pages,asp.net,Film,master,tutorial,asp,programacion,&lt;div id="videoNR1Z_ubzBUc"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 11/3/2006 8:19:39 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; AJAX Y ASP.NET&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Howto,AJAX,ASP.NET,&lt;div id="videoWr1lSKDGX6Q"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 5/26/2007 2:39:34 PM&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-2771980537026888515?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/2771980537026888515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=2771980537026888515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/2771980537026888515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/2771980537026888515'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2008/09/aspnet-page-class.html' title='ASP.NET Page Class'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-18199923327661082</id><published>2008-09-18T23:46:00.001-05:00</published><updated>2008-09-18T23:46:06.057-05:00</updated><title type='text'>ASP.NET Web Page Code Model</title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;An ASP.NET Web page consists of two parts:Visual elements, which include markup, server controls, and static text.Programming logic for the page, which includes event handlers and other code.ASP.NET provides two models for managing the visual elements and code — the single-file page model and the code-behind page model. The two models function the same, and you can use the same controls and code for both models........ Choosing a Page ModelThe single-file and code-behind page models are functionally the same. At run time, the models execute the same way, and there is no performance difference between them. Choosing a page model therefore depends on other factors, such as how you want to organize the code in your application, whether it is important to separate page design from coding, and so on.Note:Examples you read in the documentation are often presented as single-file pages. This is primarily as a convenience for the reader, because it avoids having to illustrate two files for each example. The fact that you find single-file examples in the documentation should not be interpreted to mean that single-file pages are favored over code-behind pages or that there is some other inherent benefit to single-file pages.Advantages of Single-File PagesAs a rule, the single-file model is suitable for pages in which the code consists primarily of event handlers for the controls on the page.Advantages of the single-file page model include the following:In pages where there is not very much code, the convenience of keeping the code and markup in the same file can outweigh other advantages of the code-behind model. For example, it can be easier to study a single-file page because you can see the code and the markup in one place.Pages written using the single-file model are slightly easier to deploy or to send to another programmer because there is only one file.Because there is no dependency between files, a single-file page is easier to rename.Managing files in a source code control system is slightly easier, because the page is self-contained in a single file.Advantages of Code-Behind PagesCode-behind pages offer advantages that make them suitable for Web applications with significant code or in which multiple developers are creating a Web site.Advantages of the code-behind model include the following:Code-behind pages offer a clean separation of the markup (user interface) and code. It is practical to have a designer working on the markup while a programmer writes code.Code is not exposed to page designers or others who are working only with the page markup.Code can be reused for multiple pages. Compilation and DeploymentCompilation and deployment of both single-file and code-behind pages is similar. At its simplest, you copy the page to the target server. If you are working with code-behind pages, you copy both the .aspx page and the code file. When the page is first requested, ASP.NET compiles the page and runs it. Note that in both scenarios you deploy source code with the markup.Alternatively, you can precompile your Web site. In that case, ASP.NET produces object code for your pages that you can copy to the target server. Precompilation works for both single-file and code-behind models, and the output is the same for both models. &lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/015103yb.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Page&lt;/B&gt; &lt;B&gt;Code&lt;/B&gt; &lt;B&gt;Model&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;An &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; consists of two parts: ... An &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; consists of two parts: Visual elements, which include markup, server controls, and static text.&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/015103yb.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/015103yb.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73888406308482&amp;setlang=en-US&amp;w=766593e8,9b9b7eb9"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/015103yb(VS.80).aspx&gt;&lt;B&gt;Web&lt;/B&gt; Forms &lt;B&gt;Code&lt;/B&gt; &lt;B&gt;Model&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;An &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; consists of two parts: ... An &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; consists of two parts: Visual elements, which include markup, server controls, and static text.&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/015103yb(VS.80).aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/015103yb(VS.80).aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73826365609647&amp;setlang=en-US&amp;w=c1f835ae,5f87da8c"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://en.wikipedia.org/wiki/ASP.NET&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; - Wikipedia, the free encyclopedia&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;pages&lt;/B&gt;, known officially as "&lt;B&gt;web&lt;/B&gt; forms", are the main building block for application ... &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;'s &lt;B&gt;code&lt;/B&gt;-behind &lt;B&gt;model&lt;/B&gt; marks a departure from Classic ASP in that it encourages ... &lt;BR&gt;&lt;A HREF="http://en.wikipedia.org/wiki/ASP.NET"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://en.wikipedia.org/wiki/ASP.NET"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73920243910390&amp;setlang=en-US&amp;w=1f13baef,e8dce955"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://support.microsoft.com/kb/303247&gt;INFO: &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Code&lt;/B&gt;-Behind &lt;B&gt;Model&lt;/B&gt; Overview&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... article provides a brief overview of the &lt;B&gt;code&lt;/B&gt;-behind &lt;B&gt;model&lt;/B&gt;, which is introduced in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;. ... use Microsoft Visual Studio .NET to create &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; Forms, &lt;B&gt;code&lt;/B&gt;-behind &lt;B&gt;pages&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://support.microsoft.com/kb/303247"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://support.microsoft.com/kb/303247"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://aspnetlibrary.com/&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Library - &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Articles, &lt;B&gt;Code&lt;/B&gt; and Tips &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; Articles, &lt;B&gt;Code&lt;/B&gt; and Tips ... In an asynchronous &lt;B&gt;model&lt;/B&gt;, all the server side ... to use GDI to draw an image or text on your &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;page&lt;/B&gt;&lt;BR&gt;&lt;A HREF="http://aspnetlibrary.com/"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://aspnetlibrary.com/"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73846234222347&amp;setlang=en-US&amp;w=1dd83693,1d4a6bd9"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=software&amp;articleId=9113638&amp;taxonomyId=18&amp;intsrc=kc_feat&gt;Visual Studio 2008 SP1 is icing, and more cake&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... improved IntelliSense and &lt;B&gt;code&lt;/B&gt; ... two ways of creating the data &lt;B&gt;model&lt;/B&gt;: one using LINQ to SQL and the other using the Entity Framework. Check the Dynamic Data in Action section of the official &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;Net&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; ... create routing tables for your &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;Net&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=software&amp;articleId=9113638&amp;taxonomyId=18&amp;intsrc=kc_feat"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=software&amp;articleId=9113638&amp;taxonomyId=18&amp;intsrc=kc_feat"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Computerworld&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/11/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.ddj.com/windows/210600104&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MVC Framework and Routing&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... Castle MonoRail, the &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MVC framework is based on an extremely popular &lt;B&gt;Web&lt;/B&gt; adaptation of the &lt;B&gt;Model&lt;/B&gt;-View ... The ASPX &lt;B&gt;page&lt;/B&gt; has a &lt;B&gt;code&lt;/B&gt;-behind class but usually does all of its work through markup and ASP-style &lt;B&gt;code&lt;/B&gt; blocks. In &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; MVC framework the ... &lt;BR&gt;&lt;A HREF="http://www.ddj.com/windows/210600104"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.ddj.com/windows/210600104"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Dr. Dobb's Portal News&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/8/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.ddj.com/windows/210300284&gt;Building Line-of-Business Apps with Silverlight 2&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... have authentication built into its core, you can easily re-use the &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; authentication &lt;B&gt;model&lt;/B&gt; ... This can be done through a typical &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; login &lt;B&gt;page&lt;/B&gt; which acts as the gateway to ... the service wrapper, you must also enable the service in the &lt;B&gt;web&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://www.ddj.com/windows/210300284"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.ddj.com/windows/210300284"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Dr. Dobb's Portal News&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/3/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.zdnetasia.com/techguide/webdev/0,39044903,62045483,00.htm&gt;Secure &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; sites with Membership API&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... forms-based &lt;B&gt;model&lt;/B&gt;. An issue with these approaches is the amount of development work that's necessary to get them working. In &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0 ... name on the &lt;B&gt;page&lt;/B&gt; ... the following &lt;B&gt;code&lt;/B&gt; snippet shows how the CreateUserWizard control may be used on an &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://www.zdnetasia.com/techguide/webdev/0,39044903,62045483,00.htm"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.zdnetasia.com/techguide/webdev/0,39044903,62045483,00.htm"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Zd Net Asia.com&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/5/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.microsoft.com/windowsserver2008/en/us/whats-new.aspx&gt;What's New&lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... with &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; features and one configuration store for all &lt;B&gt;Web&lt;/B&gt; platform configuration settings across IIS 7.0 and &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt;. A flexible extensibility &lt;B&gt;model&lt;/B&gt; enables customization such as the addition of new modules using either native or managed &lt;B&gt;code&lt;/B&gt;.&lt;BR&gt;&lt;A HREF="http://www.microsoft.com/windowsserver2008/en/us/whats-new.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.microsoft.com/windowsserver2008/en/us/whats-new.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;MSDN Online Deutschland&lt;BR&gt;&lt;B&gt;NewsDateTime: 8/13/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt; The Single-File Page ModelIn the single-file page model, the page's markup and its programming code are in the same physical .aspx file. The programming code is in a script block that contains the attribute runat="server" to mark it as code that ASP.NET should execute.The following code example shows a single-file page containing a Button control and a Label control. The highlighted portion shows the Click event handler for the Button control inside a script block.C#&lt;%@ Page Language="C#" %&gt;&lt;script runat="server"&gt;void Button1_Click(Object sender, EventArgs e){    Label1.Text = "Clicked at " + DateTime.Now.ToString();}&lt;/script&gt;&lt;html&gt;&lt;head&gt;  &lt;title&gt;Single-File Page Model&lt;/title&gt;&lt;/head&gt;&lt;body&gt;  &lt;form runat="server"&gt;    &lt;div&gt;       &lt;asp:Label id="Label1"          runat="server" Text="Label"&gt;       &lt;/asp:Label&gt;       &lt;br /&gt;       &lt;asp:Button id="Button1"          runat="server"          onclick="Button1_Click"          Text="Button"&gt;      &lt;/asp:Button&gt;    &lt;/div&gt;  &lt;/form&gt;&lt;/body&gt;&lt;/html&gt;The scriptblock can contain as much code as the page requires. The code can consist of event handlers for controls on the page (as in the example), methods, properties, and any other code that you would normally use in a class file. At run time, a single-file page is treated as a class that derives from the Page class. The page does not contain an explicit class declaration. Instead, the compiler generates a new class that contains the controls as members. (Not all controls are exposed as page members; some are children of other controls.) The code in the page becomes part of the class; for example, event handlers that you create become members of the derived Page class.Because all code in the page becomes members of the Page class, you cannot have a using statement in your code. Instead, add a @ Import directive that specifies the namespace to import. You might also need to add a reference to the DLL that contains the namespace.For more information, see ASP.NET Page Class Overview. The Code-Behind Page ModelThe code-behind page model allows you to keep the markup in one file—the .aspx file—and the programming code in another file. The name of the code file varies according to what programming language you are using.Note:Not all .NET programming languages allow you to create code-behind files for ASP.NET Web pages. Languages must support partial classes. For example, J# does not support partial classes, and therefore does not support creating code-behind files for ASP.NET pages.For example, if you are working with a page named SamplePage, the markup is in the file SamplePage.aspx and the code is in a file named SamplePage.aspx.vb (for Visual Basic), SamplePage.aspx.cs (for C#), and so on.Note:The code-behind model used in the .NET Framework version 2.0 is different than the one used in earlier versions.In the code-behind model, the example used in the preceding section for the single-file page would be in two parts. The markup would be in one file (in this example, SamplePage.aspx) and would be similar to the single-file page, as shown in the following code example.C#&lt;%@ Page Language="C#" CodeFile="SamplePage.aspx.cs"     Inherits="SamplePage" AutoEventWireup="true" %&gt;&lt;html&gt;&lt;head runat="server" &gt;   &lt;title&gt;Code-Behind Page Model&lt;/title&gt;&lt;/head&gt;&lt;body&gt;  &lt;form id="form1" runat="server"&gt;    &lt;div&gt;       &lt;asp:Label id="Label1"          runat="server" Text="Label" &gt;      &lt;/asp:Label&gt;      &lt;br /&gt;      &lt;asp:Button id="Button1"          runat="server"          onclick="Button1_Click"          Text="Button" &gt;       &lt;/asp:Button&gt;    &lt;/div&gt;  &lt;/form&gt;&lt;/body&gt;&lt;/html&gt;There are two differences in the .aspx page between the single-file and the code-behind models. In the code-behind model, there is no script block with the runat="server" attribute. (The page can contain script blocks without the runat="server" attribute if you want to write client-side script in the page.) The second difference is that the @ Page directive in the code-behind model contains attributes that reference an external file (SamplePage.aspx.vb or SamplePage.aspx.cs) and a class. These attributes link the .aspx page to its code.The code is in a separate file. The following code example shows a code-behind file that contains the same Click event handler as the example for the single-file page.C#using System;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class SamplePage : System.Web.UI.Page{    protected void Button1_Click(object sender, EventArgs e)    {        Label1.Text = "Clicked at " + DateTime.Now.ToString();    }}The code-behind file contains the complete class declarations in the default namespace. However, the class is declared with the partial keyword, which indicates that the class is not contained entirely in one file. Instead, when the page runs, the compiler reads the .aspx page and the file it references in the @ Page directive, assembles them into a single class, and then compiles them as a unit into a single class.The partial class file inherits from the page Page class. &lt;BR&gt;&lt;hr&gt;&lt;br /&gt;&lt;b&gt;Videos from YouTube  &lt;/b&gt; &lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.NET 2.0 Nested GridView&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Screencast,Simple,Gridview,2.0,Example,Howto,Nested,Sample,ASP.NET,&lt;div id="videoQc53ZekBryE"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Qc53ZekBryE&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/22/2007 10:55:45 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; Data Access in the ASP.NET 2.0 Framework&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; 2.0,Walther,Data,Framework,Stephen,Howto,the,Access,Windows,Programming,in,ASP.NET,&lt;div id="videoAAHWfZG4Yj4"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AAHWfZG4Yj4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 10/25/2007 7:32:57 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; ASP.Net (VB.Net) Session Variable ArrayList - Shalvin&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Tech,VB.Net,Shalvin,.Net,Session,ArrayList,Microsoft,Variable,&lt;div id="videoFlYlPCfMuas"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FlYlPCfMuas&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 2/2/2008 10:58:58 PM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; asp asp.net programacion tutorial master pages c#&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; c#,video,pages,asp.net,Film,master,tutorial,asp,programacion,&lt;div id="videoNR1Z_ubzBUc"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NR1Z_ubzBUc&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 11/3/2006 8:19:39 AM&lt;br /&gt;&lt;b&gt;Title:&lt;/b&gt; AJAX Y ASP.NET&lt;br /&gt;&lt;b&gt;Categories:&lt;/b&gt; Howto,AJAX,ASP.NET,&lt;div id="videoWr1lSKDGX6Q"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wr1lSKDGX6Q&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Published on:&lt;/b&gt; 5/26/2007 2:39:34 PM&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/207196128400825675-18199923327661082?l=webforms35.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webforms35.blogspot.com/feeds/18199923327661082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=207196128400825675&amp;postID=18199923327661082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/18199923327661082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/207196128400825675/posts/default/18199923327661082'/><link rel='alternate' type='text/html' href='http://webforms35.blogspot.com/2008/09/aspnet-web-page-code-model.html' title='ASP.NET Web Page Code Model'/><author><name>Iggy Mwangi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-lhy9lVllDBU/AAAAAAAAAAI/AAAAAAAABh8/tJt2xu1ZM_I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-207196128400825675.post-1991931109122989583</id><published>2008-09-18T23:34:00.001-05:00</published><updated>2008-09-18T23:34:53.259-05:00</updated><title type='text'>ASP.NET Web Page Syntax </title><content type='html'>&lt;HTML&gt;&lt;BODY&gt;ASP.NET Web pages are created in a manner similar to static HTML Web pages (pages that do not include server-based processing), but they include extra elements that ASP.NET recognizes and processes when the page runs. The characteristics that distinguish ASP.NET Web pages from static HTML (or other) pages are as follows:A file name extension of .aspx instead of .htm, .html, or other file name extensions. The .aspx file name extension causes the page to be processed by ASP.NET.Note:The mapping of file name extensions to ASP.NET is done in Internet Information Services (IIS). By default, .aspx pages are run by ASP.NET and .htm and .html pages are not.An optional @ Page directive or other directive, as appropriate to the type of page that you are creating.A form element that is configured correctly for ASP.NET. The form element is required only if the page contains controls whose values you want to use during page processing.Web server controls.Server code, if you add your own code to the page.Note:If you want your pages to conform to XHTML standards, you must include additional elements, such as a DOCTYPE element. For details, see ASP.NET and XHTML.&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://msdn.microsoft.com/en-us/library/k33801s3.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;Page&lt;/B&gt; &lt;B&gt;Syntax&lt;/B&gt; Overview &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;pages&lt;/B&gt; are created in a manner similar to static HTML &lt;B&gt;Web&lt;/B&gt; &lt;B&gt;pages&lt;/B&gt; (&lt;B&gt;pages&lt;/B&gt; that do not include server-based processing), but they include extra elements that &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/k33801s3.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://msdn.microsoft.com/en-us/library/k33801s3.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73751236139578&amp;setlang=en-US&amp;w=341603a2,57594f59"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://quickstarts.asp.net/QuickStartv20/aspnet/doc/pages/syntax.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; QuickStart Tutorials &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;&lt;B&gt;Web&lt;/B&gt; Forms &lt;B&gt;Syntax&lt;/B&gt; Reference An &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; Forms &lt;B&gt;page&lt;/B&gt; is a declarative text file with an .aspx file name extension. In addition to static content, you can use eight distinct &lt;B&gt;syntax&lt;/B&gt; ... &lt;BR&gt;&lt;A HREF="http://quickstarts.asp.net/QuickStartv20/aspnet/doc/pages/syntax.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://quickstarts.asp.net/QuickStartv20/aspnet/doc/pages/syntax.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73903255849288&amp;setlang=en-US&amp;w=99df314b,a584bf00"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.asp.net/QuickStart/aspnet/doc/pages/default.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; QuickStart Tutorials &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... site navigation, and WebPart controls allow you to easily create personalized &lt;B&gt;web&lt;/B&gt; &lt;B&gt;pages&lt;/B&gt;. New Declarative Expression &lt;B&gt;Syntax&lt;/B&gt; - The declarative expression &lt;B&gt;syntax&lt;/B&gt; in &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; 2.0 ... &lt;BR&gt;&lt;A HREF="http://www.asp.net/QuickStart/aspnet/doc/pages/default.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.asp.net/QuickStart/aspnet/doc/pages/default.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73907903399167&amp;setlang=en-US&amp;w=88c1db84,7018078e"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://authors.aspalliance.com/aspxtreme/aspnet/syntax/aspnetpagesyntax.aspx&gt;&lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Page&lt;/B&gt; &lt;B&gt;Syntax&lt;/B&gt; &lt;/a&gt; &lt;/B&gt;&lt;BR&gt;A workshop on .NET applications design and development. Step-by-step how-to &lt;B&gt;pages&lt;/B&gt; help you learn skills and do specific tasks as you plan, build and manage your &lt;B&gt;Web&lt;/B&gt; app, from start ... &lt;BR&gt;&lt;A HREF="http://authors.aspalliance.com/aspxtreme/aspnet/syntax/aspnetpagesyntax.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://authors.aspalliance.com/aspxtreme/aspnet/syntax/aspnetpagesyntax.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73823373625524&amp;setlang=en-US&amp;w=63f88740,fa25dfc6"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;a href=http://www.actiprosoftware.com/Products/DotNet/ASPNET/CodeHighlighter/Default.aspx&gt;Actipro CodeHighlighter - Freeware Code &lt;B&gt;Syntax&lt;/B&gt;-Highlighter &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; ... &lt;/a&gt; &lt;/B&gt;&lt;BR&gt; ... Text property) and in the rendering phase of its &lt;B&gt;web&lt;/B&gt; &lt;B&gt;page&lt;/B&gt; it outputs the code in &lt;B&gt;syntax&lt;/B&gt; ... Flexible &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;NET&lt;/B&gt; &lt;B&gt;web&lt;/B&gt; control inferface that &lt;B&gt;syntax&lt;/B&gt; highlights source code; Code can be added ... &lt;BR&gt;&lt;A HREF="http://www.actiprosoftware.com/Products/DotNet/ASPNET/CodeHighlighter/Default.aspx"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.actiprosoftware.com/Products/DotNet/ASPNET/CodeHighlighter/Default.aspx"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://cc.msnscache.com/cache.aspx?q=73888949940883&amp;setlang=en-US&amp;w=b13e0edc,28cc59ae"&gt;Cached&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;HR&gt;&lt;B&gt;&lt;a href=http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=software&amp;articleId=9113638&amp;taxonomyId=18&amp;intsrc=kc_feat&gt;Visual Studio 2008 SP1 is icing, and more cake&lt;/a&gt; &lt;/B&gt;&lt;BR&gt;URL Routing lets you create routing tables for your &lt;B&gt;ASP&lt;/B&gt;.&lt;B&gt;Net&lt;/B&gt; &lt;B&gt;Web&lt;/B&gt; sites. This is a feature that was originally ... Instead of having to use HTTP POST or query &lt;B&gt;syntax&lt;/B&gt; to get to a data-dependent &lt;B&gt;page&lt;/B&gt;, or having to do URL rewriting, you can use an ordinary ... &lt;BR&gt;&lt;A HREF="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=software&amp;articleId=9113638&amp;taxonomyId=18&amp;intsrc=kc_feat"&gt;more ...&lt;/A&gt;&lt;BR&gt;&lt;A HREF="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=software&amp;articleId=9113638&amp;taxonomyId=18&amp;intsrc=kc_feat"&gt;go to website&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Source: &lt;/B&gt;Computerworld&lt;BR&gt;&lt;B&gt;NewsDateTime: 9/11/2008&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Example ASP.NET Web PageThe following code example shows a page that includes the basic elements that constitute an ASP.NET Web page. The page contains static text as you might have in an HTML page, along with elements that are specific to ASP.NET. The elements that are specific to ASP.NET are highlighted.Note:For clarity, this example page is not configured for XHTML compliance. For details, see ASP.NET and XHTML.Security Note:This example page contains a text box that accepts user input, which is a potential security threat. By default, ASP.NET Web pages validate that user input does not include script or HTML elements. For more information, see Script Exploits Overview.C#&lt;%@ Page Language="C#" %&gt;&lt;html&gt;&lt;script runat="server"&gt;void Button1_Click(object sender, System.EventArgs e) {    Label1.Text = ("Welcome, " + TextBox1.Text);}&lt;/script&gt;&lt;head runat="server"&gt;  &lt;title&gt;Basic ASP.NET Web Page&lt;/title&gt;&lt;/head&gt;&lt;body&gt;  &lt;form id="form1" runat="server"&gt;    &lt;h1&gt;Welcome to ASP.NET&lt;/h1&gt;    &lt;p&gt;Type your name and click the button.&lt;/p&gt;    &lt;p&gt;      &lt;asp:TextBox ID="TextBox1" runat="server"&gt;&lt;/asp:TextBox&gt;      &lt;asp:Button ID="Button1" runat="server"         Text="Click" OnClick="Button1_Click" /&gt;    &lt;/p&gt;    &lt;p&gt;      &lt;asp:Label ID="Label1" runat="server"&gt;&lt;/asp:Label&gt;    &lt;/p&gt;  &lt;/form&gt;&lt;/body&gt;&lt;/html&gt; @ DirectivesASP.NET pages usually contain directives that allow you to specify page properties and configuration information for the page. The directives are used by ASP.NET as instructions for how to process the page, but they are not rendered as part of the markup that is sent to the browser.The most commonly used directive is the @ Page directive, which allows you to specify many configuration options for the page, including the following:The server programming language for code in the page.Whether the page is a page with server code directly in the page, which is called a single-file page, or whether it is a page with code in a separate class file, which is called a code-behind page. In the previous example, the page is a single-file page; the code is directly in the page, and the @ Page directive does not include information about linked class files. For more information, see the "Server Code" section later in this topic, and see ASP.NET Web Page Code Model.Debugging and tracing options.Whether the page has an associated master page and should therefore be treated as a content page.If you do not include an @ Page directive in the page, or if the directive does not include a specific setting, settings are inherited the from the configuration file for the Web application (the Web.config file) or from the site configuration file (the Machine.config file).In addition to including an @ Page directive, you can include other directives that support additional page-specific options. Other common directives include the following:@ Import   This directive allows you to specify namespaces that you want to reference in your code.@ OutputCache   This directive allows you to specify that the page should be cached, along with parameters for when and how long to cache the page.@ Implements   This directive allows you to specify that the page implement a .NET interface.@ Register   This directive allows you to register additional controls for use on the page. The @ Register directive declares the control's tag prefix and the location of the control's assembly. You must use this directive if you want to add user controls or custom ASP.NET controls to a page.Certain types of ASP.NET files use a directive other than @ Page. For example, ASP.NET master pages use an @ Master directive, and ASP.NET user controls use an @ Control directive. Each directive allows you to specify different options that are appropriate for the file.For details, see ASP.NET Master Pages Overview and ASP.NET User Controls. Form ElementsIf your page includes controls that allow users to interact with the page and submit it, the page must include a form element. You use the standard HTML form element, but certain rules apply. The rules for using the form element are as follows:The page can contain only one form element.The form element must contain the runat attribute with the value set to server. This attribute allows you to refer to the form and the controls on the page programmatically in server code.Server controls that can perform a postback must be inside the form element.The opening tag must not contain an action attribute. ASP.NET sets these attributes dynamically when the page is processed, overriding any settings that you might make. Web Server ControlsIn most ASP.NET pages, you will add controls that allow the user to interact with the page, including buttons, text boxes, lists, and so on. These Web server controls are similar to HTML buttons and input elements. However, they are processed on the server, allowing you to use server code to set their properties. These controls also raise events that you can handle in server code.Server controls use a special syntax that ASP.NET recognizes when the page runs. The following code example shows some typical Web server controls.Security Note:A TextBox accepts user input, which is a potential security threat. By default, ASP.NET Web pages validate that user input does not include script or HTML elements. For more information, see Script Exploits Overview.C#&lt;asp:TextBox ID="TextBox1" runat="server"&gt;&lt;/asp:TextBox&gt;&lt;asp:Button ID="Button1" runat="server"     Text="Click" OnClick="Button1_Click" /&gt;The tag name for ASP.NET server controls starts with a prefix — in this case, asp:. The prefix might be different if the control is not part of the .NET Framework. ASP.NET server controls also include the runat="server" attribute and, optionally, an ID that you can use to reference the control in server code.When the page runs, it identifies the server controls and runs the code that is associated with those controls. Many controls render some HTML or other markup into the page. For example, the asp:textbox control renders an input element with the type="text" attribute into a page. However, there is not necessarily a one-to-one mapping between a Web server control and an HTML element. For example, the asp:calendar control renders an HTML table. Some controls do not render anything to the browser; instead, they are processed on the server only, and they provide information to other controls.HTML Elements as Server ControlsInstead of, or in addition to, using ASP.NET server controls, you can use ordinary HTML elements as server controls. You can add the runat="server" attribute and an ID attribute to any HTML element in the page. When the page runs, ASP.NET identifies the element as a server control and makes it available to server code. For example, you can add the required elements to an HTML body element, as shown in the following code example.&lt;body runat="server" id="body"&gt;You can then reference the body element in server code — for example, to set the body background color at run time in response to user input or to information from a database.For more information, see ASP.NET Web Server Controls Overview. Server CodeMost ASP.NET pages include code that runs on the server when the page is processed. ASP.NET supports many languages including C#, Visual Basic, J#, Jscript, and others.ASP.NET supports two models for writing server code for a Web page. In the single-file model, the code for the page is in a script element where the opening tag includes the runat="server" attribute. The example earlier in this topic shows the single-file model.Alternatively, you can create the code for the page in a separate cl
