Lately, I have received quite a few comments concerning a crash in WebEngine.dll when you recycle an application pool running ASP.Net 2.0.
The sheer number of independent users reporting this makes be believe that it is real. If it was individual users, I would think user hallucination (strangely, many users are very good at doing this… 😉 ), but when it comes with numbers and stack traces, I believe it and not mass hysteria.
However, I have yet to reproduce it myself given the provided instructions. One user said that merely making a request to an ASP.Net 2.0 page and then manual recycling the application pool should trigger the event… but that did not happen for me. Some have said that Sharepoint is involved; others see it without Sharepoint; I could not get either to work. The variations go on and on.
At the moment, I am a little short on bandwidth to figure out exactly what sequence results in the crash, so I am asking for some help in coming up with a reliable sequence of instructions that allow anyone to reproduce this crash. Be as detailed as possible. Start from when the OS is installed if you can – the more details of installation steps and in particular any non-default configuration changes (such as joining a domain, installing an application, running anti-virus, running login/configuration scripts, etc), the better. You want reliable, reproducible instructions because that allows a bug to be filed to the right developer to get it fixed.
What does this have to do with IIS7?
Now, the astute reader is probably wondering what ASP.Net 2.0 on IIS6 has anything to do with IIS7, so first let me give a little history of WebEngine.dll…
WebEngine.dll is a native code DLL which ships with ASP.Net 2.0 but also provides the managed code extensibility in IIS7. How it works is basically this:
- When used by ASP.Net 2.0/IIS6, Application Mappings of aspnet_isapi.dll funnel requests to ASP.Net, and aspnet_isapi.dll is simply a thin shim that calls into WebEngine.dll to create the AppDomains and drives the ASP.Net request pipeline.
- When used by IIS7, WebEngine.dll is loaded directly as a global module (native code only – see this blog entry for details) to create AppDomains, and it hooks directly into the IIS7 Integrated request Pipeline to provide managed code extensibility as the IIS7 request pipeline is driven.
Since IIS7 is in Windows Vista, and it comes with .Net Framework 2.0, it means that we had to get a foothold for our IIS7-related managed code extensibility and ship it with .Net Framework 2.0 … which is why you see WebEngine.dll with ASP.Net 2.0 on IIS6 NOW instead of when IIS7 ships with Vista.
Of course, WebEngine.dll is not supposed to crash… and since its primary purpose is for IIS7, I am very interested in determining the cause because it may be an IIS7/Vista issue as well. The association of WebEngine.dll with an yet-to-ship product under active development (IIS7) instead of an already-shipped product under sustained engineering (ASP.Net 2.0) is what will make fixes in it happen faster.
So, if you are seeing crashes in WebEngine.dll with ASP.Net 2.0 NOW, I want to know about it. And if you can provide clear, reliable instructions for reproducing the crash, I thank you ahead of time for improving the quality of ASP.Net 2.0 and IIS7. And you should also thank yourself for getting a pesky issue fixed!