September 05, 2018

DNN Geo-Replicated Deployment in Azure (and Others)

Earlier today I blogged about Geo-Replicated Application Deployment in Azure for those looking for true high-availability deployment. In that article, I noted that it isn't possible to deploy something like DNN to those environments without a bit more consideration. This posting looks at the special considerations, and some potential suggestions to work around DNN in these types of environment.

September 05, 2018

Geo-Redundant Application Deployment in Azure

Just a little over 24 hours ago a Microsoft Azure datacenter experienced an extreme outage. For those with hosting primarily inside of the South Central US location, it resulted in outages lasting from between 8 to 20 hours, with a few select sites still impacted as I write this. There is a common misconception that if you are in the cloud you are ok. This isn't exactly true, the configuration and deployment of your application within the cloud will be the final determining factor of your stability. It is one thing to be secure/stable with Geo-Redundant backups but is a whole different story to be Geo-Redundant Availability wise. In this post, I'll look into what it takes to be truly Geo-Redundant in Azure and why it is often overlooked.

August 06, 2018

Improving the Security of Azure App Service Websites

Azure Web App hosting within the Azure App service is an amazingly flexible product. As with any product, with great flexibility comes a plethora of configuration settings that could expose your application to more risk. In this post, I'll investigate settings and configurations that you should validate in your own applications to ensure you are as secure as possible.

July 19, 2018

Should, When, and How Can I Migrate to .NET Core

Now that we are a few years into .NET Core I am seeing more organizations start to look at the big picture and decide if they want to migrate to .NET Core, or are evaluating .NET Core for consideration on new projects. Over the past few years I've given multiple talks at conferences with the title "Should I Transition to .NET Core? Will It Hurt?" This talk has been very popular so I thought I'd share a bit of context that you cannot get with the slides to help you better understand what might make the best sense for your organization/project.

July 17, 2018

Reporting Code Coverage in VSTS with .NET Core

Recently I decided to go back to using VSTS for my CI/CD processes after having some great experience with it on a project. As I evaluated the processes that I was following, one thing was missing from my existing CI process, and that was reporting on Unit Test Code Coverage for my .NET Core projects. I'll admit, it was something that I hadn't exactly looked at in a while. When I first started with .NET Core Code Coverage was a "Coming Later" feature and I wasn't too concerned about it. Searching for solutions I found a plethora of crazy recommendations and using the out-of-the-box VSTS build process for .NET Core did not get me what I wanted. In this post I'll walk through the process to properly get Code Coverage Calculated with each build, this will also allow the "Test" -> "Analyze Code Coverage" option to work in Visual Studio.

June 11, 2018

2018 Nebraska Code Presentations

Last week I was a speaker at Nebraska Code, held in the Omaha, NE area.  It was a great event, and although I had technical issues with one of the session it was still another great event.  For those that attended my talks, this post contains the slides etc.

May 02, 2018

Managing Dependency Injection in .NET Core

.NET Core's support for Dependency Injection is quite amazing. However, I still see projects that implement some bizarre solutions for things that are not that complicated. One of these items is how you configure dependency injection for assemblies that make up a project but might not be part of the main project.

March 23, 2018

DNN Platform 9.2.0 Released - What You Need to Know

If you have been watching the newsfeeds this morning you most likely noticed the release of DNN 9.2.0. This is a release that many have been waiting for in recent months as there are a lot of great changes and improvements in this release. As with any release, there are things to be aware of, this release though requires some extra special attention, I'll cover a few key points from my perspective here.

March 20, 2018

Using Multiple Authentication/Authorization Providers in ASP.NET Core

I find that in many cases application developers need to create web applications that can support not only the web application itself but an API that might be used by a Mobile Application or otherwise. I have seen some methods used in the past to create these two interfaces, everything from home-grown security to the creation of two separate applications that do the same thing. With ASP.NET Core we can use multiple authentication providers so we can easily support various providers and control when each should apply. In this post, I explore the process of supporting multiple authentication providers.

December 28, 2017

Avoid MVC Core Performance Penalty with Html.DisplayFor()

Recently when working with an ASP.NET Core project I had a page that was taking an unnecessarily long time to render. Looking at my code I couldn't figure out what I was doing wrong, the query returned fast, and although I was working to display about 1,000 rows in an HTML table, it shouldn't be taking seconds when the query returned in 22ms. Upon deeper review, I uncovered a bug that had been a silent killer of performance in multiple applications.

December 04, 2017

Website Performance: Images & Compression

Website performance is one of those items that I have been talking about for years. It is a game that is constantly changing, but some items have been issues since the beginning of time, and yet they are still some of the biggest culprits when it comes to website performance. This post I'll dive in a bit on images, compression, and the steps you can take to optimize your site for the best performance possible, even if it is a large legacy site.

October 17, 2017

Confronting Your Entity Framework Performance Fears

This morning I was supposed to speak at DevUp in St. Louis, sadly due to a dead airplane battery I couldn't get myself down there in time. Although not as good as being able to be there in person, I wanted to make at least an effort to share the presentation materials, and code samples with everyone as this topic made for a very popular session at other events. So let us dive in!

October 09, 2017

Real-World ASP.NET Core Logging Configuration

ASP.NET Core provides a much better foundation for integration of logging into your projects. .NET Core allows you to quickly aggregate your logging with log messages coming from the runtime creating a full logging stream. Although a great platform when working inside of .NET Core for your first few projects trying to figure out exactly what it takes to get logging setup to a level that records it where you want it when you want it, and with the required granularity might having you wanting to pull your hair out! In this post, we will investigate a process to introduce complete logging to an ASP.NET Core project.

September 05, 2017

Taking Control of ASP.NET Identity Table Names

If you are like me, I love the power, and ease of use that comes with ASP.NET Identity. However, I find that the naming conventions for model objects related to identity do not necessarily meet the standards that I would like to use in my applications. As such, I find it necessary to take control of these names and work to standardize my projects, and this post explores this process.

August 25, 2017

Streamlining Azure AppService Backups for DNN/Evoq

With the continued adoption of Azure, and the great pricing, I am seeing more sites migrating to Azure. As we see more sites moving to Azure, I am starting to notice a few trends with regards to the way that sites are configured, backed-up, and restored using the Azure AppServices features. This post will look specifically at how to control your Backup processes with relation to DNN files to ensure a higher success rate for backups if there is interest in these topics I'll follow up with other Azure specific information.

August 25, 2017

Entity Framework Core & Complex Projects

For those migrating to Entity Framework Core (EFCore) the online documentation is very helpful for the most basic of projects. However, as you work to create more complex applications, things can get more complicated. One area I have witnessed being a concern is how to manage the extraction of your EFCore or Identity DBContext into a reusable project. This post will look at this process, and the steps necessary to properly manage interactions with migrations.

June 30, 2017

June 2017 DNN/Evoq and Module Security Summary

The past week has been a bit hectic in the DotNetNuke/Evoq space. Four confirmed security vulnerabilities were identified that could impact existing installations, one last week and three this week. Sadly, many sites have already been exploited by these vulnerabilities, adding a bit more urgency to the situation. Although many people are aware of the situation we have found that not everyone knows what is going on, so we thought it would be prudent to share what we know about the situation. This information is being shared both on Mitchel's Technical Blog as well as our corporate website.

May 23, 2017

Creating Effective, Repeatable, & Usable Code Demos

Over the years I have given more than 350 talks at various conferences, code camps, user groups, and other events. There are two things that I have always been very cautious about; demonstrations requiring an internet connection and those that require "live coding." Solutions for internet connectivity are relatively straightforward. I have historically tried many things to work through the "live coding" issues as well. But until recently I hadn't stumbled across the "right" solution. I think I might have the solution now!.

May 10, 2017

Updated ASP.NET Core 2.0 & Full .NET Framework

This week is the week of Microsoft's BUILD developer conference where lots of new announcements are typically made. Yesterday it was revealed that the next version of ASP.NET Core, version 2.0, will no longer support running on the full, existing .NET Framework. (.NET 4.7 for example). There has been a lot of various feedback on this topic, and I thought I'd chime in a bit with my opinion as well, as with all posts I welcome conversation and alternative viewpoints in the comments.

May 10, 2017

Adding WebApi & OAuth Authentication to an Existing Project

There are many tutorials out there that discuss the ease of setting up a new project, and checking all of the magic boxes to add Identity, WebApi controllers, and more. However while these may be helpful, in the real world situations are often not as simple. We might have existing projects that at the start didn’t need WebAPI - or maybe we used WebApi controllers in our code - but all in all, we didn’t get the proper security architecture in place.

In this post, we will walk through how to enhance an existing project to be able to create WebApi controllers and properly secure them using OAuth.

April 27, 2017

Publishing ASP.NET Core Applications to Azure Action Pack Hosting

The more I work with ASP.NET Core, the more I love the new way of doing things. We have far better language features to help make life easier, however, with all good, there is some bad. Compilation and deployment are something that still is just a bit more complicated than it should be. In the past few weeks, I've been working on getting a practical, full featured application deployed under ASP.NET Core. One of the hardest parts was getting the application published to my hosting environment. Everything would run locally just fine, but for one reason or another, I would not be able to get things working as expected on the hosting provider. Compile & Publish would finish in my automated environment without error, yet files were missing. Finally, I managed to figure out what was going wrong, so I thought I'd share.  

March 09, 2017

FireFox and Insecure Password Notifications

Passwords are something we talk about as developers a lot when working with custom systems. We talk about the logistics of how to reset them, how to store them, and related back-end options. It is often simply assumed that we will be using SSL when we submit these passwords to our websites. This assumption, however, is often a big oversight and exposes a potential point of risk to websites. I'm blogging about this today, because FireFox, starting with Version 52 introduces a feature that calls all of us developers on any oversight in this situation.

February 24, 2017

Take Control of Code Coverage Analysis with Exclusions

As developers Unit Testing makes our jobs easier, we have consistent tests to validate our work, change management becomes easier, and we can prove the functionality remains the same. In collaboration with various companies, however, I find that often the tooling gets in the way of developers understanding exactly how much of their important code is covered by unit tests. Visual Studio provides unit test coverage tools for reporting, yet often the tool ends up discouraging users due to a lower than expected rate of coverage. In this post, we will investigate a few common areas that can impact your unit test coverage, and how to prevent certain items from changing the reported coverage percentage.

January 30, 2017

Finding Performance Settings in DNN 9.x

With the recent release of DNN Platform version 9.0.0 & 9.0.1 I have been an increase in the requests for updates to my prior guides on locating the important performance settings since everything has moved to different locations. A major overhaul of my Performance Whitepaper is underway, however, I wanted to take a little bit of time to run through key settings for those new to 9.x. Consider this a high-level walkthrough of key concern areas.

January 25, 2017

Using Entity Framework with Legacy Databases

I find more people are interested in getting started with Entity Framework within their organizations. However, the various documentation and examples that exist don't necessarily give the best overall implementation solutions. I have worked with many people that have thought "we have a legacy database setup, we can't use entity framework" or "we cannot use migrations, so we can't use code first." Both are very common misconceptions, but something that isn't the case. It just takes a bit of work. In this post, we will dive into the specifics of implementing Entity Framework to a legacy database, where we cannot rename tables and other objects without substantial effort. A link to full code will be provided at the bottom.

January 24, 2017

Development Tools: NDepend & Quality

I often get asked which tools I use for development or reviewing of existing codebases. This question is often hard to answer directly, as every situation is a bit different. However, I thought it would be worth trying to revisit the tooling topics to help others possibly improve their environments by knowing the tools I find helpful. This post will be the first of a limited number of occasional posts on tooling. With the primary focus of my topics still being with ASP.NET, MVC, and performance. If you find these helpful, though, I'd love to get some feedback.

November 11, 2016

Applying A Methodical Approach to Website Performance Issues

Last week the folks at PostSharp where kind enough to host me for a webinar on website performance.  For those that have attended my various performance talks over the years I'm a firm believer in following a process every time to resolve issues.  In this webinar, I discuss the beginning portions of approaching website performance issues, tips that are helpful for those with existing applications, or even those that are starting fresh.  

November 09, 2016

Be Part of the Future: Test/Review DNN 9.x

Exciting times are upon us as users within the DNN ecosystem, regardless of if we are users of the OpenSource DNN Platform product, or if we are users of the commercial Evoq product lines.  The next release of DNN 9 will include some of the most significant changes to functionality that we have seen in many years.  With the coming change, we are at a crossroad, where community involvement is critical to ensure that the next version of the product is as good as possible.

September 24, 2016

Properly Using DNN's Custom 404 Page

Recent issues with a few clients I have encountered some "unusual" behaviors.  Either a situation where we had an unusual redirect situation, or we had pages that were showing HTTP 200 (success) status responses when in all reality the page truly didn't exist.  In the end, we had an IIS customization configured to handle certain types of 404's that DNN wouldn't handle, such as those for missing images, javascript files, and more.  Nothing that we haven't done for quite a while.
September 07, 2016

Date Fields, ASP.NET MVC, HTML5, and Web Browsers

Life as a developer with our current tools is quite amazing.  Even those of us without any real "creative" side can build applications that look nice, that accept user inputs nicely and provide a decent user experience.  The one downside to these features is the different times where we can be tricked by the tools and trying to track an issue down will result in needing to dig deep to find the "right" solution for the situation at hand.  In this case I'll share a quick tip with dates & MVC and HTML5.

July 15, 2016

Being a Good DNN Citizen: Referencing Database Tables

For quite a while now I have written about development best practices, methods to improve the performance of developed solutions, and a little about how to be a good citizen with other portions of the application.  In this post I will take a look at a few standard situations that I have encountered when working with developers new to the DNN Platform.  

July 14, 2016

Avoiding Unexpected Bundling Issues with ASP.NET MVC

One of the most commonly overlooked tasks that I find when working with development groups is the act of Bundling and Minification of CSS and JS resources. There are many solutions to accomplish this task and various developers will have their own preferred frameworks.  I personally find that the features provided by ASP.NET meet many of my needs quite well, however, there is one common gotcha that can impact production deployments that might not get fully tested.  This post is not specifically about HOW to bundle with ASP.NET, but is more around how to prevent unexpected issues in production.

May 26, 2016

Resolving Issues with Security Compromised DNN Sites

Yesterday I published a blog posting about a recently re-surfaced security vulnerability within the DNN/Evoq platform.  In that post, I provided the steps necessary to mitigate the risks associated with the exploit.  If you have not yet taken the steps listed in that posting, please be sure to take those steps immediately.  This posting is geared towards the proper auditing, review, and resolution of any issues that might be present on a compromised site.  Please note, even if you do not believe you were compromised PLEASE review the first section of this post to be sure.
May 11, 2016

Update to DNN/Evoq Url Redirect Provider for Multi-Portal Installations

One often overlooked free utility for DNN/Evoq are the open-source DNN Extension Url Providers. These providers are there to help with social URL's and URL redirects. The URL Redirect provider is a must-have solution for those migrating from other platforms into DNN as it provides a method to easily add complex URL redirects into your system for old URLS. Even for those that are working under the Evoq URL provider. I was made an administrator of this particular product more than 2 years ago, however, we haven't had much of a need to add features until today.
April 05, 2016

When Memory Caching Doesn't Mean Memory

For a number of years I have been providing guidance on how to get the best performance from DNN. One of my key recommendations is to change the caching mode to "Memory" from the default setting of "File." The setting change itself is quick and harmless, simply change the value in Host Settings are you are done. Well, come to find out it isn't exactly that easy.
January 16, 2016

Preparing for Load Balancing Diagnostics a Retrospective

As web application become more complex, or as individuals demand better performance or reliability, the addition of more web nodes is very common.  For those with a technical background we can easily see the complexity that is introduced as we load balance our applications.  Simple tasks such as writing a file to the local file system have now become far more complicated tasks.  How are the servers getting their content?  Shared file system?  File Replication? (DFS, RoboCopy, etc.)  When things work beautifully, it is great, but when they don't it can be a nightmare.  In this post I want to share a few "lessons learned" as it relates to load balancing diagnostics.  The information contained in this post is specifically related to working within a DNN Installation, however, the same principals will apply regardless of the platform.

December 30, 2015

DNN/Evoq Scheduler: Setting Expectations

One of the fundamental features of the DNN/Evoq platform is the the internal "Scheduler" system.  Creating a Scheduled Job is an easy process, and something I have blogged about in the past.  However, I have been seeing more questions recently around what exactly is meant by the "5 Minute" Interval or other settings regarding the scheduler jobs.  The root cause is the differences in expectations versus what is possible.
December 29, 2015

Debugging & Managing NuGet Packages A Lesson Learned

Over the past few years those of us in the .NET development space have been forced to jump on the NuGet bandwagon as it relates to adding certain dependencies to our own projects.  No matter what our individual thoughts are with regards to NuGet we must learn to live with the tool, and use it to the best of our abilities.  Most of the time the packages that we use will be well-formed and managed in a responsive manner.  However, as I recently learned, that isn't always the case.  When things start to go awry it can make your standard diagnostic processes less than successful.  Given these experiences I wanted to share two recent experiences with NuGet, not in an effort to shame any of the involved parties, but to help illustrate the importance of looking at solutions & packages in a different light than your standard development processes.

November 23, 2015

St. Louis Days of .NET / DevUp Followup

On Saturday November 14th, 2015 I gave three presentations at the St. Louis Days of .NET / DevUp conference. For those in attendance, or for those interested in the topics discussed the presentation materials are all here.

November 20, 2015

Check Your DNN Configuration for Performance!

More than six years ago I created the first version of my  DNN Performance Best Practices guide.  This guide has been downloaded by thousands of people looking to get the best performance out of their DNN installations.  The guide has been the training tool I've used for new members of my staff, and it serves as the baseline for any new DNN installation that we work with.  However, in this post I want to draw attention to what has recently become a silent killer with regards to DNN performance.  

October 08, 2015

Handing Namespace and Class Changes in Entity Framework

Entity Framework is an amazing set of tooling that helps to manage data access in an efficient manner, however, it seems that when things start to go "funny" it can be a major time-suck.  A recent issue that I experienced that I thought would be worth sharing was an issue related to applying migrations.  Adding migrations is something that has become trivial, yet one day my project reported Unable to generate an explicit migration because the following explicit migrations are pending:.... With every single one of my existing migrations listed.  This was highly curious, as the application has been in use, in production, for the better part of a few months.

September 23, 2015

Fixing Failing DNN Scheduler DNN 7.3.x Issues

In the past few months I have had to work with various issues with DNN/Evoq sites not executing scheduler jobs.  A number of various blog posts as well as forum posts have been started on the issue, and all point to a similar issue with regards to case-sensitivity with the scheduler and the web server name.  I had a recent situation though where I had fixed all of the issues outlined but was still seeing an error.

September 17, 2015

Don't Fear the Cache

Over the past three to four years I have spent extensive time working with customers to improve performance.  As part of this endeavor I have had the pleasure of working with numerous internal, external and third-party development teams for these companies and the experiences have provided a great deal of insight to how people look at performance with software development.  This experience transcends platforms as the specific concern with this post has been experienced with ASP.NET MVC Projects, DNN Projects, WPF projects, and even those on mobile devices.  Although each platform or process will have different rules and requirements for performance and methods to manage it, there are a few constants. This post is going to be the first of many posts around performance optimization and development. best practices. 

September 08, 2015

Avoiding Issues with DNN EncryptParameter

Working with DNN extension development we often need to share information from page-to-page or other locations within our application and we want to do so in a secure manner.  For the longest time DNN has contained a handy set of methods in the UrlUtils namespace, EncryptParameter and DecryptParameter.  They are easy to use, but just recently I have uncovered a very unusual situation that resulted in an error.  Funnily enough, this code has been running in production for more than 5 years!

August 25, 2015

ASP.NET MVC 5 & Bootstrap 3 Validation Usage

There have been many posts out there that show various solutions to use ASP.NET MVC 5 with Bootstrap 3 style input validation.  Some of the solutions are far better than others, and others looked perfectly elegant, yet they didn't necessarily result in changes working the way that one would expect.   After trying multiple solutions I found that I was able to take one of the more elegant solutions and it was working for "success" but wasn't working for error states, so I decided to dive in an fix it for my situation.

Content provided in this blog is provided "AS-IS" and the information should be used at your own discretion.  The thoughts and opinions expressed are the personal thoughts of Mitchel Sellers and do not reflect the opinions of his employer.

Content Copyright

Content in this blog is copyright protected.  Re-publishing on other websites is allowed as long as proper credit and backlink to the article is provided.  Any other re-publishing or distribution of this content is prohibited without written permission from Mitchel Sellers.