<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel xmlns:blog="http://www.dotnetnuke.com/blog/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
    <title>Blog2mind</title>
    <description>Various thoughts and reflections that escape from the Bring2mind lab</description>
    <link>http://www.bring2mind.net/Company/News/tabid/155/BlogId/1/Default.aspx</link>
    <language>en-US</language>
    <webMaster>peter@bring2mind.net</webMaster>
    <pubDate>Thu, 17 May 2012 19:12:45 GMT</pubDate>
    <lastBuildDate>Thu, 17 May 2012 19:12:45 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 4.0.0.0</generator>
    <item>
      <title>Permissions, permissions, permissions</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/99/Permissions-permissions-permissions.aspx</link>
      <description>&lt;p&gt;This blogpost is about disk permissions and asp.net applications like DotNetNuke. Although there are probably many posts like this I write this because permissions, or more precisely the lack of them, are the root cause of many support requests. And a little knowledge is all that would have been needed to avoid the situation.&lt;/p&gt;  &lt;h2&gt;Background: the worker process and its app pool&lt;/h2&gt;  &lt;p&gt;An asp.net application is just that: an application. It is a program running on your server calculating what HTML to spew out to the requesting browser. This is quite different from serving html in the classic way. There the server just streams files from your server’s hard disk over the wire. No processing as such. Just “serving”. But asp.net applications (and their predecessor ASP and alternatives such as PHP) require the server to process instructions of a program that will tell it what to send to the client. This has given us the data driven web site and the whole Web 2.0 revolution.&lt;/p&gt;  &lt;p&gt;To do this processing the server starts up the so-called &lt;strong&gt;&lt;em&gt;worker process&lt;/em&gt;&lt;/strong&gt;. You can actually see this process in action if you’re on the server which is serving asp.net pages and bring up the Task Manager and flip to the “Processes” tab:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Task Manager" border="0" alt="Task Manager" src="/Portals/0/Blog/Files/1/99/Windows-Live-Writer-Permissions-permissions-permissions_12EDE-image_3.png" width="693" height="60" /&gt;&lt;/p&gt;  &lt;p&gt;They’re called “w3wp.exe” (for WWW Worker Process) and in this screenshot you can see two of them. By the way: this is a really useful place to check the health of your site. It is probably always my first stop. You can quickly see if the worker process is clipping the CPU (i.e. it’s at 99% CPU) meaning it is consuming all processing power of your server, or if it is consuming a lot of memory (usually not a reason to panic).&lt;/p&gt;  &lt;p&gt;The worker process encapsulates the code that is running for asp.net. Because the server is starting this up autonomously based on http requests, this process is boxed into an &lt;strong&gt;&lt;em&gt;App Pool&lt;/em&gt;&lt;/strong&gt;. The app pools are kept in a list in your IIS manager:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="app pools" border="0" alt="app pools" src="/Portals/0/Blog/Files/1/99/Windows-Live-Writer-Permissions-permissions-permissions_12EDE-image_6.png" width="290" height="237" /&gt;&lt;/p&gt;  &lt;p&gt;The app pools govern how much the worker process can consume from the server like in terms of memory for instance (lest they complete consume the server and bring it down). The app pool, therefore, protects the server from potentially hazardous code in the asp.net application. The app pool also gives the worker process its &lt;strong&gt;&lt;em&gt;identity&lt;/em&gt;&lt;/strong&gt;. It is the latter we are concerned with here but we’ll come back to this in a bit. What you need to know at this point is the existence of the worker process and the app pool, the relationship between the two and where you can find them.&lt;/p&gt;  &lt;h2&gt;Windows disk permissions&lt;/h2&gt;  &lt;p&gt;This should not be a big mystery. All items on your server’s hard disk (folders, files) have a set of permissions that commonly inherit down the folder/file tree. Right click on any folder on your server and select properties and you get a popup of that folder’s properties with a “Security” tab. Go to this tab and you’ll see something like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="folder props" border="0" alt="folder props" src="/Portals/0/Blog/Files/1/99/Windows-Live-Writer-Permissions-permissions-permissions_12EDE-image_9.png" width="381" height="491" /&gt;&lt;/p&gt;  &lt;p&gt;The concept is simple here. You can specify users and roles with the level of access to this resource. So giving someone Read but not Write access will allow them to see and download/open documents, but not change those documents or upload new ones. This paradigm is pervasive in computing. What you may not realize is that when the worker process (i.e. the asp.net code) accesses the hard disk it needs to have a “face” for the system to authenticate. It’s “identity” needs to have the right access level to what it wants to do on disk. The way that is implemented is through the identity of the aforementioned App Pool that is responsible for taming the worker process.&lt;/p&gt;  &lt;h2&gt;App Pool Identity&lt;/h2&gt;  &lt;p&gt;The app pool a worker process belongs to specifies which identity it will assume when it goes to Windows. Check out the advanced settings in IIS Manager for an App Pool:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="adv" border="0" alt="adv" src="/Portals/0/Blog/Files/1/99/Windows-Live-Writer-Permissions-permissions-permissions_12EDE-image_12.png" width="408" height="240" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Adv settings" border="0" alt="Adv settings" src="/Portals/0/Blog/Files/1/99/Windows-Live-Writer-Permissions-permissions-permissions_12EDE-image_18.png" width="451" height="552" /&gt;&lt;/p&gt;  &lt;p&gt;So this app pool runs as “NetworkService” when accessing the disk. Note that the default for this depends on the IIS flavour. Commonly you’ll see “NETWORK SERVICE”. What is important to keep in mind though is that these default accounts are local to your server. I.e. NETWORK SERVICE on server SERV-A in your network is a different account than NETWORK SERVICE on SERV-B on your network. Even though they have exactly the same name. Well, actually their full names would be “SERV-A\NETWORK SERVICE” and “SERV-B\NETWORK SERVICE” but we don’t always see it like that in the UI. Keep this in mind!&lt;/p&gt;  &lt;p&gt;The bottom line is that your app pool should have access to the files of your ASP.NET application. And write access as well in the case of an app like DotNetNuke as it is able to install extensions (modules, skins etc) which means writing files to the application’s file system. Let’s examine that in more detail.&lt;/p&gt;  &lt;h2&gt;DotNetNuke and its Installer&lt;/h2&gt;  &lt;p&gt;DotNetNuke’s most powerful feature is its ability to install and upgrade extensions which are uploaded as zip files. DNN’s installer unzips those and, based on the information presented in an XML manifest, it begins to write the contents of that zip file to the server’s hard disk. It will write files only inside it’s own application’s directory. Never beyond that. And that’s good. You want the server to encapsulate the application and not have the risk of some rogue module writing executable code to your Windows files. The installer typically writes ascx files to a folder it will create under DesktopModules. These files are template files that tell the server how to flow the HTML. Next to these ascx files it will also typically write one or more dll files to the bin folder. This folder is the most important folder of your asp.net’s application. It is where the compiled code sits. Waiting to be invoked by the worker process as the ascxs tell it to go to them and do some fancy processing.&lt;/p&gt;  &lt;p&gt;The installer performs another very important function which will have some bearing on the problems we will describe below. That is the running of SQL scripts. The module programmer packages the zip file with a bunch of scripts that prepare the database so that the application may do its work. These scripts are incremental. That is: they are run in order and during an upgrade DNN’s installer works out which scripts it needs to run to upgrade the module. Keep this nugget of info in mind as we examine the common failure scenarios.&lt;/p&gt;  &lt;p&gt;What you need to know by now is that the installer writes files to disk and very importantly to the bin folder of the DotNetNuke application.&lt;/p&gt;  &lt;h2&gt;Common Failure Scenarios&lt;/h2&gt;  &lt;p&gt;The focus of this post is on errors in disk permissions. These permissions can lead to serious malfunctions in your application.&lt;/p&gt;  &lt;h3&gt;After Server Migration&lt;/h3&gt;  &lt;p&gt;Servers die. Or you need a bigger/better etc server. There comes a moment in the life of your website that you’ll need to move it. So you (x)copy over the files of the asp.net app, register the app in IIS and away you go. But this is where the problem begins. The files with FULL permissions for “SERV-A\NETWORK SERVICE” are now running on SERV-B. And the asp.net app is now running as “SERV-B\NETWORK SERVICE” although all you saw was “NETWORK SERVICE”. If you’re lucky (or not depending on how you look at it) your site will still have read access for the new identity and the site will fire up correctly. But what will now happen when we try to install, or worse upgrade, a module? Check below.&lt;/p&gt;  &lt;h3&gt;After Restored Backup&lt;/h3&gt;  &lt;p&gt;Murphy’s law has it that a site will only die when we haven’t got a backup. But just in case you do have one please read this. Your backup might not have the full permission set of the files stored with it. It all depends a bit on your backup solution. What is also common is a combination of this and the above. I.e. a server has died and we restore to a new server from our last backup (pfew). Again what you need to keep in mind is that the permission set may not be right for the worker process’ identity.&lt;/p&gt;  &lt;h2&gt;Common Failure Effects, Symptoms and Solutions&lt;/h2&gt;  &lt;p&gt;These are common results from mishaps after the above.&lt;/p&gt;  &lt;h3&gt;Module Install Failure&lt;/h3&gt;  &lt;p&gt;Keeping in mind the application is unable to write to one or more places of the application’s file system it is easy to see that the installer would run scripts but not be able to write files. Although the installer is pretty smart this is still something that can happen and I’ve had customers report in with installation problems resulting from this. The biggest problem here is that DNN’s installer will have already run the SQL scripts to install the module but the actual installation failed. Now, when the user tries to install again the installer will re-run the scripts leading to all kinds of spectacular SQL failures as the SQL objects are already there that the installer should be creating. This is messy but ultimately easily solvable. Manually rip out all objects related to the module from SQL and correct the disk permissions then install again.&lt;/p&gt;  &lt;p&gt;The main reason this scenario is not that dangerous is that (1) modules are usually (if well programmed) encapsulated so they will not damage other bits of the system and (2) there is no user data yet as we are just installing. So you can afford to horse around with the bits that came with the module provided you don’t touch the rest of the application.&lt;/p&gt;  &lt;h3&gt;Module Upgrade Failure&lt;/h3&gt;  &lt;p&gt;This is the real nightmare scenario. And it is not uncommon. This is also the main reason that &lt;strong&gt;I advocate making a backup of your installation before you upgrade a module&lt;/strong&gt;. Why is this scenario so bad? Let me explain. The installer will begin to upgrade the database objects of the module first. At this time the data may well be transformed (columns being deleted, added and data being moved to other tables for instance). In short this is typically irreversible. DNN has no concept of uninstall largely due to the complexity of this bit. The scripts run first and then the file copying begins. So now the server has to begin adding files, overwriting files and possibly deleting files. Presuming this has become impossible due to a permissions issue, we are now left with module code (in the bin folder for instance) that thinks it is version A and the database tables thinking we are now version B. The installer will bomb out of the install process with “cannot overwrite file XYZ” or “cannot access ABC” and it won’t register in DNN that the module updated. Even though the scripts have run just fine.&lt;/p&gt;  &lt;p&gt;The effects are generally that the module will fail spectacularly with messages of the kind “Column XYZ could not be found in table ABC” etc. The error is easy to spot but harder to solve. In fact you are going to have to do one of two things. You can mimic the DNN installer and continue where it left off. But for that you need a lot of DNN knowledge. In short you’ll need to (1) copy the files from the zip to their correct destination, (2) update the versions in Packages and DesktopModules tables and (3) update the module definitions if there are any changes. The latter can be quite elaborate work. And then we don’t know if upgrade code should be run from within the module. If it does then … well, we’re stuck. But this is relatively rare, as are changes to the module definitions, so just doing 1 and 2 above might do the trick.&lt;/p&gt;  &lt;p&gt;But really the best way out of this is to &lt;strong&gt;roll back to the last backup&lt;/strong&gt;. As you followed my instructions you have a backup ready to be restored. And then you just set the permissions correctly and try the upgrade again.&lt;/p&gt;  &lt;h3&gt;Internal Module Failures&lt;/h3&gt;  &lt;p&gt;Many modules use the file system. Certainly my Document Exchange does so. So having permissions on disk can be crucial to the operation of these modules. Keep this in mind. Typically you’ll see error messages starting with “Could not find a part of the path” or “Could not access”.&lt;/p&gt;  &lt;h3&gt;Setting Disk Permissions&lt;/h3&gt;  &lt;p&gt;So how to set these permissions correctly?&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Look up the identity of the worker process in the app pool settings &lt;/li&gt;    &lt;li&gt;Open up the folder of your DNN installation and select properties and go to the “Security” tab &lt;/li&gt;    &lt;li&gt;Click “Edit …” &lt;/li&gt;    &lt;li&gt;Click “Add …” &lt;/li&gt;    &lt;li&gt;Type in the name you looked up under 1 (you may need to Google on alternatives at this point if you are still not having luck) &lt;/li&gt;    &lt;li&gt;Make sure to transfer these new permissions to all children &lt;/li&gt;    &lt;li&gt;Verify a couple of levels down on a random file. Are permissions as they should? &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;Final Note&lt;/h2&gt;  &lt;p&gt;First and foremost I am a programmer and not a Windows administrator. What is in this post is the result of me having to solve installation issues over the years. I will not claim this is the definitive guide to asp.net permissions debugging. But it is a good overview of the causes of a number of issues I’ve dealt with in DNN/DMX support. And it is not uncommon unfortunately. Though the above may at times be considered common knowledge, I know it is not. And I also know it is hard to explain in a paragraph or two. Hence this post so I can point you here.&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.bring2mind.net/Company/News/tabid/155/EntryId/99/Permissions-permissions-permissions.aspx&gt;More ...&lt;/a&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/99/Permissions-permissions-permissions.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/99/Permissions-permissions-permissions.aspx</guid>
      <pubDate>Mon, 13 Feb 2012 22:37:33 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=99</trackback:ping>
    </item>
    <item>
      <title>Document Exchange 6 is here</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/98/Document-Exchange-6-is-here.aspx</link>
      <description>&lt;p&gt;Today, Document Exchange 6 (DMX6 in short) has been uploaded to this site and Snowcovered. After Months of programming, debugging, tweaking, and … a conference (DNN World in Orlando) I am very proud to announce that DMX 6 is final. Although this release is somewhat behind the internal schedule, it was not opportune to release earlier. Next to some changes in the data model and codebase there are numerous visible enhancements. Allow me to guide you round this new version.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML66bed5c" border="0" alt="SNAGHTML66bed5c" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML66bed5c_1.png" width="640" height="426" /&gt;&lt;/p&gt;  &lt;p&gt;First you’ll notice the familiar 3 panel Ajax UI has been replaced with a 2 panel version (the details panel was sacrificed). You can still get the 3 panel UI, though, by selecting it in the module’s settings. You’ll also notice the menu’s have been slightly rearranged and the Admin and Help menus have been stuck to the right. Both these changes were made among other to speed up the interface. The right-hand menus don’t need to be refreshed so they stay static. The left-hand menu is context-aware and you’ll see it refresh.&lt;/p&gt;  &lt;p&gt;Below I highlight some of the bigger visible changes to this version of DMX.&lt;/p&gt;  &lt;h2&gt;Thumbnails&lt;/h2&gt;  &lt;p&gt;Files can now have thumbnails. If the file is an image type the thumbnail is auto-generated. This mechanism can be extended so in the future we could add auto thumbnail generation for other file types. The thumbnails by default will be stored as jpgs (with a hashed name) in a directory in the portal directory. This is a (tiny) security hole as someone who happens to know the hashed name could access this thumbnail. So we provide as option the ability to have thumbnails stored in DMX itself, so secure. But this creates an overhead, so our default (and recommended) setting is regular storage. Read more in the help file on thumbnails.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML663aa73" border="0" alt="SNAGHTML663aa73" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML663aa73_1.png" width="541" height="228" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML662c820" border="0" alt="SNAGHTML662c820" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML662c820_1.png" width="581" height="197" /&gt;&lt;/p&gt;  &lt;h2&gt;Document Administrators&lt;/h2&gt;  &lt;p&gt;Up until now portal administrators had specific rights in DMX like assigning approval permissions, hard deleting, etc. This can now be delegated to any number of roles who become “document managers”. Users in the selected roles can do most of what the portal admins could before. Find this on the main options screen under application permissions.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML6646ef9" border="0" alt="SNAGHTML6646ef9" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML6646ef9_1.png" width="380" height="250" /&gt;&lt;/p&gt;  &lt;h2&gt;Subscription management&lt;/h2&gt;  &lt;p&gt;Document Administrators can manage who is subscribed to an item through a subscription management screen. This also allows them to add users to items as subscribers.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML665d99d" border="0" alt="SNAGHTML665d99d" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML665d99d_1.png" width="438" height="171" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML66645a8" border="0" alt="SNAGHTML66645a8" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML66645a8_1.png" width="537" height="478" /&gt;&lt;/p&gt;  &lt;h2&gt;Silverlight upload&lt;/h2&gt;  &lt;p&gt;A new upload provider has been added based on Silverlight. This control allows the user to select multiple files with his/her own browser and this control takes care of the rest.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML66744ed" border="0" alt="SNAGHTML66744ed" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML66744ed_1.png" width="640" height="339" /&gt;&lt;/p&gt;  &lt;h2&gt;Mail documents to others&lt;/h2&gt;  &lt;p&gt;Up until now DMX included a function whereby users could email themselves a document (called MailMe). A completely new mailing engine has now been integrated into DMX allowing users to send documents to others. Because spam is such a menace to our society and we wish to avoid adding vulnerabilities through which users may spam, we have added a bunch of parameters to restrict what users can do. First the ability to mail is only available if the portal administrator allows it. Then the administrator specifies who is allowed to use the mailing engine and to whom they may email. We feel enough guarantees are in place to avoid spam but to allow you to distribute DMX content to your users through this powerful mechanism. We hope you like it.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML664f0f4" border="0" alt="SNAGHTML664f0f4" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-SNAGHTML664f0f4_1.png" width="445" height="320" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2011-11-29_16-09-11" border="0" alt="2011-11-29_16-09-11" src="/Portals/0/Blog/Files/1/98/Windows-Live-Writer-Document-Exchange-6-is-here_EA63-2011-11-29_16-09-11_3.png" width="505" height="480" /&gt;&lt;/p&gt;  &lt;h2&gt;Documentation&lt;/h2&gt;  &lt;p&gt;All DMX documentation has been revised for this release. Note most help files are found under the help menu of the module.&lt;/p&gt;  &lt;h2&gt;Other enhancements&lt;/h2&gt;  &lt;p&gt;Several other enhancements have been implemented in this release. The full list is as follows:&lt;/p&gt;  &lt;p&gt;New Feature: Files can have thumbnails   &lt;br /&gt;New Feature: Ability to specify people with Document Admin rights which gives them almost all admin capabilities    &lt;br /&gt;New Feature: Subscription manager allows admin to examine and control subscriptions to items and hence notifications    &lt;br /&gt;New Feature: Language files can now be downloaded directly from Bring2mind without the need to go to the site.    &lt;br /&gt;New Feature: New upload control using Silverlight allows multiple file selection    &lt;br /&gt;New Feature: Integrated mail application allows users to mail documents to others with many options    &lt;br /&gt;New Feature: New default view UI now only shows 2 panels. The old 3 panel UI is optional.    &lt;br /&gt;New Feature: The details of a file can be seen by selecting "properties" from the context menu    &lt;br /&gt;New Feature: Doc Admins can recover hard deleted files from the "Graveyard"    &lt;br /&gt;Enhancement: Revised view template management allows template sharing across the portal    &lt;br /&gt;Enhancement: Revised view template syntax to allow for more powerful and complex templates (incl. Javascript)    &lt;br /&gt;Enhancement: Search engine revision should make it less prone to errors    &lt;br /&gt;Enhancement: Revision of the way content localization is implemented in the database    &lt;br /&gt;Enhancement: Improvements to IPortable should make it less prone to errors when used in portal templates    &lt;br /&gt;Enhancement: Lucene search engine update to 2.9. Supports highlighting as well.    &lt;br /&gt;Change: Code namespace reorganization    &lt;br /&gt;Change: Dependency to DNN 5.2.3    &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Install&lt;/h2&gt;  &lt;p&gt;Installing is simple and like any other DotNetNuke extension. Please download the revised installation manual for details.&lt;/p&gt;  &lt;h2&gt;Upgrading&lt;/h2&gt;  &lt;p&gt;If you’re running a previous version of DMX and you have a DMX license with a &lt;strong&gt;service period&lt;/strong&gt; (check the &lt;em&gt;license&lt;/em&gt; page of the module on the module’s menu) that extends until 29 November 2011 (or later) you can install this version &lt;strong&gt;free&lt;/strong&gt; of charge over your old version. Please read the following carefully to make sure you don’t get stuck with a broken site.&lt;/p&gt;  &lt;p&gt;Major releases have a potential major impact on a site, so one takes more precautions than otherwise. In this iteration the codebase has not been overhauled as much as with DMX 4 and 5, but it has been significantly reshuffled to make it more manageable toward the future. Also, the multilingual implementation has been altered which impacts most aspects of the module. This can only be done during a major upgrade as most users will be aware of the significance and take necessary precautions. These precautions are no different than any release, but this time we really emphasize you:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Make an inventory of any &lt;a href="http://www.bring2mind.net/DocumentExchange/Extensions.aspx" target="_blank"&gt;DMX Extensions&lt;/a&gt; (e.g. Shortlist) or any code that you have that relies on DMX in some way (e.g. the &lt;a href="http://radeditor.codeplex.com/releases/view/77756" target="_blank"&gt;DMX browser for the RadEditor&lt;/a&gt;). If you have any you must make sure you have DMX 6 compatible versions for these extensions &lt;strong&gt;before &lt;/strong&gt;you continue.&lt;/li&gt;    &lt;li&gt;Pick a quiet moment (evening/weekend)&lt;/li&gt;    &lt;li&gt;Backup your installation (i.e. files and database)&lt;/li&gt;    &lt;li&gt;Install the module (and any extensions you need after that)&lt;/li&gt;    &lt;li&gt;Refresh your browser to refresh css and js files from the site&lt;/li&gt;    &lt;li&gt;Run a couple of sanity checks (i.e. Does it come up? Can you add and edit documents? etc.)&lt;/li&gt;    &lt;li&gt;If you find anything odd: describe in detail anything you have seen (screenshots etc), let us know and roll back&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We have run numerous upgrade tests and are confident you will not run into any issues. But as I’ve illustrated in &lt;a href="http://www.dotnetnuke.com/Resources/Blogs/EntryId/3235/Analyzing-an-exploding-EventLog.aspx" target="_blank"&gt;this blogpost&lt;/a&gt;, there is no substitute for a live site. So please take these precautions.&lt;/p&gt;  &lt;h2&gt;Where to get it&lt;/h2&gt;  &lt;p&gt;You can download the module directly from this site here: &lt;a href="http://www.bring2mind.nethttp://www.bring2mind.net/Downloads.aspx?EntryId=1589"&gt;http://www.bring2mind.nethttp://www.bring2mind.nethttp://www.bring2mind.net/Downloads.aspx?EntryId=1589&lt;/a&gt;. You can also buy licenses through the Bring2mind site or renew your license. Note there is a 10% discount here on subsequent licenses. Alternatively you can go to &lt;a href="http://www.snowcovered.com/Snowcovered2/Default.aspx?tabid=242&amp;PackageID=8358" target="_blank"&gt;Snowcovered&lt;/a&gt; to buy DMX or use the new integrated extension gallery in DNN 6.&lt;/p&gt;  &lt;p&gt;The module needs to be activated and can be activated in trial mode which lasts for 30 days. Please read the instructions in the &lt;a href="http://www.bring2mind.nethttp://www.bring2mind.net/Downloads.aspx?EntryId=1589" target="_blank"&gt;installation manual&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;Finally&lt;/h2&gt;  &lt;p&gt;We hope you like this new release. We thank our customers who have been with us for all these years and we think this version really does improve the experience of the module. Let us know what you think and feel free to like our product on &lt;a href="http://www.facebook.com/dnndmx" target="_blank"&gt;Facebook&lt;/a&gt; or on &lt;a href="http://www.snowcovered.com/Snowcovered2/Default.aspx?tabid=242&amp;PackageID=8358" target="_blank"&gt;Snowcovered&lt;/a&gt;. Personally I am proud to be part of the larger DotNetNuke project and where it has gotten us so far. At the conference I was able to meet with some of you and as always those are the highlights of my year. I look forward to 2012!&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.bring2mind.net/Company/News/tabid/155/EntryId/98/Document-Exchange-6-is-here.aspx&gt;More ...&lt;/a&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/98/Document-Exchange-6-is-here.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/98/Document-Exchange-6-is-here.aspx</guid>
      <pubDate>Tue, 29 Nov 2011 18:36:19 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=98</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke World and DMX 6 Release Candidate</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/97/DotNetNuke-World-and-DMX-6-Release-Candidate.aspx</link>
      <description>&lt;p&gt;Just a few days ago the snowplow poles have gone into the ground along our roads.This means two things: 1. the snow is coming, and 2. it’s conference season. Every year around this time of the year there is the main US DotNetNuke conference. This year it’s called &lt;a target="_blank" href="http://dotnetnukeworld.dotnetnuke.com/"&gt;DotNetNuke World&lt;/a&gt;. It’s in Orlando on November 9-11 and I will be attending. And just like 2007 and 2009 I will be presenting as well.&lt;/p&gt;
&lt;p&gt;&lt;a title="DotNetNuke World 2011 Conference Site" target="_blank" href="http://dotnetnukeworld.dotnetnuke.com"&gt;&lt;img border="0" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; border-top: 0px; border-right: 0px; padding-top: 0px" alt="" src="http://dotnetnukeworld.dotnetnuke.com/Portals/0/DNNworld11logo_long_RGB.png" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/97/DotNetNuke-World-and-DMX-6-Release-Candidate.aspx#Comments</comments>
      <slash:comments>1</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/97/DotNetNuke-World-and-DMX-6-Release-Candidate.aspx</guid>
      <pubDate>Mon, 31 Oct 2011 14:22:04 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=97</trackback:ping>
    </item>
    <item>
      <title>DMX 6 goes beta</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/96/DMX-6-goes-beta.aspx</link>
      <description>&lt;p&gt;I’ve kept rather quiet lately as I’ve been working hard on this new version of Document Exchange. But just now I feel this is now at a stage where it can begin being released in the wild. DMX 6 builds on the strong features of DMX 5 and adds a bunch more. While at the same time effort has been devoted to try and slim down where possible.&lt;/p&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/96/DMX-6-goes-beta.aspx#Comments</comments>
      <slash:comments>3</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/96/DMX-6-goes-beta.aspx</guid>
      <pubDate>Thu, 29 Sep 2011 13:10:33 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=96</trackback:ping>
    </item>
    <item>
      <title>(Http) Modules</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/95/-Http-Modules.aspx</link>
      <description>&lt;p&gt;To our second installment on this two part series on &lt;a href="http://www.bring2mind.nethttp://www.bring2mind.nethttp://www.bring2mind.net/Company/News/tabid/155/EntryId/94/Handlers.aspx" target="_blank"&gt;handlers&lt;/a&gt; and modules in ASP.NET web applications, their significance and how to begin debugging situations where things have gone haywire. Like I mentioned in the &lt;a href="http://www.bring2mind.nethttp://www.bring2mind.nethttp://www.bring2mind.net/Company/News/tabid/155/EntryId/94/Handlers.aspx" target="_blank"&gt;previous post on handlers&lt;/a&gt;: modules and handlers go together like peas and carrots. The main difference is the following: whereas a handler runs only when ASP.NET has decided it should handle the incoming request and ASP.NET stops after it has found the handler, the module always runs on every request and ASP.NET continues. So the way that looks is that upon a web request ASP.NET first passes the request to each and every module in the list of modules and then tries to find a handler for it and passes the request on. Most crucially a module can alter a request as it passes through it or set the stage for other components before they run. For the remainder of this post I assume you will have seen/read through the &lt;a href="http://www.bring2mind.nethttp://www.bring2mind.nethttp://www.bring2mind.net/Company/News/tabid/155/EntryId/94/Handlers.aspx" target="_blank"&gt;previous post&lt;/a&gt; and you are familiar with Fiddler, web requests and responses and IIS 6 and 7 differences in the web.config.&lt;/p&gt;  &lt;h2&gt;DotNetNuke modules&lt;/h2&gt;  &lt;p&gt;Below is the modules section (IIS 7) of a default DNN site.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.bring2mind.net/Portals/0/Blog/Files/1/95/Windows-Live-Writer-Http-Modules_C71C-image_2.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="modules section" border="0" alt="modules section" src="/Portals/0/Blog/Files/1/95/Windows-Live-Writer-Http-Modules_C71C-image_thumb.png" width="644" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you’re interested look up one of these in the source code and see what it does. Did you know that:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;DNN’s Url rewrite module also initializes PortalSettings&lt;/li&gt;    &lt;li&gt;DNN’s membership module takes care of user login, roles, authentication cookies, and user language&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Basics of an http module&lt;/h2&gt;  &lt;p&gt;A module can flag to ASP.NET to be kicked into action at the beginning and/or the end of a request. ASP.NET hands control over to the module and it can look at the request, and change it (at begin request) or the response (typically at end request). A common example of the former is url rewriting. A Url rewiter changes the url at the beginning of the request. Url rewriters are used to make web urls more human friendly and get better results in search engines. Lets take the example of a request that asks for resource “/Blog/ThisWonderfullBlogpost.aspx”. By analyzing the resource string and looking things up in a database the url rewriter is now able to deduce that this is a request for page id 3 and blog post id 18. It then substitutes the found values and the request continues its journey in ASP.NET as “/Default.aspx?tabid=3&amp;itemid=18” for instance. Another common example of logic in a module that fires at the beginning of a request is to add variables and their values to the application property bag. These can later be used by the application. An example of this is the variable PortalSettings which holds all the current DotNetNuke’s portal settings in an object. This way subsequent processing doesn’t need to recreate those all the time. Instead they are present throughout the request to both the DNN main application as well as the extensions.&lt;/p&gt;  &lt;p&gt;An example of a module that latches on to the end of processing is a compressor. A compressor changes the response (output) of the server by running it through for instance a GZip compression component.&lt;/p&gt;  &lt;p&gt;If you want to find out more about http modules check out the various web resources about these and/or examine the DotNetNuke source code for some great examples.&lt;/p&gt;  &lt;h2&gt;Debugging modules&lt;/h2&gt;  &lt;p&gt;Errors in modules lead to different symptoms than errors in handlers. A routing issue with handlers usually breaks stuff immediately. A module failure can hide itself better. But the approach in debugging is still similar to what was mentioned in the handlers post. We start by examining the web traffic for hidden error messages and routing issues. We also should not forget to look at the DNN event log to see if we spot exceptions that have come out of a module. It helps at this point to have a rough idea of what each module does.&lt;/p&gt;  &lt;h3&gt;Upload components&lt;/h3&gt;  &lt;p&gt;A special mention here about upload components. There are a number of upload components (Telerik, ComponentArt, NeatUpload, etc) that use Ajax callbacks to stream an upload to the server. What the component does is chunk the file that is being uploaded into small bits and upload one by one using Ajax and using the server’s responses to drive a progress bar/indicator. This has several advantages, notably user feedback and better memory management on the server. Typically these upload components use a module to get the stream of uploaded bytes. So when debugging upload issues, check out the modules in the web.config and make sure the necessary one is there and running (failed request tracing as described in the previous post can help you see running modules as well). Try removing non-essential ones to see if this helps. I have witnessed one upload component “eat” the bytes destined for the right upload component before it got to it which led to failed uploads as the upload component that had consumed the upload didn’t know what to do with it and the expecting upload component was left empty handed.&lt;/p&gt;  &lt;h2&gt;Finally&lt;/h2&gt;  &lt;p&gt;As mentioned before you need to use your knowledge of IIS (in these two posts), the application and Google to work your way through any issue with handlers and modules. It is a skill which you’ll develop and you’ll come to appreciate. Due to the nature of DotNetNuke extension programming, a developer cannot guarantee that all goes well. The configuration is not under our control and it is impossible to foresee what happens in the future. These two posts hope to help you cover some ground in this respect.&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.bring2mind.net/Company/News/tabid/155/EntryId/95/-Http-Modules.aspx&gt;More ...&lt;/a&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/95/-Http-Modules.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/95/-Http-Modules.aspx</guid>
      <pubDate>Fri, 12 Aug 2011 13:13:32 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=95</trackback:ping>
    </item>
    <item>
      <title>Handlers</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/94/Handlers.aspx</link>
      <description>&lt;p&gt;This post is the first of a two part series about handlers and modules and is an attempt to offload what I know about handlers to you. Knowing what handlers are and how they work is what separates the savvy from the not-so-savvy when it comes to IIS administration. Although very few modules in the DotNetNuke ecosystem use/rely on handlers, those that do experience a steady stream of support calls along the lines of “hey, XYZ doesn’t work” and it is down to a handler issue. Examples of modules that use handlers are Ultra Video Gallery and Document Exchange. DotNetNuke uses handlers itself as well. So &lt;strong&gt;what is a handler&lt;/strong&gt;? In a nutshell a handler is piece of code that handles a web request. To understand why it’s good to know more about this you need to look closer at &lt;strong&gt;http traffic&lt;/strong&gt; (i.e. the bits and bytes that go back and forth between your browser and the server).&lt;/p&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/94/Handlers.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/94/Handlers.aspx</guid>
      <pubDate>Fri, 12 Aug 2011 12:20:40 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=94</trackback:ping>
    </item>
    <item>
      <title>Document Exchange 05.03.08 Released</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/93/Document-Exchange-05-03-08-Released.aspx</link>
      <description>&lt;p&gt;While work on DMX 6 is making good progress here's a bugfix update of DMX 5.3.&lt;/p&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/93/Document-Exchange-05-03-08-Released.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/93/Document-Exchange-05-03-08-Released.aspx</guid>
      <pubDate>Mon, 20 Jun 2011 12:12:48 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=93</trackback:ping>
    </item>
    <item>
      <title>Document Exchange 05.03.07 Released</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/92/Document-Exchange-05-03-07-Released.aspx</link>
      <description>&lt;p&gt;This release fixes an important notifications issue in 5.3.6 that cropped up, plus a couple of minor things.&lt;/p&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/92/Document-Exchange-05-03-07-Released.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/92/Document-Exchange-05-03-07-Released.aspx</guid>
      <pubDate>Thu, 03 Mar 2011 13:58:13 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=92</trackback:ping>
    </item>
    <item>
      <title>Document Exchange 05.03.06 Released</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/91/Document-Exchange-05-03-06-Released.aspx</link>
      <description>&lt;p&gt;It has been a while since the last release. With the release of DNN 05.06.01 a minor issue cropped up and we've harvested a couple of other fixes in the meantime.&lt;/p&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/91/Document-Exchange-05-03-06-Released.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/91/Document-Exchange-05-03-06-Released.aspx</guid>
      <pubDate>Tue, 15 Feb 2011 17:09:50 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=91</trackback:ping>
    </item>
    <item>
      <title>Document Exchange 05.03.05 Released</title>
      <link>http://www.bring2mind.net/Company/News/tabid/155/EntryId/90/Document-Exchange-05-03-05-Released.aspx</link>
      <description>&lt;p&gt;A critical bug crept into the DMX 5.3.4 codebase. This version repairs that.&lt;/p&gt;</description>
      <author>peter@bring2mind.net</author>
      <comments>http://www.bring2mind.net/Company/News/tabid/155/EntryId/90/Document-Exchange-05-03-05-Released.aspx#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.bring2mind.net/Company/News/tabid/155/EntryId/90/Document-Exchange-05-03-05-Released.aspx</guid>
      <pubDate>Fri, 17 Dec 2010 12:43:56 GMT</pubDate>
      <trackback:ping>http://www.bring2mind.netDesktopModules/BlogTrackback.aspx?id=90</trackback:ping>
    </item>
  </channel>
</rss>
