.NET Framework 1.1 on IIS 7 - iis-7

I have inherited a .NET Framework 1.1 web site that I must host with IIS 7 on Windows Server 2008. I'm having some trouble.
1. Installation
I installed .NET Framework 1.1 following these instructions.
The installation automatically created a new Application Pool "ASP.NET 1.1". I use that.
2. Trouble
When I launch the web site I see web.config runtime errors:
The tag contains an invalid value for the 'culture' attribute.
I fix that one and then see:
Child nodes are not allowed.
I don't want to keep playing this whack-a-mole game. Something must be wrong.
3. Am I sure this is .NET 1.1?
I examine the automatically created application pool. I see that it's 1.1.
Advanced Settings...
Basic Settings...
This doesn't seem right.
While 1.1 is set, it's not an option in the Advanced drop down selectors.
And why in the Basic box is it just "v1.1" and not ".NET Framework v1.1.4322"? That would be more consistent.
4. I cannot create other .NET 1.1 App Pools
I cannot select .NET Framework 1.1 for other application pools. It's not an option in the drop down selectors. What's up with that?
What now?
Why isn't v1.1 an option for all AppPools?
How can I verify my application is in fact using .NET Framework 1.1?
Why might I get these runtime errors?

A quick-fire way to find out if the application is running under 1.1 is to knock up a quicky script that displays the environment version:
<%# Page Language="C#" %>
<script runat="server">
void Page_Load(Object sender, EventArgs e)
{
Response.Write(System.Environment.Version.ToString());
}
</script>
Or if you're getting yellow screens of death then you'll see the version number at the bottom of the page:
I suspect the reason you can't select Framework v1.1 when adding a new application pool or modifying an existing one is that the 1.1 installer doesn't know how to add some critical piece of metadata or config info to IIS.
.NET 2.0 ships with 2008 and .NET 4.0 being a later product is IIS7 friendly as well so there is most likely better IIS integration. Or, v1.1 doesn't have some essential nugget of metadata that IIS7's InetMgr needs to be able to add this to its various lists.
The reason you can see v1.1 in the drop downlist for the ASP.NET 1.1 pool Basic Settings dialogue and not the other pools is because it's already been set and so will just be included in the list. I experimented and changed this on the newly created ASP.NET 1.1 pool and set it to 2.0, saved, then re-opened. The result is that v1.1 isn't visible any more.
Additionally the reason it's called v1.1 and not .NET Framework v1.1.4322 is because the value is being picked up from the managedRuntimeVersion attribute in the app pool config in applicationHost.config. The reason that versions 2.0 and 4.0 show a full description is that there's probably some piece of IIS friendly metadata with a resource string being looked up that isn't present for 1.1.
To set a pool to use v1.1 at creation time you have to manually set the managedRuntimeVersion attribute using APPCMD.EXE:
appcmd add apppool /name:"NewPool" /managedRuntimeVersion:"v1.1"
This is explained at the bottom of the article you linked to.
To change an existing pool to use 1.1 you must also use the command line APPCMD.EXE tool:
appcmd set apppool /apppool.name:"SomeOtherPool" /managedRuntimeVersion:"v1.1"
Interestingly you can set managedRuntimeVersion to any old value:
I wish I could explain away why the ASP.NET 1.1 application pool magically gets created or how the installer manages to do the right thing with the handler mappings (somehow all the correct preConditions are set, so either the installer has been updated or IIS has some kind of trigger to look for 1.1 being installed and fix up things).
Update:
I contacted Bill Staples, the author of this article:
How to install ASP.NET 1.1 with IIS7 on Vista and Windows 2008
I asked him about how the 1.1 installer or IIS7 manage to do the right thing regarding handler mappings, creating the "ASP.NET 1.1" application pool and so on. This was his reply:
"If memory serves, in Vista/Windows 2008 there was an application compatibility shim created which would detect the 1.1 installer and do the app Pool creation/handler mapping.
However, in Windows 7 / Windows Server 2008 R2, .NET framework 1.1 is no longer supported and I wouldn't be surprised if this code was pulled, though I don't know for sure."
So mystery solved.

I encountered the same problems whilst trying to install an old .Net 1.1. on Win2k8/IIS7. In the end I found it was easier and quicker just to bump everything to .Net 2.0. I would recommend you do the same.
Unless your code is doing anything exotic the porting process can be carried out in day or less for reasonably large projects.

Windows 2008 doesn't have .NET 1.1 installed. You can manually install .NET 1.1.

Related

"Unrecognized attribute 'secure'. Note that attribute names are case-sensitive." when running website on IIS

I am having a problem with configuring my ASP.NET project on IIS. I have exactly 2 same servers (I mean same IIS settings everything) created from the same image. However, one is working fine, while for the other one, I am facing the problem "Unrecognized attribute 'secure'. Note that attribute names are case-sensitive." (pls see the screenshot below)
Does anyone know what might be the root cause of this and how to resolve it? Thank you.
This error is usually caused by an incorrect .net version, you can try follow steps:
Check on which .NET version the application is developed. Let's assume, it's .NET 4.0.
Open IIS Manager and find the Application Pool, on which your website is hosted.
Go to that Application Pool and check the .NET version and change it to 4.0 accordingly by clicking on Basic and Advanced Settings.
If .NET 4.0 is not listed, go ahead and install it.
If it still won't show up, go to command prompt and fire the below command to find a list of ASP.NET versions installed: C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -lv
In the output, if .NET 4.0 is not listed, register it by firing the below command: C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -I.
It should show up as .NET 4.0 in the .NET Framework Version dropdown for the application pool.

.Net 1.1 upgrade to .Net 2 - Does it still use the .Net 1.1 framework

We have recently taken on support of a web application that was written many years ago and targeted v1.1 of the .net framework. It runs on Windows Server 2003/IIS 6 environment.
After looking at the configuration of the site in IIS the target framework is set to 2.0.
Given that extended support for .net 1.1 will cease in October of this year (http://support.microsoft.com/lifecycle/?p1=1249) I am trying to ascertain whether the site will still use any of the .net 1.1 framework assemblies given that the application is built and compiled in Visual Studio 2003.
I am assuming this is the case because although ASP.net 2 is set as the target framework
in IIS (and therefore the aspet_isapi.dll invoked is the .net 2 one etc) the assembly is a .net 1.1 assembly and will therefore still use the 1.1 framework. However, is this assumption actually true?
The website only has another year or so to live before being replaced by a new solution entirely so I would prefer not to upgrade it if possible and run the risks such changes bring with them.
However, we obviously can't run something on an unsupported version of the framework if any element of if that framework is actually being used.
Any thoughts would be appreciated.
Update:
It would seem that .net 1.1 is a core component of WS2k3 so you can't just uninstall it. I could have attempted to remove the ASP.net component but I don't think that would fully uninstall everything and given that the dev environment is shared I can't risk causing any issues right now.
However I have previously set everything up on my local machine (Windows 7/IIS 7), so I changed the application pool to point at .net 2 (it was already running in classic pipeline mode), uninstalled .net frameworks 1 and 1.1 and cleaned up the files left behind afterwards.
The result was that the site ran absolutely fine, which would suggest in an IIS 7 environment at least that I don't need to worry about upgrading given we are running under .net 2 within IIS.
It's not an ideal test as it isn't a mimick of our live environment. I'm going to post a question on MSDN and asp.net to see if any Microsoft folks can add anything more definitive. I will post back here with any updates.
Just because official support will end doesn't mean Microsoft will pull the plug and force an uninstall of .NET 1.1 via Windows Update. It only means that:
if a gaping hole in the framework's security is ever found, they'll not fix it;
There won't be redistributables for the next versions of Windows, and the next version of IIS won't run it.
So the application will still run in a year. If you leave the server alone, the application might run until the machine breaks of old age.
So my suggestion is relax, and focus more on the new solution.
I got the answer to this questions after reading this link (provided as an answer to this question on the ASP.net forums)
http://msdn.microsoft.com/en-us/library/ms994381.aspx
Under "Application Load Mechanisms and Possible Issues" it states:
By default, an application built using the .NET Framework will run using the version of the Framework it was built against if that version is installed on the computer
It then goes on to detail (for .net 1.1 and 2.0 at least) when a particular version of the framework is used.
Essentially, because our server has both 1.1 and 2.0 installed the application will still be using version 1.1. If 1.1 was not installed then it would run by default under 2.0, which explains why the web application still worked after I uninstalled .net 1.0 and 1.1 from my local machine.
Given that the live server is W2K3 and I can't remove .net 1.1, I will be rebuilding my application to target .net 4.0.

Moving an ASP.NET project to .NET 4

I'm moving an ASP.NET project from .NET 3.5 to .NET 4.
Everything works beautifully if I'm debugging under web.dev (ie. in Visual Studio [2010]) but as soon as I try and run this under IIS7[.5] the debugger fails to attach. Running the project directly under IIS just causes it to throw back 403s (no subcode, so not much help there).
I setup the site by taking the current (and working!) .NET 3.5 site, and changing the AppPool to one with the .NET 4 runtime. I've confirmed that all file permissions are kosher (at least from the .NET 3.5 perspective). I feel as though I'm missing some configuration step here...
The error message when trying to attach the debugger is just "Unable to start debugging on the webserver." Not the most useful error message in the world.
Directly attaching to the associated w3wp process strongly suggests that the application is never spun up successfully.
The basic question is, how would I affect this change over from .NET 3.5 to .NET 4 for a project running under IIS?
Figured it out.
.NET 4 had not been installed for IIS purposes. Don't ask me why that was the case.
Running asp_net_regiis -i in the .NET 4 install directory (\Windows\Frameworks\v4.0.xxxx) under the Visual Studio Command Prompt (x64 in my case) solved the problem.
You cannot mix .NET frameworks in the same app pool. So ensure that only .NET 4.0 web sites are in your app pool.
Remember to set the web site/virtual directory to .NET 4 as well.
IIS7 has two options within a "website". In IIS6 you'd add a sub-app as a "Add Virtual Directory..." in IIS7 doing so forces you to keep the same AppPool and thus .NET framework version as the website.
But, IIS7 now has an "Add Application..." options, which allows you to essentially do what IIS6 had allowed, so that you can explicitly state the AppPool to run in and it can differ from the parent website.
Start a fresh project from scratch and just use the web.config there. Copy all your 3.5 pages in there and manually move over web.config elements that you need. The pages themselves don't require any converting, it's all in the web.config. The web.config for a .net 4.0 page is actually significantly smaller due to the fact that .net 4.0 is not just an extension of .net 2.0 like 3.5 is.

Asp.net on visual studio .net 2003 web component Issues

I want to run ASP.NET on VS 2003 but it raises an error which says:
"Visual studio has detected that web server is running asp.net version
1.0.The web application you are creating or opening can be configured to be compliant with asp.net 1.0. However, the web application will
not be able to use the new features from asp.net 1.1."
When I choose the option "Make the application compliant with asp.net 1.0", then it is unable to set the compliance saying
"Visual Studio.NET cannot create or open the application. The
likeliest problem is that required components are not installed on the
local web server. Run Visual Studio.NET setup and add the web
development component."
It seems that you are running Visual Studio 2003 on Vista, which is not supported.
By default, Vista does not include .NET Framework 1.1 SP1. Install it first. Make sure that SP1 is installed. If you look into properties of "c:\Windows\Microsoft.NET\Framework\v1.1.4322\mscorsvr.dll", you should get the version 1.1.4322.2032.
Enable IIS 6 Compatibility in Control Panel -> Program and Features -> Turn Windows features on or off. Check "IIS 6 Management Compatibility" under "Internet Information Servces".
Register .NET 1.1 with IIS by running "c:\Windows\MIcrosoft.net\Framework\v1.1.4322\aspnet_regiis.exe -ir". It will create the Application Pool targeted to Framework 1.1 with Classic pipeline in IIS7 and set Enable32BitAppOnWin64 property to true on 64bit OS.
Allow ASP.NET 1.1 in IIS7. Open the IIS Manager and click on the computer name in left tree. In main window select "ISAPI and CGI Restrictions" and make sure that ASP.NET v1.1.4322 is enabled. If not, select it and click Allow link on right side.
When you create an application on any directory that runs .NET 1.1 or lower, always select Application Pool that is targeted to Framework 1.1. For already configured applications, you have to change it manually.
You may need to update the script map of the ASP.NET application within IIS to use the newer version of the framework. I assume that .NET 1.1 framework and VS 2003 are already installed without issues.
Here is an MSDN article that should explain how to register the ASP.NET application within IIS to use the .NET 1.1 version using the aspnet_regiis.exe tool. Command-line reference for the tool is available here.
Visual Studio.NET cannot create or open the application. The likeliest problem is that required components are not installed on the local web server. Run Visual Studio.NET setup and add the web development component.
I faced this problem when I copied the project folder from the network shared location to my local system.
Solution: Create a empty folder in your local system. Copy the files from the original folder into the newly created empty folder.
In addition to the accepted answer, you may also need to add the actual "Web Development" component that is included with the Visual Studio 2003 setup file.
While in the menu, even after you install ASP.NET v1.1 & associated Hotfixes/security updates, as well as FrontPage Extensions for your version of IIS, you may STILL see a red X over the installation component.
This may seem very hacky, but for some reason the installer doesn't seem to do a very thorough check - just click the "Red X" and the "Update Now!" icon becomes visible, then you can install the component just fine.
Specs: Windows 10, Visual Studio .NET 2003 Enterprise
TIP: If you are running a newer version of IIS, you won't be able to "just create" an ASP.NET 1.1 application pool. You'll need to enter these appcmd.exe commands:
appcmd create apppool /name:"YOURPOOLNAME"
appcmd set apppool /apppool.name:"YOURPOOLNAME" /enable32BitAppOnWin64:true
appcmd set apppool /apppool.name:"YOURPOOLNAME" /managedRuntimeVersion:"v1.1"
appcmd set apppool /apppool.name:"YOURPOOLNAME" /managedPipelineMode:"Classic"
appcmd set apppool /apppool.name:"YOURPOOLNAME" /autoStart:true

How to properly set up Application Pools for IIS6

I am really stuck with this Parser Error Message telling me "Could not load the assembly 'App_Web_amlohswi'. Make sure that it is compiled before accessing the page." I have been looking around for a few hours checking different posts here and googling information. I have found out that I need to set up a new Application Pool that runs .NET 2.x.
(On a side note, my app is being developed in .NET 3.5, is there a way to set it up to use 3.5 instead of 2.x?)
Can someone provide me with a good explaination on how to set this up properly and (optionally) why is it necessary?
I am more used to developing in PHP so I am used to edit src >> upload >> success!
Thanks!
ASP.NET 3.5 sites run in 2.0 app pools as long as that version of .NET is installed on the system.
You may have to set up web.config properly. Visual Studio should do this for you when you create a new project.
You should also make sure you don't combine 1.1 and 2.0 applications in the same app pool. Try putting it in a separate app pool and see that helps.
Since #Trull provided you with a link to the "how", I'll chime in with the why.
.Net 3.5 just builds on the base .Net 2.0 libraries so you don't need to set it up for 3.5. .Net 2.0 and .Net 1.1/1.0 share some of the same name spaces and classes and therefore you need to choose which set of libraries you want to use with your application. Since your application uses the libraries from .Net 2.0, you need your app pool set up to load these libraries for your application rather than the .Net 1.1 libraries. You will also need .Net 3.5 installed on the web server, even though you only configure the app to use the (base) .Net 2.0 libraries.
This would basically be the equivalent of different versions of PHP. You would expect an application written using PHP 5 (and taking advantage of constructs in PHP 5) to work with a PHP4 interpreter. You'd need to upgrade to the newest interpreter (or at least choose the newer one if both are installed) before your app would work. It's the same with .Net -- you need to choose the right version, the version that your code expects to reference before it will work.
Here is how you use 3.5 in IIS. All hail Hansleman!

Resources