Some annoying problem I've encountered lately.
While developing on my XP machine, I have had some ASP.NET 1.1 applications and ASP.NET 2.0 applications running side-by-side, as virtual directories on the single website allowed by IIS5.1
When I've published an ASP.NET 2.0 application to a production server, running IIS6.0 (on Windows 2003 Server) with already installed ASP.NET 1.1 applications, I've found out that if the old applications are running, the new one returns "Server Application Unavailable", and vice versa.
A quick search in the Event Viewer revealed that IIS isn't fond of running applications of different ,NET runtime version, in the same process. Quite reasonable that is, yet annoying.
That's when I remembered that I've always said to myself that I should look into the reason that IIS5.0 and IIS5.1 runs each ASP.NET application in a aspnet_wp.exe worker process, while IIS6.0 uses a single w3wp.exe worker process.
A little web search and I've found this: http://technet2.microsoft.com/WindowsServer/en/Library/d0a61f24-942e-4379-adad-8232be03441c1033.mspx, and adjacent pages.
So this is a new feature of ASP.NET, that makes it possible to run a few applications in the same process. Every few applications (virtual directories) are assigned to an application pool, and each application pool runs in its own process.
There are a few settings that can be done for each application pool. Those settings are overriding the defaults in the machine.config file.
Adding an application pool is done through inetmgr.msc, by just adding a new pool to the Application Pools section. Use the option to copy settings from the default application pool, so you'd have a decent place to start from:
Assigning a pool to an application is done through the main property page of the application's virtual directory:
The solution to our problem is now obvious:
When configuring a new IIS6.0 server, we will start with an application pool for each ASP.NET version we're using (1.0, 1.1, 2.0), and any virtual directory we setup in the server will be configured to be part of the corresponding application pool. Now the applications can coexist and run together.
Enough with server configuration stuff. Now go back to coding.
Ken.
<html>
<head>
<style type="text/css">
<!--
div
{
width: 100px;
height: 100px;
background-color: aquamarine;
border: 10px black solid;
}
#div1
{
padding: 10px 10px 10px 10px;
}
#div2
{
margin: 10px 10px 10px 10px;
}
#div3
{
border-width: 0px;
}
-->
</style>
</head>
<body>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</body>
</html>

content edge or inner edge
The content edge surrounds the rectangle given by the width and height of the box ...
In a lecture I've recently gave in our company, I've discussed about the differences between Debug and Release builds, and ways to change the standard VS.NET configurations to better suit our build needs.
I'll post the important stuff here during the next few days, including some links, diagrams and other things that will make the things as clearer as can be.
Please visit here again in the next days to see the post, and comment me for any mistakes I may have, or any other suggestions in that area.
Crash all the bugs (was that your auntie?)
We're developing a new web application at our department with rich client interface, and as part of the process we need to develop a few UI custom controls, that can and will be reusable in future projects.
I am indecision about two approaches:
1. Packing all the UI web controls into a single assembly (let's say SQLink.Web.UI), as MS did with their System.Web (which include all the UI namespaces, and all other web namespaces, too), and also with the Microsoft.Web.UI.WebControls.dll
2. Pack every single control into a different assembly.
Why 1? it's somewhat easier to maintain (a single project on VSS), it's following the path of MS (this isn't always the best thing to do, but it often is), and it's easier to deploy.
Why 2? (a) It's easier for two developers to work on different controls without "fighting" over source control privileges, and (b) if the assembly holds valuable controls not needed to a specific application, and the application is handed to a client who isn't licensed to use those controls, he still can lay his hands on it if we had packed all our controls into a single dll.
After consultation with my colleague Oren Ellenbogen, we came to conclusion that approach 1 is better, and that the downsides of it can be solved by (a) working properly (by means of not allowing the developers to keep project wide objects checked-out), and (b) relying on the legal discipline of our clients, not to use our application dlls in their or in third party solutions, without our explicit permission.
back to coding ...