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.

Creating a DNN Installation on Windows Azure Websites

DNN on Microsoft Azure Websites – you’ve got to try this out!

If you haven’t yet tried out Microsoft Azure Websites I think you’re missing out on a great product.   Azure Websites is an Azure technology designed to make it simple and fast to deliver – well, websites.  You aren’t restricted to building .NET based websites, but .NET websites and Azure Websites go together like fish and chips.   And as we all know, the best .NET websites are built with DNN.  So DNN on Windows Azure Websites is like fish and chips and some ketchup – it all works together perfectly.   Less than three years ago I did a presentation on delivering DNN in the Cloud – I tried to show how you could deliver DNN in Azure – but at the time it was like chips and icecream – great individually, but no so good together.   All that is in the past now and Microsoft Azure Websites is a great product that I find myself evangelizing about quite a bit.  Sometimes I think it was designed with DNN in mind, but I don’t think that is the case.

Moving right along – let’s get into the step-by-step process of creating a DNN Install.  If you’ve got your account all set up, it should take about 15 minutes to do.

How to create a new Azure Subscription and get Free stuff

The first step in creating a new Microsoft Azure Website is creating a new Microsoft Azure Subscription [if you don’t already have one, that is].  An Azure subscription is an account you create that acts as a container for all the various Azure resources you might use.  Although the term ‘subscription’ denotes some type of ongoing fee – creating a subscription itself is free, you don’t pay for anything until you start using resources.

If you already have an Azure subscription you can skip to the next section straight away.

The good news is that Azure has special introductory offers, so you can get a free trial when you create your new subscription.  This includes enough resources to run a DNN site for months – so you can really get to try the service before you pay a single cent.  For the free trial you don’t even have to get out your credit card, which is a bonus.

The steps are simple

  1. Visit this link - and click on the ‘Try it now’ button

    new Windows Azure Subscription Trial

  2. Log on with a Microsoft account if you have one.  You might have a hotmail, live or other account.  If you don’t have one of those, you can create yourself an account (you don’t have to have a Microsoft based email to do so)
  3. Once you are signed in, go through the signup process. 
    • Choose your Country/Region carefully.  This will set your billing currency and account location for the new subscription.  This can’t be changed once it is created.  So don’t be lazy and pick Afghanistan or Albania or whatever appears at the top of the list. 
    • You will have to verify either with a text message or telephone call – so have one of these communication devices at hand
    • You can skip the payment information if this is a new trial – otherwise you need to enter in the payment information that you will be billed with.
    • Tick the agreement boxes and click on ‘Sign up’

Once you have a new Azure Subscription created, then you’re ready to start creating fantastic new things in the cloud.  And your first will be a new DNN installation – read on.

How to create a new DNN installation in your Azure Subscription

Note : I suggest keeping a ‘Notepad’ or similar text editor window open as you work through this process.  You will be creating a few account names and passwords you will need further during the process.  As you create these, copy/paste them into the text editor window as you go.  Here’s the format I use (you can copy into your text editor)

Azure Website Name:

Azure SQL Server Name:

SQL Azure Database Name:

Login Username:

Login Password:

Azure Website URL:

DNN Host Username:

DNN Host Password:

Keeping this will make the process much easier (fill out each value as you create/find it) but you can also save the file in a secure location when you’re finished.

1. Log on to – when your account finishes loading, click on the + NEW button in the lower left-hand corner.

2. Choose Compute –> Web Site –> From Gallery to select an application from the existing gallery.

New WIndows Azure Website from Gallery

3. Scroll through the list until you find the DNN Platform entry, select it and click on the next button

DNN Azure Website App Gallery DotNetNuke

4. The next step involves setting the configuration of the installation.   Choose carefully as these values are not easy to change or undo.  

DNN Azure Websites Configuration

  • Select the URL for your site.   This will be pre-pended to to form the URL for the installation [free sites cannot have a ‘proper’ domain, and will only be available on this domain].   Note down the URL you have used.
  • Select ‘Create a new SQL Database’ (this will create a new Azure SQL Database for you).   
  • Choose the Azure location you wish your site and database to be created in
  • Select which Azure Subscription you wish to use.  Note this down.

5.  The final step is to create your Azure SQL Database.  Choose a name of your database, and either select an existing server if you have one, or create a new server. 

DNN Azure Website SQL Azure Database Creation

  • You’re not really building a new SQL Server when you create a new Azure SQL Database server.  Think of it more like a bucket for holding databases than a physical SQL Server.  There’s no cost for a server, only for databases.
  • Whether you create a new server or choose an existing one, note down the name of the server. 
  • You can either accept the default name of the database, or you can create your own.  I always create the database name the same as the site name, so it’s easy to know which belongs to which.  Note down the database name you choose (or copy/paste the default if you decide to use that)
  • Don’t ever create a database in a different location to your site – it will not run properly as the database calls go over the public internet.  Always choose the same location as your site.
  • Create a sufficiently ‘hard’ login name and password.  Please don’t use a simple, weak password.  Generate a random string, copy it into a notepad window or similar and use that – and no, I don’t mean qwertyasdf!  Make sure you note down the login name and the password!
  • Check the box for ‘Advanced Database settings’

6. Set up the advanced database settings – here you want to choose the database size you need.

DNN Advanced Database Settings

  • You can always re-size the database later, so start with 1GB unless you know you’re about to load up a sufficiently sized database
  • Web Edition is fine – again, you can change to Business edition later
  • Stick to the standard Collation unless you have a specific reason to change

7.  Click the final ‘Check’ button and your site and database will start to create

  • You’ll see the new Azure Website being created in your list of Websites

    new Windows Azure Website being created

  • You’ll see the bottom ‘status’ bar showing a message as well – click on the messages icon to expand and view the current status

    Azure Information Bar Icon - New Website Created

8. Start the DNN Install process

  • You have now created your new Windows Azure Website.  But this is just an empty site with a DNN Platform install sitting in it.  Now it is time to run the DNN Installer.
  • Click on the notifications icon and you should get a message showing the install succeeded.  Click the ‘Setup’ to get started with the DNN Installer.

  • If you don’t see this message, you can always click on the site listing showing the URL of the install (it will redirect to the installer).

9. When the DNN Install page loads, set the configuration values (it will take a short period of time as the site initializes for the first time)

  • Choose a ‘host’ [SuperUser] account name and password.  It’s good practice to choose a non-default name, and use a strong password that is different from the database password you created.   Note the host username and password down in your open text editor.

  • Set the Website Name – this should be the name your install is going to be called.  Usually people choose the name of the first site they’re going to build.
  • Choose the template and installation language – in my case I’m using the default site template and English.

    DNN Installation Azure Websites Database Settings

  • Set the database configuration:
    • Database Setup is ‘Custom
    • Database Type is ‘SQL Server/SQL Server Express Database
    • Server name is the name of the Server you created as part of creating your Windows Azure Website.  You should have this noted down.  If you can’t find it, go back to your Windows Azure Console and look under ‘SQL Databases’ – the Server name is listed for each database.  The name of the server is

      Azure SQL Database Server Name DNN Installation

    • Database name is the name you gave when you created the Azure Website – enter it as normal
    • Object Qualifier is optional. As some modules are sensitive to this being turned on, I recommend leaving it empty.  For the purposes of the demonstration I have entered dnn_ in the screenshot - you probably shouldn't include this so leave it blank.
    • Security is User Defined
    • Database Username is the Server Login Name you created earlier when creating the Azure Website.  Enter as
    • Database Password is the Server Login Password you created earlier.  Enter by copy/paste from your text editor.
    • Run Database As should have Database Owner checked.
    • Click ‘Continue’ when you are finished. 

The install wizard will take a few seconds to validate the database connection, then will start running the installation process.  You can sit back and watch it complete, then click on the ‘Visit Website’ when it is done.

DNN Installation Wizard Complete WIndows Azure Websites

10.  Take a look at your new site

  • Take the time to look through the Welcome Popup if you’re new to DNN.  The helpful videos will get you started on the basic tasks of setting up a site.

    DNN Welcome Page Popup

  • Sign up for the DNN Newsletter

11. Time for some housekeeping!

  • Set the Host Email value in Host->Host Settings->Basic Settings.  This gets defaulted to a value derived from the domain name the site was created with.   In this case, it will be from the * domain, and you don’t have a valid email address there.  Enter a valid email address.  Note that depending on the SMTP server configuration, this is likely to be the email address that people receive email from the website.  It’s good practice to have a ‘noreply@’ style email address for the purpose, rather than using your own personal email.

    DNN Installation Host Details

  • Set the Host Title and Host URL here.  Just choose something that makes sense to you.  For the most part these don’t get used much, but you might as well update it to something meaningful.
  • Set the SMTP server settings.  These are in Host->Host Settings –> Advanced Settings –> SMTP Server Settings.  Enter a valid SMTP Server and port, and login.  If you don’t have an SMTP server, you can use options like using the Gmail SMTP Server if you have an account, or you can sign up with a cloud-based SMTP provider.   It’s important to configure a valid SMTP server, though, because items like password notifications and new site confirmations are all sent via this section.   Your Azure Website doesn’t have a built-in SMTP server and so the site really isn’t fully functional until you complete this step.

    DNN SMTP Server Settings Windows Azure Websites

  • Set the Caching Parameters in the Host->Host Settings->Advanced Settings->Performance Settings.  Use the settings as shown below:

    DNN Performance Settings Windows Azure Websites

  • Configure your site to use the Client Resource Management functionality in Host->Host Settings-> Advanced Settings-> Client Resource Management which will combine and minify your JS and CSS files
    • Check the Composite, Minify CSS and Minify JS options
    • Click Update
    • Click ‘Increment Version’ when done

DNN Client Resource Management Azure Websites


Wrapping Up

If you’ve reached this point – congratulations, you’ve got a new DNN install created in Windows Azure Websites.  At this point you’ll need to start building out your site by changing the Skin, installing any Extensions you need and building out your content.  I think this way of creating DNN Installs is very simple – and because of the flexibility of Windows Azure Websites you can start small with a free trial subscription and eventually build out your site to be a much, much larger entity.   You can continue to scale up and out with Windows Azure and never have to migrate to a new server.   The path from the free, simple, shared Azure Website to dedicated, auto-scaling website is a smooth and simple one.   I like using Azure so much that I don’t have a single DNN site left on traditional hosting anymore. 

So go on, create yourself a new site.  I hope this blog post causes at least thousand DNN installs on Azure Websites to bloom!

If you did follow this and create a new site, feel free to link to your new creation in the comments.   Also, let me know what other how-to articles on Azure Websites you’d like me to do, or any other questions you might have on Windows Azure Websites.

If you've enjoyed this article - move on to the next in the Azure Website series - Launching a DNN Microsoft Azure Website


great article bruce, thanks. I would love to have an in depth look at the custom url side of the azure website. How to set up your own domain name and then how to point the domains of any parent portals you have running in your installation of dnn. I am in the process of moving my primary dnn instance to azure and I have set up the default portals url, but I am wondering how you set up the other portals urls in azure and with the domains registrar.
Jordan Thursday, March 06, 2014 12:37 PM (link)
Jay Mathis
I love Azure. I've started putting all my new DNN clients on Azure and moving all my old ones over. The cost is cheaper, the performance can scale to exactly what the client needs, and the setup is pretty dirt simple.

@Jordan - For custom URLs, you just need to switch your instance to the Standard version, instead of the Free or Shared version. This allows you to add your own URL and is also needed if you want to add SSL. Azure has a little annoying domain verification step that sometimes throws clients for loop where you need to add CNAME verification record to the client's DNS zone, but it's a small pain. Everything else about Azure is pretty awesome.
Jay Mathis Thursday, March 06, 2014 2:01 PM (link)
thanks jay, I got the CNAME verification done for the default portal, do you have to go through the same step for the other portals in your instance.
Jordan Thursday, March 06, 2014 2:31 PM (link)
Bruce Chapman
@Jordan, @Jay - I will cover hooking up the DNS in my next blog post.
Bruce Chapman Thursday, March 06, 2014 6:59 PM (link)
Jay Mathis
Yes you have to set up the verification CNAME record for each custom domain. I'm not entirely sure what the reasoning is behind it, but I'm sure there is a good one. Kind of pain, but it's a one time thing. I usually just do it for my clients if they don't know how.
Jay Mathis Thursday, March 06, 2014 9:19 PM (link)
Lucas Jans
How do we ensure we can meet client SLA's with Azure?
Lucas Jans Monday, March 10, 2014 3:35 AM (link)
Bruce Chapman
Azure Websites has a 99.90% SLA from Microsoft, and the underlying Azure SQL Database as described in this post is also a 99.90% SLA. In practice this means a lower SLA overall (it's never the lowest value, but rather a function of the combination) In my experience Azure Websites have high uptime. Whether you feel confident enough to match or increase that depends on your business model - there is always the possibility of a gap between what you are offering and what Microsoft will back up. It all depends on how you present an overall product to the end client.

Certainly there is nothing more you can do to contractrually increase the SLA with Microsoft, but there is plenty of good practice that can be done to ensure high uptime with Azure Websites - but most of that applies to all DNN installs, not just Azure Websites. The key is testing any new software updates extensively, having planned downtime to install and test changes (planned downtime being excluded from an SLA). The biggest cause of downtime is usually mistakes at the hands of developers.
Bruce Chapman Monday, March 10, 2014 7:43 PM (link)
Robert Fulop
Nice tutorial Bruce!

Is it possible to migrate an existing DNN install to Azure?

How much is the estimated cost for a low traffic 15-20 site DNN install per month? Just trying to see if it's worth switching from my current $49 VPS witch runs pretty smooth with it's 4GB dedicated RAM.
Robert Fulop Wednesday, March 12, 2014 9:37 PM (link)
Bruce Chapman
@Robert - of course you can migrate an existing site- I'll cover how to do that in another post, as it seems to be a popular topic. Just remember when looking at DNN installs, the number of portals is irrelevant for most cases. It's the total amount of storage and traffic the site sees that is important. 4GB sounds excessive, though not perhaps with a built-in sql server. In WAWS, you always have a linked server (usually Azure SQL Database, but you can use a SQL Server VM as well). In any case, you can start off on the shared mode, and move up to standard which gives you dedicated resources. It's seamless to do so.

I have a low-traffic 6 portal DNN install on WAWS and it costs about $15 a month for most months, and has never given me any trouble at all. But I will write more on this topic going forward in other blog posts.
Bruce Chapman Wednesday, March 12, 2014 10:02 PM (link)
Rodney Joyce
Hi Bruce,

This is a great artcile - there was a lot of confusion as to whether or not to use WebSites or the DNN Accelerator which was confusing.

I have been trying to migrate a simple DNN website into Azure and I keep giving up - there's so many different modules and the SQL migration script fails - I would be keen to see your article on it.

Rodney Joyce Tuesday, March 18, 2014 7:42 AM (link)
Rodney Joyce
To clarfiy: The bit that I need help with is debugging/troubleshooting. I have FTP'd my whiole site up (a really simple one) and migrated my SQL DB to SQL Azure. The error message I get when I go to my site is "The resource you are looking for has been removed, had its name changed, or is temporarily unavailable." ( and I cannot figure out a way to debug it. I have changed all the values in the Web.Config. There are no logs under the log dir on FTP so I am not sure how to start debugging the issue....
Rodney Joyce Tuesday, March 18, 2014 8:33 AM (link)
Jay Mathis
I started with the DNN Accelerator, but I've since jut started using the Websites Gallery option. The accelerator sets up a cloud service as well as the database and web worker role. The Websites option just needs the database and the 'website' which is basically the web worker role and cloud service combined into one. The major difference is that you don't get RDP access with the Websites option, so keep that in mind if you have some special need. In my experience I have yet to need RDP for anything I can't manage via the admin panel with Websites.

As for migration, there definitely some challenges if you are migrating a older site. I found the best tool was the SQL migration tool. Create a local copy of your target DB, then use SQL Server Management Studio's Azure Migration Wizard. It will basically find all the potential problems for you and help you modify your tables and scripts to be Azure compatible. If was a bit of challenge at first, but you quickly start to see a lot of the same problems, like lack of a primary key, etc. Mostly, these are in third party modules that didn't have good table structure to begin with.

Once you get a successful conversion, it's just a matter of moving it over to Azure, but the wizard will do all that for you.

Let me know if you run into any specific issues.
Jay Mathis Tuesday, March 18, 2014 9:54 AM (link)
Bruce Chapman
@Rodney Azure Websites has improved to the point where, unless you have a specific reason for building an application in PaaS using the Azure Accelerator (such as customizations, scale or similar), then my recommendation is to build your site in Azure Websites. It is simpler and quicker to put together the site, though the tools are not as similar as someone used to traditional hosting might be used to.
Bruce Chapman Tuesday, March 18, 2014 10:15 AM (link)
Jay Mathis
Probably obvious, but did you remember to change your PortalAlias table to the new URL?
Jay Mathis Tuesday, March 18, 2014 11:20 AM (link)
Rodney Joyce
@Jay: Ah, I woke up and was going to comment: I managed to figure it out after working into the wee hours. Yes, it was the PortalAlias table and a missed connection string in the web.config. It really was trial and error as there was no way to troubleshoot and tell if my changes were making any difference as it always gave the same error message. Am I missing something re. diagnostics? Cheers for the help
Rodney Joyce Tuesday, March 18, 2014 4:45 PM (link)
Bruce Chapman
I will get a post written on migrating a site to Azure Websites. I'm finishing up the one on how to launch a site you've just installed.
Bruce Chapman Tuesday, March 18, 2014 8:21 PM (link)
Rodney Joyce
Great Bruce. Please go into more detail about options for the SMTP server. I've always had a hosted server and used that. I've done some searching and it looks likes it's going to be an additional cost to use something like SendGrid. Anyone recommend any in particular or free ones?
Rodney Joyce Wednesday, March 19, 2014 3:26 AM (link)
Rodney Joyce
FWIW I have selected SendGrid and this tutorial is very simple to follow - . I had a strange issue when trying to buy addons on the Azure store and I needed to add a Credit Card in order to proceed (you can still keep the spending limits). The only tiny difference is the SMTP settings are in DNN Host and not in the web.config, but it all works well.
Rodney Joyce Wednesday, March 19, 2014 5:15 AM (link)
Jay Mathis
SendGrid is pretty awesome. They have a free plan in the Azure store that I think gives you several thousand/month (don't quote me on that) which is plenty for most of my sites.
Jay Mathis Wednesday, March 19, 2014 12:49 PM (link)
Rodney Joyce
Jay, have you got NewRelic working on a DNN site? The lack of diagnostics makes it's tricky to work out what, if anything, is wrong -
Rodney Joyce Wednesday, March 19, 2014 4:55 PM (link)
Jay Mathis
I'm not familiar with NewRelic, however it sounds somewhat similar to Glimpse. Have you check out the dnnGlimpse project that Joe Brinkman set up?
I haven't used it but it sounds pretty awesome.

As for debugging, I guess I've just been around too long that I kind of know all the little things that can go wrong and have kind of a checklist to run down based on what I'm seeing. I'm sure of your specifics, but a couple things that might help: 1) If the DNN application is answering the request at all before you see the error, then you can look directly in the DB via Azure's SQL management console. Look in the the EventLog table and you will a big XML blob in there that may give some direction on what the issue is. 2) If it is a server issue, you can enable the verbose logging within the Azure Websites control panel (it is off by default). That may also lead you in the right direction.

What kind of symptoms are you seeing (if anything)?
Jay Mathis Wednesday, March 19, 2014 9:05 PM (link)
Rech Co.,Ltd
good job!
Rech Co.,Ltd Wednesday, April 02, 2014 10:18 PM (link)
Rodney Joyce
Well, I have now migrated all my sites across and it's been great fun doing it. I have noticed that the EventLog is no longer logging any exceptions - I suspect it may be some sort of file permissions issues. Anyone had this?
Rodney Joyce Saturday, April 05, 2014 1:14 AM (link)
henri guislain
I try to install a DNN since yesterday without success.
After the installation of the extensions, I get a ERROR:Object reference not set to an instance of an object on 54% of the installation process. I click on "réessayer" because I'm french speaking or "voir les journaux(logs)" but there are no logs.
Is that because I try with a "free" charge test (one month) azure version ?
I see that DNN populate the database SQL.
Is this a version problem (french) or (west europe) version problem ?
I use an old dotnetnuke version since 2008 as portail for our High School (in Belgium) and I would like to renew our portal.
Thank's a lot for your help ;-)
Henri Guislain
henri guislain Friday, June 27, 2014 6:23 AM (link)
Bruce Chapman
Henri - if you're trying to migrate an existing copy of DNN, you might have some invalid SQL Syntax in your site that will not restore on Azure SQL Database.

There is no difference between trying with the free version - it should work regardless - and same for the French language pack and datacentre. None of that should be an issue.

Can you just clarify if you are trying to install a new version, or if you are trying to import your 2008 version?
Bruce Chapman Monday, June 30, 2014 6:41 AM (link)
henri guislain
Hello Bruce,
I try to install DNN on Azure with "create new site from gallery" wizzard .It's a new version! The wizzard asks the name of the site and the name of the database SQL and the name of the server (westeuropa one for me). Each time I try and after 54% of the process I get ERROR:Object reference not set to an instance of an object. The trial version SQL free has 20M database space. Is that enough ????

henri guislain Monday, June 30, 2014 8:17 AM (link)
Bruce Chapman
20mb should be enough as the default DNN install takes about 13 mb of space. However, it could be that during the install process the site runs out of disk space. I would try using a normal SQL Azure database - they are very cheap - and see if that resolves the problem. Just make sure you're creating your website and your database in the same Azure Region.
Bruce Chapman Monday, July 07, 2014 7:25 AM (link)
henri guislain
I did it like your description ...; I see that the SQL Azure database has dnn data inside.
I have also tried with the Dotnetnuke Azure Accelerator without success but more complicated ;-)
I think it could be a module because everytime I try it , the installation process stops at ... 54%
I have an account to send message in place of comment form if you want.
henri guislain Monday, July 07, 2014 7:46 AM (link)
henri guislain
Hi Bruce,

It seems it's a pending problem:

henri guislain Tuesday, July 08, 2014 7:33 AM (link)
2sic Daniel Mettler
Hi Bruce
Greate post - I have a big wish: you put a custom object-qualifier in, and that caused problems when people followed your instructions and then installed modules which don't support this any more. So may I beg you to change that to "This is an old feature that is often not supported, please leave it at the default value" and update your screenshot? this would be very, very helpful :)
2sic Daniel Mettler Tuesday, September 16, 2014 4:48 AM (link)
Bruce Chapman
Daniel - objectQualifier is still fully supported and has not been deprecated - any modules written should take this into account and be fixed accordingly.
Bruce Chapman Tuesday, September 16, 2014 6:43 PM (link)
2sic Daniel Mettler
The objqualifier is supported only because old systems still use it. The original purpose was to "save hosting" by using one SQL-db to mix customers - something which you should never do and might have seemed reasonable 15 years ago - but not today.
On the other hand, it causes issues in development with things like entity framework. So it's an old (supported) feature that should not be promoted.
2sic Daniel Mettler Wednesday, September 17, 2014 5:47 AM (link)
Charles Nurse
@Daniel - There are a large number of sites out there that use an object qualifier. From a DNN Platform and Evoq Content and Social perspective we fully test with and without an object qualifier, and any module developer who intends to distribute their module should support it.

It is true that it is NOT recommended to support multiple different DNN installs in the same DB, but there are users who try and save on SQL Server hosting costs by using the same DB for 2 or more different applications and in that scenario an object Qualifer is critical, in case two different applications have a "Users" table for example.
Charles Nurse Wednesday, September 17, 2014 5:40 PM (link)
fabian leonardo perez bello
Hi guys, I have my DNN site on Windows Azure, but recently I've been having this error:

"502 - Web server received an invalid response while acting as a gateway or proxy server.
There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server."

Anyone knows how to fix this problem? because is driving me crazy. If anyone can help me to solve this trouble I would be very grateful.


Fabian Pérez.
fabian leonardo perez bello Friday, October 17, 2014 3:28 PM (link)
Bruce Chapman
@Fabian - Azure Websites sits behind a load balancer (even when only one instance) - the 502 error is coming back from that (see note with upstream server). My guess is that your website is timing out on a particular transaction, and that's when you see the 502 (this is a guess, mind you, not an accurate diagnosis).

What I recommend is that you look at your DNN Event Log, and at your Log4Net log, and see if you can find if it is related to a specific transaction.

Depending on your Azure Websites plan, you may also be running out of allocated resource (although that normally returns a 503 I think) - I would check the Azure portal to see that you aren't running out of allocated CPU if you're using a shared or free mode. Other things to check are the database tier level - S0 struggles to support a DNN app under any sort of load.

But the main advice here is to look at the logs and work backward from there. The first thing to look for is timing out on transactions, either at the db or application level.
Bruce Chapman Monday, October 20, 2014 10:21 AM (link)
Hi, how do you force www in Azure websites? I dont want to get this wrong by changing the web config file.

Thanks in advance.
SIMON GARE Saturday, November 29, 2014 10:28 AM (link)
Bruce Chapman
The process is the same for Azure Websites or any other DNN installation - configure the version of your domain and then set it as the primary site alias for the site. For Azure Websites you need to set up the domain name for the as per the domain name instructions - but this is just to ensure that the www version works - the actual redirect is done by DNN.
Bruce Chapman Monday, December 01, 2014 4:51 AM (link)
Evan Smith
I am running a number of websites on Azure, lately I noticed that my sites are crashing and it looks like a access conflict with the cache files. It always seems to be triggered by the FiftyOne.Fondation.Mobile.Detection.Provider, although this could be a coincidence. I am not sure if the conflict is between threads (the exception within DotNetNuke, or if Microsoft is running some sort of scanner against the files which is conflicting with DotNetNuke. Thought I would check here before submitting a DNN Tracker bug. Currently I am trying an In Memory Cache (yes i know it is not recommended above) to see if it eliminates the error. A partial example of the inner error is below:

at FiftyOne.Foundation.Mobile.Detection.Provider.Match(NameValueCollection headers, Match match)
at FiftyOne.Foundation.Mobile.Detection.WebProvider.GetResults(HttpContext context)
at FiftyOne.Foundation.Mobile.Detection.MobileCapabilitiesProvider.GetBrowserCapabilities(HttpRequest request)
at System.Web.Configuration.HttpCapabilitiesBase.GetBrowserCapabilities(HttpRequest request)
at System.Web.HttpRequest.get_Browser()
at DotNetNuke.Entities.Urls.FriendlyUrlController.IsMobileClient()
at DotNetNuke.Entities.Urls.FriendlyUrlController.GetBrowserType(HttpRequest request, HttpResponse response, FriendlyUrlSettings settings)
at DotNetNuke.Entities.Urls.UrlAction.SetBrowserType(HttpRequest request, HttpResponse response, FriendlyUrlSettings settings)
at DotNetNuke.Entities.Urls.AdvancedUrlRewriter.ProcessRequest(HttpContext context, Uri requestUri, Boolean useFriendlyUrls, UrlAction result, FriendlyUrlSettings settings, Boolean allowSettingsChange, Guid parentTraceId)
2015-01-10 05:58:59,900 [RD00155D50E8FF][Thread:19][ERROR] DotNetNuke.Common.Utilities.FileSystemUtils - System.IO.IOException: The process cannot access the file 'D:\home\site\wwwroot\Portals\0-System\Cache\Pages\' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalDelete(String path, Boolean checkHost)
at DotNetNuke.Common.Utilities.FileSystemUtils.DeleteFileWithWait(String filename, Int16 waitInMilliseconds, Int16 maxAttempts)
2015-01-10 05:58:59,931 [RD00155D50E8FF][Thread:12][ERROR] DotNetNuke.Common.Utilities.FileSystemUtils - System.IO.IOException: The process cannot access the file 'D:\home\site\wwwroot\Portals\0-System\Cache\Pages\' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalDelete(String path, Boolean checkHost)
at DotNetNuke.Common.Utilities.FileSystemUtils.DeleteFileWithWait(String filename, Int16 waitInMilliseconds, Int16 maxAttempts)
Evan Smith Saturday, January 10, 2015 1:48 AM (link)
Evan Smith
Follow UP. Turned caching to memory and 51Degrees fails at the same location 4 times over night at exactly one hour intervals (9.22.22 AM UTC, 10.27.29 AM UTC, 11.27.34 AM UTC and 12.27.38 PM UTC). I find it very suspicious that the errors are so regular. I never see this error on my local dev box, I have to believe it is something to do with the Azure environment. I have also tried turning "Device Detection Enabled?" on and off, to no avail. Running DNN 7.3.4.

Full text of the log for the last error is below:

2015-01-10 12:27:38,112 [RD00155D50E8FF][Thread:53][ERROR] DotNetNuke.Entities.Urls.UrlRewriterUtils - System.IO.IOException: The device is not ready.

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
at System.IO.BinaryReader.FillBuffer(Int32 numBytes)
at System.IO.BinaryReader.ReadInt16()
at FiftyOne.Foundation.Mobile.Detection.Entities.Node..ctor(DataSet dataSet, Int32 offset, BinaryReader reader)
at FiftyOne.Foundation.Mobile.Detection.Factories.NodeFactory.Create(DataSet dataSet, Int32 offset, Reader reader)
at FiftyOne.Foundation.Mobile.Detection.Entities.Stream.VariableList`1.CreateEntity(Int32 offset, Reader reader)
at FiftyOne.Foundation.Mobile.Detection.Entities.Stream.BaseList`1.get_Item(Int32 key)
at FiftyOne.Foundation.Mobile.Detection.Entities.NodeIndex.get_Node()
at FiftyOne.Foundation.Mobile.Detection.Entities.Node.GetNextNode(Match match)
at FiftyOne.Foundation.Mobile.Detection.Entities.Node.GetCompleteNode(Match match)
at FiftyOne.Foundation.Mobile.Detection.Controller.Evaluate(Match match)
at FiftyOne.Foundation.Mobile.Detection.Controller.Match(Match match)
at FiftyOne.Foundation.Mobile.Detection.Provider.MatchNoCache(String targetUserAgent, Match match)
at FiftyOne.Foundation.Mobile.Detection.Provider.Match(String targetUserAgent, Match match)
at DotNetNuke.Providers.FiftyOneClientCapabilityProvider.FiftyOneClientCapabilityProvider.GetClientCapability(String userAgent)
at DotNetNuke.Services.ClientCapability.ClientCapabilityProvider.GetClientCapability(HttpRequest httpRequest)
at DotNetNuke.Entities.Urls.FriendlyUrlController.IsMobileClient()
at DotNetNuke.Entities.Urls.FriendlyUrlController.GetBrowserType(HttpRequest request, HttpResponse response, FriendlyUrlSettings settings)
at DotNetNuke.Entities.Urls.UrlAction.SetBrowserType(HttpRequest request, HttpResponse response, FriendlyUrlSettings settings)
at DotNetNuke.Entities.Urls.AdvancedUrlRewriter.ProcessRequest(HttpContext context, Uri requestUri, Boolean useFriendlyUrls, UrlAction result, FriendlyUrlSettings settings, Boolean allowSettingsChange, Guid parentTraceId)
Evan Smith Saturday, January 10, 2015 11:35 AM (link)
Jay Mathis
I'm not seeing that error on any of mine Azure installations. Which version of DNN?
Jay Mathis Saturday, January 10, 2015 11:56 AM (link)
Evan Smith
I am running Community 7.3.4 (upgraded in Nov), going through the log files, it looks like this error started two days ago, although prior to that for a couple of weeks there were a lot of errors like below, which have now stopped. The only recent change I made to the site was to change the Azure SQL DB from a S1 to an S2.

2015-01-08 19:27:48,540 [RD00155D50E8FF][Thread:7][ERROR] DotNetNuke.Services.Exceptions.Exceptions - System.Web.HttpException (0x80004005): Not Found
at DotNetNuke.Modules.Admin.Users.ViewProfile.OnInit(EventArgs e)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.AddedControl(Control control, Int32 index)
at DotNetNuke.UI.Modules.ModuleHost.InjectModuleContent(Control content)
at System.Web.UI.Control.EnsureChildControls()
at DotNetNuke.UI.Containers.Container.get_ModuleControl()
at DotNetNuke.UI.Containers.Container.ProcessModule()
at DotNetNuke.UI.Skins.Pane.InjectModule(ModuleInfo module)
Evan Smith Saturday, January 10, 2015 1:24 PM (link)
Jay Mathis
I'm use 7.3.4 on all of mine and don't see that. Odd that happens every hour. Sounds like it could be a scheduler issue. Or perhaps a robot is hitting your site doing something.

The error you listed above is related to the user profile and a lot of bots are trying to access the DNN profile page to try and inject outbound links for SEO (which doesn't even accomplish what they want , by the way) so it could be related to that.
Jay Mathis Sunday, January 11, 2015 11:20 AM (link)
Bruce Chapman
@Evan there isn't any type of file access from Azure services that I know of. The file storage for Azure Websites is just storage without any active activity on it.

The problem looks to be with the 51 Degrees library - I don't know which version you have there, there have been several major updates. I would look into deleting the cache of browser types that 51 degrees holds and allow it to re-download.

The second error you list is related to user profiles - as Jay notes this might be a corrupt profile, or it could be something else. Best to look at that specifically. You will get much better responses to these non-Azure specific questions (well, any technical question, actually) if you post to the Q&A section rather than adding questions in blog comments, which are not checked by the DNN community.
Bruce Chapman Sunday, January 11, 2015 6:39 PM (link)
Evan Smith
I have managed to eliminate the errors by taking two actions:

1) Turning off "Always On" in the Azure portal. This was something that I remembered turning on a few weeks ago, about the same time as the 51 Degree related exceptions. This eliminated those, I can not think why Always On should cause an exception with 51 Degrees, maybe 51 Degrees does not like the "browser client" Azure uses. I will follow up with them on their website.

2) The second issue does seem to have to do with a third party trying to directly hit profiles that no longer exist on my site. Specifically, I had an issue with some spammers creating bogus registrations for a while before I changed my registration page and implemented a request filter to create 404 requests to the default registration page. As an interim solution, I have implemented a request filter for the user-profile page, which of course means none of my users can look at their profile. I will file a bug on dnn tracker that we should catch when a profile page is called directly for a non-existent user id number, as this should not trigger 4 exceptions for each attempt, then automatically go to the profile page of the next higher user id number. I believe it should not create any exception and display an error page to the end user that no such user id exists.
Evan Smith Thursday, January 15, 2015 11:47 PM (link)
cathal connolly
FYI David Rodriguez just published a new blog on how to use the Azure websites migration tool to publish websites, i thought the folks on this thread might be interested in
cathal connolly Friday, January 16, 2015 7:47 AM (link)
Jay Mathis
Good tips Evan. I agree with you that the profile page should more gracefully handle a request for a profile that doesn't exist.
Jay Mathis Friday, January 16, 2015 9:02 AM (link)
2sic Daniel Mettler
Hi Bruce
I would like to place my wish again to not recommend a "dnn_" object qualifier. It keeps on popping up as a support issue because people just apply it thinking that if it's in this manual, it must be best practice.

I'm sure you agree that it's not important to add it, but when people follow your instructions, they will experience additional issues with certain modules (like 2sxc which uses Entity Framework), so you would save many people unnecessary problems by not recommending a custom object qualifier.

Thanks, Daniel
PS: Yes, I understand that it's a still-supported-feature, but as it's unnecessary in this manual, it offers no benefit but does cause trouble.
2sic Daniel Mettler Monday, February 23, 2015 4:13 PM (link)
Jay Mathis
I agree with Daniel. We use Linq2SQL as a DAL in several modules and it's been a problem there too.
The original reason for supporting the prefix was a good one, but I think it's probably outlived it usefulness with modern hosting options. I'd like to see this feature downplayed and eventually retired.
Jay Mathis Monday, February 23, 2015 4:46 PM (link)
Bruce Chapman
I would advise caution at using Linq and similar ORMs as I have found many instances of horrible SQL performance - particularly on environments like Azure SQL which can be somewhat sensitive to poorly written SQL - I do understand they speed up development time. After cleaning up some messes recently I am very wary of the code that these generate and the lack of control that you have. It's all OK until someone uses it with lots of rows and then there is nowhere you can go in terms of getting better performance without re-engineering the app.

Having said that, the requirement for objectQualifier has been relaxed in EVS, and I'll look at updating the blog post at least with a suggestion that people don't use it.
Bruce Chapman Tuesday, February 24, 2015 6:59 PM (link)
2sic Daniel Mettler
Awesome, thanks!
2sic Daniel Mettler Wednesday, February 25, 2015 2:49 AM (link)
Brad Bamford
On Azure Websites, how does DNN file system's handle scaling up multiple instances now?
I remember that being an issue in the past.
Brad Bamford Saturday, March 19, 2016 12:33 PM (link)
Bruce Chapman
@Brad Azure Websites (now called Azure Web Apps) is designed by Microsoft to have a static file system based on Azure storage. With this configuration 1 or many Web App instances (as I mentioned, it's like IIS as a Service) may be attached to the storage. In configuration, it's a little like a web farm where the shared code is stored on a UNC path, and all web servers attach to that UNC path. Scaling in/out of the Web Apps is handled by Azure and whenever a new instance is requested (either because of scale out, or because the old one stopped responding) it automatically attaches to the storage as a 'D:' drive. It is completely transparent and you don't need to do anything special.

You may have been thinking about the PaaS 'Cloud Services' which was the original iteration of IIS on Azure (going back a while now). In that, you had to manually set up a link to external storage to take advantage of non-volatile storage. I don't recommend going that way now unless you have a specific problem you're trying to solve.
Bruce Chapman Tuesday, March 22, 2016 12:36 AM (link)

Comment Form

Only registered users may post comments.


2sic Daniel Mettler (125)
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?