Thursday, 7 March 2013

IIS vs Cassini different behaviors on ASP.NET Server.Transfer

Here is the problem.

Opening the page http://localhost:3187/passwordForgot (which is served by Cassini) works OK:


But opening the same page on http://localhost/passwordForgot (hosted by IIS) gives us this result (i.e. the browser is not recognizing the content as HTML):


This problem happens on Chrome and Firefox, and ironically it works in IE (usually it is the other way around (i.e. it breaks in IE)


Let’s look at the raw requests to see if we can spot the difference.

After firing up Fiddler and repeating the requests:


We can see that the IIS request doesn't have the Content-Type set (note that the back-end code is the same, so what changed is the way the server handles the ASP.NET Server Transfers)

Here are the Response Headers for both servers:

IIS: image Cassini: image

Here is the server-side TM code that triggers the Server.Transfer:


Here is a fix:


That worked :)

Page view in IIS: image 

Headers in IIS:   image