Rick Strahl's Weblog
Rick Strahl's FoxPro and Web Connection Weblog
White Papers | Products | Message Board | News |

Using IIS Express with West Wind Web Connection


December 10, 2012 •

One of the complaints that I hear a lot of when it comes to Web development on Windows is that IIS configuration is difficult, especially on a local development machine. IIS is a pretty hefty application that doesn't install in Windows by default so there's a bit of effort involved in setting up IIS and adding the appropriate options to it. In Web Connection 5.65 and later we've added direct support for IIS Express as part of the installation process.

A couple of years ago Microsoft released IIS Express, which is a standalone, installable version of IIS, that's very compact and can be run from the Windows Command Line. Unlike the Cassini/Visual Studio Web Server that came before it, IIS Express is 95% feature compatible with the full version of IIS and is based on the same code base. It includes all the core functionality including features like most of the security protocols (Windows Auth, Basic Auth) and support for ISAPI extensions. But most importantly IIS Express can run without Administrative rights and it doesn't require extensive installation or configuration.

Here are some of the features of IIS Express:

  • Doesn't require a full installation of IIS.
  • Can run without the need for administrative privileges.
  • Is manually launched and shut down via Command Line - no Service running.
  • Doesn't expose any remote connections by default.
  • Runs on all Windows XP and later versions of Windows including Home and Starter editions.
  • Is a full featured implementation of the full IIS Server functionality.
  • Supports ISAPI operation, Windows and Basic Security (unlike the Cassini server)
  • Is a small downloadable package that installs quickly (<5 megs)
  • Works with Web Connection with the .NET Handler (WebConnectionModule.dll) and classic ISAPI (wc.dll)

In essence IIS Express includes all the features required to run just about any Web application, including Web Connection applications from a small standalone server.

Getting IIS Express

IIS Express is a simple and small downloadable package you can grab from Microsoft from this URL:

IIS Express 7.5 (Windows XP,2003)
http://www.microsoft.com/en-us/download/details.aspx?id=1038

IIS Express 8.0 (Windows Vista, 7, 2008, 8)
http://www.microsoft.com/en-us/download/details.aspx?id=34679

Additionally IIS Express also requires .NET 4.0. If you don't have it already installed (Windows 8 ships with it and many application use .NET 4.0). A typical install is about a 25 meg download. The Web Installer checks what's on your system and downloads only what it needs and it doesn't require a reboot.

NET 4.0 Download
http://www.microsoft.com/en-us/download/details.aspx?id=17851

Using IIS Express with Web Connection

IIS Express is a standalone executable that can be launched from the Windows command line. Web Connection includes some helpers that let you launch directly it from within FoxPro. The easiest way is from the Web Connection menu:

DO WCSTART

to start the Web Connection menu in the Visual FoxPro IDE. Then click on Web Connection | Start IIS Express Standalone Web Server:

WebConnectionMenu

This brings up a dialog that lets you select a path and port for the server:

IISExpressDialog

You can also launch IIS Express from FoxPro via a Web Connection Console command programmatically:

DO console WITH "LAUNCHIISEXPRESS","c:\westwind\wconnect",8080

This means you can easily launch IIS Express under program control to point at your site, maybe on startup of your app when in debug mode or via some other metric (environment reset etc).

Once launched you can then access your Web site simply via this Url:

http://localhost:8080/

or to access a specific page:

http://localhost:8080/testpage.wwd

Note that IIS Express always launches as a root site, rather than in a virtual directory. So if you were testing a site like http://localhost/wconnect/default.htm in IIS before the new URL now will be a root site url at http://localhost:8080/default.htm. If you are using script map extensions and relative paths in your applications as you always should, this shouldn't affect your site's operation in any way. If it does cause problems, it's a good indicator that your URLs could use some adjustment to make them more portable and always work with relative paths (hint, hint).

Here's another tip: If you don't have any Web Server installed on your machine at all, you can just use port 80 for your site, which then lets you omit the port number on the URL. So your URL with port 80 simply becomes:

http://localhost/testpage.wwd

which is a little cleaner and easier to remember.

Configuration for IIS Express in Web Connection

When running IIS Express you'll want to use the .NET Handler for configuration. This is to ensure that your script installations are portable and can work out of any folder even if your app moves.

If you install Web Connection from scratch, or you use any of the Wizards to create a new Application, Process class or the Server Configuration Wizard, Web Connection offers a pre-configured option for IIS Express:

IIS Express Configuration

This option automatically configures the site for using the .NET Managed Handler for any script maps that are created. Specifically it creates entries like this in the web.config file:

<configuration>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <!-- Web Connection Module in IIS 7 in Integrated Mode -->
      <add name=".wc_wconnect-module" path="*.wc" verb="*" 
type="Westwind.WebConnection.WebConnectionHandler,WebConnectionModule" preCondition="integratedMode" /> <add name=".wcsx_wconnect-module" path="*.wcsx" verb="*"
type="Westwind.WebConnection.WebConnectionHandler,WebConnectionModule" preCondition="integratedMode" />
… </handlers> </system.webServer> </configuration>

These are mappings to the Web Connection .NET Handler that are portable and allow the scriptmaps to be valid even if the site is moved to a new location on disk or on another machine. IIS 7 and later uses .NET natively so using the .NET handler is very efficient and additionally provides many performance and administration enhancements over the classic ISAPI module. When running IIS 7 and later in general we recommend using the .NET handler.

Administration - where does the Configuration come from?

IIS Express is a local Web Server and gets all of its settings from configuration files stored in your user profile, rather than in any system store that might require administrative rights. When launching IIS Express from Web Connection as described above, Web Connection uses an Application.config template from <WWWC install folder>\Visual Studio\IIS Express\ApplicationHost.config. This configuration file holds the site configuration for the IIS Express instance. This template is customized with the path and port specified and then written out to your temp folder as IISExpress_WebConnection_Application.config.

Once the server is running you can find all running instances of IIS Express in your Windows Task Tray:

TaskTray

You can right-click on the IIS Express icon and then get a list of all the running IIS Express instances (although you should run only one for Web Connection!):

IISExpressInstances

This shows the path and port and start url for the IIS Express instance and also the location of the temporary applicationhost.config file that's actually used. Remember that this file is temporary and created each time Web Connection launches an IIS Express instance, so if you need to make changes to theconfiguration, make it in the file located in the \VisualStudio\IIS Express\ApplicationHost.config, which is then applied to all IIS Express instances launched afterwards.

Shutting down IIS Express

As you saw in the previous image you can shut down IIS Express via the Stop All button. You can also right click any of the sites and click on Stop to shut each down individually. Once shut down they are gone and need to be explicitly restarted manually via the start options shown earlier.

IIS Express vs full IIS?

IIS Express is a nice addition to the supported Web Servers in Web Connection. I'm only sorry I waited so long to add this functionality until now - this could have been available at least a year ago. All of this is coming as part of an effort to revamp the configuration and deployment features of Web Connection which have been worked on in the last two versions of Web Connection. Web Connection 5.64 and 5.65 have added much better support for the Web Connection Module (which is recommended for IIS Express) and support for root Web site configuration. You will see more of these types of improvements in the future…

Does this mean you should not use full IIS on your machine to develop Web Connection application? Perhaps - IIS Express certainly makes getting up and running much easier. But - personally I still like to run with a full version of IIS and I recommend if you have access to IIS and can run in an administrative environment, that at some point at least you install and test your application in a full version of IIS. This lets you see operation in the full IIS version as well administer the server using the IIS Administration tools that you will also see on the server.

The good news is that if you configure a site to run with IIS Express moving to a full version of IIS is pretty easy - mainly you'll need to configure the Web Site and/or virtual directory for operation with IIS. This step can be automated with the Web Connection Server Configuration Wizard or you can manually do it.

Posted in: Web Connection    Web Development    FoxPro

Feedback for this Weblog Entry