Archives

Archives / 2007
  • IIS7 Hostable Web Core Custom Service (WebCoreService)

    Hostable Web Core (known as HWC) is a new concept in IIS7 to host a website/webservice inside your own process. In short a smaller hosted version of IIS (an IIS7 express edition?).
    This is accomplished by making a LoadLibrary call to load hwebcore.dll (%systemdrive%\Windows\System32\inetsrv\hwebcore.dll)

  • Redirecting from http to https in IIS7 (http2https Updated)

    I had written a sample to redirect all http traffic to https (secure) in September 2006 http://www.awesomeideas.net/post/2006/09/03/Redirecting-from-http-to-https-in-IIS7.aspx

    In one of our internal discussion alias the question came up that this method does not work when SSL is forced on the website. Step 5 below handles that scenario by checking the "403.4 SSL required" response and handling it during OnEndRequest event.

    So let us get into action (I'm using C# for this sample)

    1. Download and Install IIS7 Managed Module Starter Kit
      (Not really a requirement but it would make developing IIS7 modules easier)
    2. Rename the default class name created to "redir.cs" and rename project/solution/namespace to "http2https"
    3. Add the following code in "Init" method
      // register for the BeginRequest event
      application.BeginRequest += new EventHandler(OnBeginRequest); 
      application.EndRequest += new EventHandler(OnEndRequest);
       
    4. Add the following method to implement "BeginRequest" event
      //BeginRequest implementation
      public void OnBeginRequest(Object sender, EventArgs e)
      {
      HttpApplication app = (HttpApplication)sender;
      string HttpUrl = app.Request.Url.ToString(); 
      
         if (HttpUrl.StartsWith("http:"))                           //Redirection done only if URL starts with http:
         {
         HttpUrl = HttpUrl.Replace("http:", "https:");
         app.Response.Redirect(HttpUrl.ToString(), true);           //Redirecting (http 302) to the same URL but with https
         app.Response.End();                                        //We don't want to any further so end
         }
      } 
      
    5. Add the following method to implement "OnEndRequest" event