Well its definitely time I made a post regarding the status of DNN 3.1. As many of you noticed, the dotnetnuke.com site is dogfooding the 3.1 version, and things are looking really solid. There were only a couple issues to work out over the past week ( which I will discuss in a moment ) but I think we just about ready to launch. Since there has been so little communication on the subject of 3.1, I thought it would be beneficial to provide some insight into the goals of this release version.
Immediately following the release of 3.0.13, we started work on 3.1. The goal with 3.1 was to focus on 2 major enhancement areas - Web Farm Support and Core Module Abstraction. By focussing on 2 clear objectives we hoped to reduce the amount of instability in other areas of the Core; reducing the regression testing effort, and allowing for a much shorter release cycle ( the 8 month cycle for version 3.0 was much too long ). Before embarking on this effort, both of the targeted enhancements were fully documented and reviewed by the team to ensure they specified and met the required business objectives. These documents were also posted to the community and are still available by drilling into each item on the Roadmap page ( http://www.dotnetnuke.com/Development/Roadmap/tabid/616/Default.aspx ) and clicking the link in the Resources module. Going forward, all major enhancements will undergo a standard requirements/design/review phase before inclusion on the Roadmap.
Web Farm Support is a critical enhancement for enterprise deployments. It effectively allows DotNetNuke to run in a load balanced environment. Load balancing is a technique which can be successfully used to manage both load/performance and redundancy. The initial plan was to build a web farm solution which catered to a single use case identified by the Hosting community - but I am happy to report that Dan Caron eventually abstracted the key components into a Provider model so that it can handle multiple use cases. In fact, he built both a File Cache Synchronization provider ( which relies on multiple web servers pointing at a back-end file share ) as well as Database Polling Cache Synchronization provider ( which allows for cache synchronization across independent web servers ). This architecture is incredibly flexible - and creating 2 provider implementations guarantees that the base provider API is true to the flexibility objectives ( too often we see providers with a single implementation which are doomed to fail because the base provider API has not been tested in other use cases ).
Core Module Abstraction finished the effort which was started in the 3.0 release. All of the core DesktopModules in DotNetNuke have been packaged as full Private Assembly modules ( including *.dnn file and SQL scripts ). This effectively allows them to be selectively installed/uninstalled from the application with minimal effort. For example, if you want to install DNN with only the HTML and Links modules ( and none of the other core modules ), you simply need to include the HTML.zip and Links.zip packages in the /Install/Module folder. The other benefit to this abstraction is it results in a much more minimal core - essentially just the base framework services. It also allows each module to be revised and released independent of the core application framework. We hope that this decoupling will allow the core desktopmodules to be improved and released on a much greater frequency than in the past ( ie. we have long been focussing on the body of the application and letting the limbs wither - and under the new model we are hoping these limbs can grow stronger and more powerful as time goes on ). Another thing to remember is the decoupling of the modules does not change their open source nature - they will continue to be developed and supported under the core BSD license.
In addition to the enhancements above, there were quite a number of defect corrections made in this release as the Core Team focussed on stabilizing the 3.0 product. There are too many items to note here but you can always browse our defect tracker at http://support.dotnetnuke.com to learn more.
The one major hurdle which has been holding of the release is how to deal with the MachineKeys in the web.config file.
In DNN 3.0.13 we made a change so that the MachineKey values are autogenerated during installation so that Membership information is secured for each DNN application. On a clean install, this process generates a random key value and inserts it directly into the web.config. If we did not generate a random MachineKey, and all DNN applications used the same static key, and it would be a trivial matter for a hacker to decrypt user passwords ( a major security hole ).
In 3.1.0 we evaluated the MachineKey issue again and discovered a major problem. In the past, the majority of people used XCOPY deployment to upgrade their DotNetNuke application. They would often overwrite the web.config file as part of this process and then manually open it to correct the connectionString values. This worked fine. However now that we store unique MachineKey values in the web.config, this technique would completely kill your site ( because the machinekey values would be lost - and they are not stored anywhere else ). This has already happened to a few folks with disastrous consequences.
For background clarification, we had to put the MachineKeys in the web.config because the MemberRole component from Microsoft can not access the machine.config when running under Medium Trust ( a requirement ).
So anyways, the big problem here is risk of overwrite of the web.config file. We can include upgrade instructions and take the attitude that overwriting web.config is not a supported upgrade activity - but the fact is, if it happens and a person loses their entire membership - DotNetNuke's reputation as a reliable CMS application is tarnished.
Proposed Solution:
1. We do not ship a package with a web.config file. Instead we ship a package with a release.config file ( same content as web.config ) so that it will not mistakenly overwrite the original web.config when unzipped or XCOPY deployed.
Issues:
Install - on a clean install there would be no web.config file which means the application would not run. The user would need to manually rename the file to web.config and edit the connectionString value. This could probably be automated using a script - but it would affect all users who have created DNN deployment scripts already ( ie. Hosters, Control Panel vendors ).
Upgrade - the new sections/settings in the release.config would need to be manually merged into the existing web.config. There is no simple automated method to achieve this type of XML pruning/grafting in ASP.NET 1.1. This problem exists for users right now as each new release potentially includes modifications to the web.config - and users need to upgrade their accounts manually.
At this point this seems to be the only available solution to the problem. But as you can see there are ramifications on both new installations and upgrades. We are trying to determine the best method to communicate these changes to the community in advance, to avoid a support onslaught.