DotNetNuke (www.dotnetnuke.com) is a highly interesting and potent web creation tool that demonstrates once again that the Open Source philosophy has a very important part to play, even in the world of Microsoft and the areas surrounding it. Transformed through its own merits into the benchmark platform with reference to portal creation in ASP.NET, DotNetNuke is in itself the most extensive user community regarding any product based on ASP.NET.

Web Application Framework
One of the principal decisions at the moment of starting a new web development action is how we are going to organize the whole of the basic infrastructure of the new system. The typical functions that we always need include security (authentication, roles, authorization,…), presentation (design), updating of contents, data access, error checking, etc. ASP.NET 2.0 has been a major help in many of these fields with the introduction of Membership Provider and the authentication controls, themes and skins, master pages, etc. However ASP.NET 2.0 is still a grouping of function blocks that we have to put in motion, in the most coordinated and efficient way, to resolve a specific problem.
The enormous potential on offer to the programmer to create advanced web applications using a highly exhaustive and extended base infrastructure
DotNetNuke © (DNN) is a Web Application Framework which offers solutions to all the above necessities, “out of the box”. This is one of the prime aspects that make DNN so interesting: the enormous potential on offer to the programmer to create advanced web applications using a highly exhaustive and extended base infrastructure.

Fig. 1: DNN, a higher level over ASP.NET
However this is just one of the possible ways to view DNN. We could also see it as a Content Management System (CMS). DotNetNuke incorporates many of the elements necessary to construct content web sites: easily updateable, online edition of contents, file management, delegation of edition roles, etc.
And finally a third view of the product would be that of collaboration. Clearly oriented to the solution of the typical workgroup tasks, DNN offers many modules oriented to the administration of user communities: forums, shared files, blogs, etc. Whether the collaboration is at a public level (groups of friends, games portals, ...) or private (corporate intranets), DNN offers standard some very worthwhile solutions.
A bit of history
There is indeed yet another perspective on what DNN can offer and that is its use as a reference model in learning to construct high performance and feature rich ASP.NET applications. We should keep in mind that DNN is Open Source so that we have at our disposition over 250,000 lines of code to consult and reuse in other projects. DNN being such a potent platform, it is very probable that whatever necessity may surface, it is already resolved in one way or another in some point of the system.
DotNetNuke has its origins in IBuySpy (www.asp.net), a sample application created by Microsoft to publicize the possibilities of ASP.NET 1.0 in the community. The BSD license (more about Open Source licenses in www.opensource.org) allows the free use, modification and redistribution of the software without any additional restrictions. The success of DNN is also founded on this point: it represents a very viable option to set up a commercial strategy in the creation of services.
All of this being united with various highly active participatory forums, members totally in love with the system and a great love for learning, results in the most extensive community of users based on the ASP.NET platform.
Architecture
As we have already mentioned, DNN offers a very extensive API to interact with the system. Based on a large collection of classes oriented to solve the usual problems with this type of applications, we get an easily extendable platform with some very interesting adaptation capacities.
DotNetNuke is basically organized in four layers: presentation, business, data access and data. The first three are set up in the web server (with the ASP.NET platform) and the last in the database server (with extensive use of stored procedures).

Fig. 2: DotNetNuke’s Architecture.
Provider model
One of the important concepts of the architecture of DotNetNuke is that it is designed to get the most benefit out of the provider model so widely used in ASP.NET 2.0. In fact, ever since the ASP.NET 1.1 versions, DNN has used this structure, yet more evidence of the system’s vision of the future and its growth capacities.
DNN used to offer a dual platform version: versions 3.x for ASP.NET 1.1 and versions 4.x for ASP.NET 2.0. DNN version 3.3 was the last supported version for ASP.NET 1.1.
The provider model is based on the possibility of replacing sections of the system’s core functions without the necessity to modify it. It consists of the publication of a public API and the separation of the implementation on a separate module. Thanks to this model, it is possible, at any time, to substitute a part of the system for another version more in line with the needs of each individual. The objective is to construct functions (the functions to be carried out by the system) without them having to depend on details from other parts (the specific implementation to solve the problem).
| Provider |
Description |
| Data |
Offers independence from the database |
| Scheduling |
Allows the execution of scheduled tasks |
| Logging |
Offers a service for logging of errors, security, events... |
| HTML Editor |
Allows use of any HTML editor in the system |
| Search |
It is possible to personalize contents indexing |
| Friendly URL |
Allows the generation of personalized URLs |
| Membership, roles, profiles |
The system’s security management can be personalized to interact with any other context |
Table1: Provider model implementation in DotNetNuke
Personalized designs (skins)
Although perhaps not valued greatly by the developers, one of the points that has indirectly brought more success to DNN is its clear separation of content and presentation. It is possible, at any time, to change the design of a DNN portal without affecting its contents in the least.




Fig. 3: Some examples of DotNetNuke designs.
As we well know, ASP.NET 2.0 incorporates new functions to facilitate the design and creation of webs (skins, themes, etc.). The problem is that these tools are still much geared to the world of development and not really to the requirements of the designers who use some very different techniques in the creation of their designs.
The focus that DNN gives to these requirements is very different: the designs are standard HTML files where specific tokens can be applied which DNN will interpret in the moment the installation of the design (skin) is carried out. In this way any designer can create a skin for DotNetNuke using his habitual methods (Dreamweaver, Photoshop, etc) without any necessity of having a technical knowledge of either the ASP.NET platform or of DotNetNuke. For example, simply including the text [MENU] in the design indicates to DNN that at this point the portal’s navigation menu should be included. All the available tokens support numerous configuration values (styles, texts,…) to facilitate their use. Moreover we can program new extensions of this kind, those known as skin objects, to use in the designs.
Extensibility
We have already seen some of the points where the personalization and extension capacities of DNN (providers, designs) are notable. However, where this characteristic is really appreciable is in the creation of personalized modules. The whole functionality that DNN offers the user is built on a base of modules. A DNN module is no more than an ASP.NET control that inherits from a base class: PortalModuleBase. This class includes the interface so that the framework and module can interact in a standard manner.
A DNN module is no more than an ASP.NET control that inherits from a base class: PortalModuleBase
From this point on it is only a question of getting to know a bit about the DNN architecture and the services it offers, and constructing the necessary logic to resolve the problem we have. In its standard installation, DotNetNuke supplies over 15 modules ready for use (announcements, links, images, blogs, forums, documents,...). If one of these modules does not fulfill our needs, we can modify the source code or start again with a new module that fits our requirements exactly.
As the cherry on the cake, DNN also incorporates a fully automated system to install new modules: you only have to put the controls and dll’s in a .zip file and specify its structure in an .xml file.
Conclusion
DotNetNuke offers us a very easily usable, potent web creation platform with some hard to beat extension capacities. This, put together with its Open Source BSD license and it being totally free, makes it a candidate to consider in whatever new project we may take on. Could you ask for more?