Hosting Considerations for MVC3 | CodeGuru

Hosting Considerations for MVC3

MVC3 is taking the web application development world by storm and new projects are spinning up everywhere. Unfortunately as with any new technology if you’re not aware of the implications of today’s decisions in development on tomorrows deployment to a production web server you’ll find yourself in a world of hurt. URL References During the […]

Written By
CodeGuru Staff
CodeGuru Staff
Mar 31, 2011
4 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

MVC3 is taking the web
application development world by storm and new projects are spinning up
everywhere. Unfortunately as with any new technology if you’re not aware of the
implications of today’s decisions in development on tomorrows deployment to a
production web server you’ll find yourself in a world of hurt.

URL References

During the development
process, you will probably hit F5 hundreds of times and see your MVC3
application running inside of ASP.NET‘s
debugging web server Cassini.
When you launch your application in Canssini you will see a URL like, "http://localhost:18048/Home/Index"
and your MVC3 routes will be appended directly on the end of that URL.

In a real world
environment, your application is likely to be deployed to a virtual directory
on a production web server, resulting in your URL being pre-appended with the
name of your virtual directory like
"http://www.yoursite.com/YourDirectory/Home/Index". Even if you plan
on having your MVC3 application take over the root of the URL, at some
point in the future your application could just be a sub-directory of another
application. With this in mind, it is very important to always use the tilde
"~" virtual root reference consistently throughout your application.

@Url.Content("~/Content/Images/Logo.png")

For links to controllers
and actions in your application, always use the @Url.Action function.

If you need to get the
virtual root in JavaScript for some client side URL building, you can set a
variable on the document object to be available to all of your scripts by
mixing a little server side and client side code.

document.VirtualRoot = '@Url.Content("~/")';

Get Into IIS Early and Often

It’s helpful to set up a
virtual directory on your local machine’s IIS server to test your application
in frequently so you can find broken virtual root references early in your
develop cycle instead of later, when your application is hosted in a different
sub-directory.

Configuring your
application in IIS early on also can help you more efficiently test and debug a
large application. For example, if you’re working on a web page that you have
to login and navigate 5 links to get to, hosting in IIS will allow you to just
refresh the browser window. If you’re running your application through F5
you’ll have to re-login and navigate back to your page every time.

Advertisement

How to Host MVC3/Razor in a .NET 4.0 Host

MVC3
is currently in release candidate 2 status and as such there aren’t any hosting
providers that provide out-of-the-box support for MVC3 or Razor.
Even once MVC3 goes final, many hosting providers won’t have it
installed on the server for some time.

When you install MVC3,
it is installed in the global assembly cache (GAC) of your machine and is then
referenced by Visual Studio.NET 2010 through the GAC by default. Long
term, this is good behavior as .NET framework pieces are shared across a
server. Short term this is bad because your hosting provider is not likely to
have the MVC3 DLLs in place to run your application.

In order to include the MVC3
DLLs to build inside of your application, expand out the references node and
set the "Copy Local" property to true for System.Web.Mvc,
System.Web.WebPages and System.Web.Helpers. Setting this property will make the
build process copy these DLLs to your application’s /bin folder instead of
using the version in the GAC.

In order to include the MVC3
DLLs to build inside of your application, expand out the references node and
set the "Copy Local" property to true for System.Web.Mvc. Setting
this property will make the build process copy these System.Web.Mvc version 3
DLL to your application’s /bin folder instead of using the version in the GAC.

Publish your web site
which will build it and remove the source code files that are compiled into the
finished site and put it into a directory intended to be xcopy deployed. You do
this by choosing Build->Publish in Visual Studio.NET 2010. In the
dialog that appears, choose "File System" as the publish method and
pick a directory on your local disk for it to copy the files to.

Next, you will need to
copy the DLLs that MVC3 would typically want to access from the global assembly
cache to your published application’s /bin folder.

In order to get full Razor
support in an MVC3 application being deployed to a vanilla .NET 4.0
framework
server, you will need to manually copy a few DLLs that you don’t
reference directly in your project but are instead referenced by DLLs you do
reference. As such, it’s easier to just copy the following five DLLs from
C:Program Files (x86)Microsoft ASP.NETASP.NET Web Pagesv1.0Assemblies to your
published application’s /bin folder.

  • Microsoft.Web.Infrastructure.dll
  • System.Web.Helpers.dll
  • System.Web.Razor.dll
  • System.Web.WebPages.dll
  • System.Web.WebPages.Razor.dll

Once you’ve copied your
dlls into your published ASP.NET site, you are ready to upload your
published folder to your .NET 4.0 web host. It is important to note that MVC3
requires medium-trust to work correctly, which should not be a problem for most
shared web hosts but as with anything that is configurable, there is a chance
your hosting provider might have key permissions disabled. Always test before
taking down your current production instance!

Conclusion

With a little planning
your first MVC3/Razor deployment can go without any headaches. You can deploy
it today on any .NET 4.0 equipped web server and soon as more web hosts support
MVC3 out of the box it will go even easier.

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.