Read all of ASP.NET MVC 2 in Action now while you wait for the printed book

image First, you should place your advance order for ASP.NET MVC 2 in Action at  That way, you will receive the printed book even before you see it at your local bookstore. 

The entire book is finished, and we are just moving through production right now.  But that doesn’t mean you have to wait to read it and learn about ASP.NET MVC 2.  Since the beginning of the book project, you have been able to see the progression of the book on GitHub, our project site and version control system.  That’s right, version control is for more than just code!

Head over to and go to the “manuscript” folder to read the entire book in Word document form.  All the content is there.  In fact, the Word documents for the 1st edition is there as well.  You can see just how much we have expanded the 2nd edition to not only cover version 2 but also to incorporate lessons learned using the framework over the last 2 years.

Creative Commons LicenseYou will notice that the raw files in GitHub are released under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.  That means you can use the content in blog posts, whitepapers, and you can use the code samples in any way you like.  The only restriction, really, is that you have to give us credit if you republish portions of it (and you can NOT republish the full work, of course), and you can’t resell our work.  Other than that, use it the best way you can.  We hope it is a great learning tool for you, and we hope that releasing the raw files early help you get a jump-start learning about ASP.NET MVC 2.


Authors:  Jeffrey Palermo, Ben Scheirman, Jimmy Bogard, Eric Hexter, Matt Hinze 

Technical Editor:  Jeremy Skinner 

Foreword:  Phil Haack

P.S.  I wish I could say that we are pioneers in this, but I have personally benefited from two others I know about who have worked on their books “out in the open”:

Automating ASP.NET MVC deployments using Web Deploy

The following is an excerpt from ASP.NET MVC 2 in Action, a book from Manning to be in bookstores in May.  The early access (MEAP) edition is available now on  Authors include Jeffrey Palermo, Ben Scheirman, Jimmy Bogard, Matt Hinze.  Technically edited by Jeremy Skinner.

17.4 Enabling remote server deployments with Web Deploy

After getting a deployment script that can set up your application and database, the next step is to take on the challenge of pushing deployments to multiple servers. The key takeaway is that by automating the task of deployment, you can eliminate all the manual steps that are prone to errors.

In order to eliminate the need to log on to servers one by one, an additional technology is needed. This is where the Web Deployment Tool (formerly named MSDeploy) comes into play. You can download it from This tool provides a host of features and functions, , but the features most important for our deployment approach are

  • The ability to sync files over HTTP
  • The ability to execute a remote command

These features support both enterprise and hosted environments, and the scripts can be used for both preproduction environments and production environments.

Typically, for web applications, there will be a development server that hosts the web application and database on the same machine. The quality assurance (QA) environment may be set up the same way. Then, in the staging and production environments, more servers come into play. There may be a separate database server, multiple web servers, and even an application server. Automating a deployment to multiple machines can become complex very quickly. In order to reduce the complexity, Web Deploy can be used to sync files to multiple machines and execute the deployment script on each server. It can also run remotely so that deployments execute the same way that they would in the development environment.

Listing 17.4 shows the command-line arguments used to copy deployment files from a build server to a web server and then run the deployment.

Listing 17.4 Using Web Deploy to remotely execute a deployment

msdeploy.exe  -verb:sync -source:dirPath=deploymentFiles               |#1
-dest:dirPath='c:installs',computername=                  |#1

msdeploy.exe  -verb:sync                                               |#2
  -source:runCommand='c:installsdev.bat'                             |#2 
  -dest:auto,computername=                                 |#2
#1 Copy files to remote server
#2 Execute command on remote server

.csharpcode, .csharpcode pre
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
background-color: #f4f4f4;
width: 100%;
margin: 0em;
.csharpcode .lnum { color: #606060; }

First, msdeploy.exe is called with the sync verb specifying a source directory on the local machine (#1). This command copies all the files inside the deploymentFiles directory (C:installs) to the remote server (in this case, the computer with the IP address

Next, msdeploy.exe is called with the sync verb, but this time the runCommand argument is specified (#2). This means that Web Deploy will execute the batch file at c:installsdev.bat on the remote server in the same way you would run it if you logged in via remote desktop.

Using a technology like Web Deploy can greatly simplify a complex deployment. By running each command locally on each server in the deployment, scripts will run consistently from the development environment through the production environment. The real advantage is that the calls to msdeploy.exe can be scripted, which means that a multiserver deployment can be totally automated and repeatable. Scripting this type of deployment also means that from a single machine you can monitor a deployment and see the results of each script consolidated on your desktop.

17.5 Summary

When we configure our environment, we must devise a reliable deployment strategy to ensure that the right application is deployed with the correct configuration. At the heart of a solid deployment strategy is continuous integration, which includes practices such as automated deployments and self-testing builds.

With free, widely used open source tools such as CruiseControl.NET, NAnt, NUnit, and others, we can create an automated build and deployment server. By packaging NAnt, a build script, and a bootstrap batch file, we can harness the flexibility and power of NAnt to deploy and configure our application to multiple environments, up to and including production. By layering on the Web Deploy tool to reduce the friction of copying and executing the build scripts across multiple servers, we can have a totally automated solution that’s repeatable and reliable.

Headspring’s MVC Boot Camp now covers MVC 2 – April 21, 22, 23

Sign up here for Headspring popular boot camp class.  The April boot camp cover ASP.NET MVC (version 1 and 2).  Jimmy Bogard, principal consultant and author, is the trainer for this class, and Jeffrey Palermo (me) is the assistant trainer.  If you employer sends 3 or more there is a discount, so be sure to ask about that.

This is a very hands-on class, hence the name “boot camp”.  Your brain will be fatigued at the end of every day.  The material comes directly from how Headspring uses ASP.NET MVC while delivering client projects.  No theory here – only practice., or call (877) 459-2260.

More info below:

Developers can easily leverage the Model-View-Controller pattern in ASP.NET applications. Pulling logic away from the UI and the views has been difficult within custom application development for a long time. The Model-View-Presenter pattern helps a little bit, but the fact that the view has to delegate to the presenter makes the UI pattern difficult to work with.

Headspring has been using ASP.NET MVC since the original prototype and has presented on the topic at local conferences as well as Microsoft TechEd. Headspring employees are responsible for a book on ASP.NET MVC, as well as MVC Contrib, CodeCampServer, and several community Solution Templates. This boot camp offers the opportunity to share the experience using the ASP.NET MVC Framework on real-world systems. The class is run in our "boot camp" style where we move quickly and deeply through the topics at hand. The class is three days, and a lot of information is packed into those three days. Instead of written labs and individual exercises, the class will work together as a simulated development team and extend an existing application using the techniques learned. The students will work together and learn from each other as well as the instructor.

Topics are separated by day based on student experience and class speed and will be approached using C# as the scripting language of choice.

Instructors for the ASP.NET MVC Boot Camp™ are Jeffrey Palermo and Jimmy Bogard, two of the authors of ASP.NET MVC in Action.


  • History/Overview of ASP.NET MVC
  • Separated solution structure
  • Basic & customized routes
  • Customized route handlers
  • Controller selection
  • customized controller factories
  • Controller & Action patterns & anti-patterns
  • Read-only views
  • Data-entry views
  • Presentation Model
  • Advanced ActionResults
  • Action filters and ActionFilterAttribute
  • Server-side validation
  • JQuery integration
  • Deployment and installation
  • Advanced View Helpers
  • T4 Templating
  • Connecting with data access, messaging, etc.

Onsite Training Available:

For companies that want to maximize their programming teams, Headspring Systems can create training courses customized to meet your needs. For more contact us at