Web Servers in Visual Studio for ASP.NET Web Projects

When you develop web projects in Visual Studio, you need a web server to test or run them. Visual Studio lets you test with different web servers, including IIS Express, Internet Information Services (IIS), External Hosts, or Custom Web Servers. You can use any of these web servers with a file-based web application project. For a file-based web site project, you can use IIS Express. This topic describes each of the web servers and how to select a web server for testing.

The following table provides summary guidance for choosing a web server in Visual web Developer.

Web server

When to use

IIS Express

IIS Express is the default web server for web application projects in Visual Studio 2012 and Visual Studio 2013, and it is recommended for both web application projects and web site projects.

Visual Studio 2013 adds support for specifying custom Web servers in your projects; this functionality enables developers to define the environment for testing their Web applications.

IIS Express is designed to emulate IIS, but minor differences between IIS Express and the full version of IIS may result in errors that occur only after you have deployed your website to a production version of IIS. For more information, see Disadvantages of Using IIS Express later in this topic. If you use IIS Express, it is recommended that you test your application on a staging server that uses the target version of IIS before deploying it to a live site.

IIS Express includes many of the features of IIS 7 and IIS 8 web servers without requiring you to install and manage IIS on your computer. Because IIS Express is similar to IIS 7 and IIS 8, it lets you transition web sites to IIS more smoothly than using other Web servers.

IIS Express offers the following features:

It supports and enables the same extensibility model and Web.config file settings as IIS 7 and IIS 8.

It does not require changes in your web application code.

It can be installed side-by-side with the full version of IIS and other web servers. You can choose a different web server for each project.

In corporate environments, IIS Express offers the following features:

It does not require an administrator account in order to run or debug applications.

It does not serve requests to a browser on another computer, making its approval easier in corporate environments.

It can be installed on versions of Windows that do not support IIS 7 or IIS 8.

IIS Express is installed automatically when you install Visual Studio 2012 and Visual Studio 2013. If you want to install IIS Express in Visual Studio 2010 (SP1 is required), you can use the Microsoft Web Platform Installer.

To install IIS Express

IIS Express starts automatically when you run a project in Visual Studio, and it stops when you close the web site project or web application project in Visual Studio. When IIS Express is running, it displays an icon in the system tray, as shown in the following illustration.

The following table lists typical tasks for IIS Express and how to perform them.

Task

Steps

Display a list of all sites that are running on IIS Express

Right-click the IIS Express icon in the system tray, and then click Show All Applications.

View a web site directory location, configuration path, and .NET Framework version

Select the web site in the IIS Express window. The information will appear beneath the list of web sites.

Stop IIS Express

Right-click the tray icon and select Exit.

Note

In most cases, you do not have to shut down IIS Express manually. However, if you are using SQL Server Express, you might have to stop IIS Express manually before you can access a SQL Server Express .mdf file (for example, from SQL Server Management Studio).

When you create a new file-based web site or web application project, a random port is selected for the project. For example, if you are testing a page called ExamplePage.aspx, when you run it on IIS Express, the URL of the page might be:

http://localhost:31544/ExamplePage.aspx

If you want to run IIS Express on a specific port, you can configure the server to do so. You might do this in these scenarios:

You have copied a web application project or web site project and you want to debug and work on both simultaneously. In that case you will have a port collision and will need to change the port number for one of the projects.

Your project includes a reference to a client project or web service that is bound to a specific port.

The code in your project listens to a specific port and you want to be able to test the application using IIS Express.

If your code references root-level resources such as CSS and JavaScript files without specifying that they are at the project root level, the application might work correctly when you test in Visual Studio but fail when you deploy it to IIS in production. Depending on how IIS is configured, a failure could happen in production because IIS may look for root level resources in the root of the IIS web site. For example, if you create a new MVC project in Visual Studio, you’ll find this line of code in the Views\Shared\_Layout.cshtml file:

The tilde (~) specifies that this resource is at the root level of the application. If you remove the tilde and run the application in Visual Studio with IIS Express, you see no change in the application appearance:

But when you deploy to IIS (or select IIS as the development web server in Visual Studio), you may see that CSS styling is lost because IIS can’t find the resource:

An important difference between the development servers in Visual Studio and IIS is the security context in which the servers run your ASP.NET pages. This difference can be a source of problems when you deploy a web site or web application to run on IIS.

When you run a page using IIS Express, the page runs in the context of your current user account. For example, if you are running as an administrator-level user, a page running in IIS Express will have administrator-level privileges. In contrast, in IIS 7 and IIS 8, ASP.NET runs as an account that has limited privileges by default. For more information, see Application Pool Identities on the IIS.net web site.

If you are simply reading and running the code in ASP.NET pages, this difference is not very important. However, the different security contexts for the two web servers can affect your testing in several ways:

Database access When you work with IIS Express, you can typically use Windows Integrated authentication to access SQL Server. However, when the same page runs in IIS, the page will be running in the context of the application pool identity. You can either use SQL Server authentication instead or add the application pool identity that the page runs under as a SQL Server login. For more information, see Accessing SQL Server from a Web Application, ASP.NET Security Architecture, and Application Pool Identities.

Code access security If your page runs in medium trust (as most web hosting providers require), the page might run differently under the server in Visual Studio than it does in IIS.

Access to other resources that the page requires This can include reading and writing files other than web pages, reading and writing the Windows registry, and so on.

Visual Studio 2013 allows you to configure an external web server for testing, and this feature was called a Custom Web Server in Visual Studio 2012 and earlier versions of Visual Studio. There are several advantages that are available to developers when they configure their Web applications to use an external host for testing, and these will be discussed in the following sections.

For example, if the files for your Web application are stored in a network share that is also the content folder for a website that is hosted by IIS on a development or staging Web Server, you could enter the URL for that website as the external host. This scenario allows for additional clients to test the application, which would not be possible with IIS Express because it is designed for testing on your local computer.

Because an external host server is typically on a remote server, your application is not rebuilt every time that you press F5 to start debugging. This allows you to ignore build errors in source files that are still in development while still being able to test the parts of your application that have been completed.

In addition, because your remote Web server may be running as a service, your application testing may appear to have more immediate reaction time because the website will already be running. In contrast, IIS Express might need to be restarted each time that you press F5 to debug your application.

Because the web server is remote, you may have difficulty configuring your debugging experience in a way that emulates a local web server. For example, your remote web server may have authentication settings that prevent Visual Studio from connecting to your Web application as a debugger, so if you were to add Debugger.Break() statement to your code, you would receive an HTTP 401 "Access Denied" message when that statement was reached.

Visual Studio 2013 allows developers to add custom web servers to their projects, and Visual Studio will display these custom web servers in the drop-down menu along with the built-in Web server types. For more information about configuring custom web servers, see http://go.microsoft.com/fwlink/?LinkID=324006.

The production web server for Microsoft operating systems is IIS, which can include a web server, File Transfer Protocol (FTP) server, Simple Mail Transfer Protocol (SMTP) virtual email server, and other facilities. In order to run IIS, you must be working with one of the versions of Windows that is listed in the following table.

Working directly with IIS as your development web server lets you work in an environment closer to that of an IIS production web server. This can help you solve configuration problems before your project goes live. If you use IIS Express, the transition to an IIS production web server might require you to perform extra configuration tasks because of the different security contexts between test and production servers.

Using IIS as a development server can require more setup and configuration tasks in order to work with Visual Studio than using IIS Express, including the following:

Both IIS and ASP.NET must be enabled in Windows, and ASP.NET must be registered with Windows. (Registration is a separate step if you installed the .NET Framework first, and then enabled IIS. For more information, see ASP.NET IIS Registration Tool (Aspnet_regiis.exe).)

You must run Visual Studio as an administrator in order to work with IIS.

In addition, it might be impractical for you to work with IIS if any of the following apply:

Your corporate workplace policy does not allow server roles like IIS to be enabled on developer computers.

Your corporate workplace policy does not allow developers to have administrator accounts on IIS.

You are developing ASP.NET web pages while working with a Home Edition of Windows, which does not support IIS.

You do not want to host a web server on your computer (for example, on your home network) for security reasons.

Your web project uses a SQL Server Express LocalDB database. For more information, see Using LocalDB with Full IIS on the SQL Server Express blog.