Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

DNN Syndication Pamphlet

Peter Donker, DNN News Team Lead, 2 July 2007


This document aims to start discussion on an improved syndication architecture for DotNetNuke. There are various developments relating to syndication that warrant a critical examination, and a possible overhaul of the current syndication architecture.

From production to consumption

Syndication is the mechanism whereby web-based content can be distributed and consumed using standard protocols (e.g. RSS). This permits boundaries between applications (modules) and even websites to be crossed. In DNN the production of content is in the modules. The content can be handed off using an rss feed to a XML/XSL module like the Newsfeeds module which renders the content on another page of the portal. The latter is where consumption of the feed takes place and is the end of the syndicated flow.


Internal single feed

This is the simplest of scenarios where a user wishes to display the syndicated content of one module on another page. For example: displaying the latest blog entries from a blog module somewhere on your site on your home page.

Internal aggregation

Combining multiple feeds from within your portal. Example: showing all syndicated content from a portal page (containing multiple modules) on the home page.

External feed

Showing content from another website on your portal. Example: use the BBCNews RSS feed to display the latest headlines on your home page.

Mixed aggregated feed

Showing an aggregation of feeds from both internal and external sources. Example: combine a company internal blog on expertise X with an external news feed on the same subject.

Future for News module

The news module can be used to provide (definitions and renderings of) intersections and end points of syndication in the framework. Most of the logic will reside in the framework syndication API. The module will aggregate and offer its own feed to others (both internal and external). This way it will be possible to truly set up your own ‘wiring’ to route information through your portal.

Current situation: production side

Currently syndication is implemented as a by-product of ISearcheable. The module supplies new content on scheduled times to the search engine and it is assumed that this can be used as a basis for syndication.


Simple to implement as the module developer does not need to do anything more than implement the search interface.


No/little control over syndication by module developer. The SearchItem is the vehicle of transmission which was designed for searching, not syndication.

Initiative lies with the framework to retrieve content which it will do at scheduled times. It is questionable if this is adequate for content syndication.

Current Situation: consumption side

The latest release of the News module is a simplified XSL transformation module. It takes as input a RSS feed and uses XSL to render this on screen.


·         No caching. This means that on every page hit the RSS feed is retrieved again. When using external sources this can lead to timeouts and ugly error messages.

·         No aggregation. It is important that we can display an feed from multiple sources.

·         Limited in rendering options. Xslt is very powerful, but it would be more user friendly to have more mechanisms such as templating to render content.

Proposal: production side, i.e. module-core interface

A module optionally implements a syndication interface. The framework can ask for a feed and the module developer can use a designated class for this. This class must be designed to handle possible extensions to syndication such as SSE.

The module should be permitted to define any number of feeds. The feed request should be parameterized for this.

Proposal: DNN internal

The framework must provide an API that deals with syndication (this is already underway). The API should:

1.       Provide a unified code base for both production and consumption of feeds

2.       Take care of caching . Ideally the caching should be made to rely on a simple cache dependency like an IsDirty Boolean on the part of the module. I.e. the module can flag that it has new content and the framework will request a feed again when necessary if this flag is set.

3.       Do aggregation. It should also understand that asking for a feed from a page means aggregating the modules on it. One could imagine that you have a skin object that points to this mechanism so you have a feed button on every page that gives a proper feed of that page automatically.

4.       Be able to handle multimedia content.

5.       Be able to handle multiple standards (i.e. RSS flavors, ATOM, etc)

6.       be transparent to extensions such as SSE

Proposal: News module

The news module should concentrate on defining the aggregation and display. In its settings it will maintain a list of feeds. A feed can be from (1) an external source, (2) a module, (3) a page. The latter will aggregate content from the modules on that page.

The News module will communicate this to the syndication API and the latter will take care of the proper aggregation. The module can then concentrate on display. This could be modeled after the reports module that uses an extensible mechanism to render SQL output.

- edit: the above was written in July 2007 for a discussion internally in the core team. Since then (see also other blogs) several changes have led to me incorporating a new version of RssToolkit (the same as used in DotNetNuke.Syndication) in the module and going easy on the ambitions regarding syndication redesign of the framework. -


Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (22)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (270)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?