Bernie Cook's Blog

Azure, C#, .NET, Architecture & Related Tech News

Leave a comment

A Simple Differentiation of IaaS, PaaS & SaaS

CloudGetting a handle on how IaaS, PaaS and SaaS differ isn’t particularly difficult but I have to say I don’t think I’ve ever seen it illustrated, or explained, as well as this slide from the Windows Azure Jump Start tutorials on Channel 9.

Hopefully this helps clarify the difference between the three, particularly in light of the Windows Azure Infrastructure Services release in mid-April (2013) Continue reading

Leave a comment

Using dotPeek to Review IL Weaving

dotPeekThere are two types of Aspect Oriented Programming (AOP) in .NET; Interceptors and IL weaving. This post focuses on the later and illustrates how you can use a .NET decompiler to review the code generated by AOP post compilation processing using the IL Weaving approach, albeit the decompiled code.

The most well known AOP framework for .NET is PostSharp, which is what I’ll be using in this post. And one of the more well known .NET decompilers is dotPeek, developed by JetBrains, the company best known in the .NET world for ReSharper. You do have to pay for PostSharp (although there is a trial period), however dotPeek is free and simple to download and execute.

So what I’ve done is provide (1) the source code for a simple .NET console application I’ve knocked together, displaying the resulting decompiled code in dotPeek, then (2) I decorate one of the application’s methods with an AOP aspect and display the resulting decompiled code so you can see what PostSharp has done. Continue reading


Book Review: “Implementing Domain-Driven Design″

Implementing-Domain Driven Design CoverI’m a big fan of the Domain-Driven Design (DDD) principles and patterns so pre-ordered Vaughn Vernon’s “Implementing Domain-Driven Design” prior to it’s release in March this year (2013). Having finished it earlier this week I wanted to do some justice to this invaluable text by posting a blog which provides a synopsis of each chapter, as well as some general commentary about the book.

If you don’t read any further let me say, before you go, that if you’re interested in learning about DDD, or want a modern and comprehensive DDD reference book, then get your hands on a copy. This text easily gets a 5 star rating from me, which is akin to the ratings on and at the time of writing. Continue reading


Saving Changes is Not Permitted – SQL Server

Whether you’re using SQL Server 2008 R2 Management Studio or SQL 2012 Management Studio you may come across this particular warning when attempting to commit changes to an existing table:

“Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be recreated.” Continue reading

Leave a comment

Distributed Design: Applying the Command Pattern to Azure’s Web/Worker Roles

WorkerRoleOne place I regularly come across the use of the Command pattern is when working on Azure projects that employ worker roles to execute long running tasks initiated by a scheduled process or user action. The Command pattern lends itself to the distributed nature of these solutions with very little plumbing required when working in Azure.

The following post provides a sample application; CommandQueue which contains 3 examples of a web and worker role utilising the Command pattern. The web role is designed to provide a rapid responses to the user, offloading any lengthy operations to the worker role. The source code for the CommandQueue solution is available on GitHub so feel free to clone, compile and execute it while working through this post.

Continue reading


Azure Visio Shapes & Stencils

Azure VisioA few years ago, David Pullman posted a blog entitled “Windows Azure Design Patterns, Part 1: Architectural Symbols“, within which he released a large number of very useful symbols to represent all of the artifacts, resources, etc. that can be found in Azure. He was kind enough to release the icons in EMF and PNG format but not as Visio shapes. Thankfully a generous software architect by the name of Ricardo later released the same symbols for Visio. In addition, Simon Hart has also made available a number of additional Azure Visio shapes more aligned with the Microsoft Patterns & Practice’s look and feel.

These Visio shapes are an incredibly useful resource for those architects wishing to construct Azure diagrams for a variety of different scenarios. Unfortunately Microsoft hasn’t released any shapes or stencils for the Azure space, even in the latest release of Visio 2013. Shape samples and links to the aforementioned resources are provided below. Continue reading

Leave a comment

Put ReSharper In Your Toolbox

ReSharperReSharper, the productivity tool which extends the Visual Studio IDE, is one development tool that I would certainly not want to live without. It’s one thing to have a strong skill set and another to compliment it with a great set of tools.

I’d seen ReSharper in action a number of times back in early 2012 but was never sold on it – I mean Visual Studio is an amazingly rich IDE, how could you ever hope to make it better? Well JetBrains (the minds behind ReSharper) have done just that. ReSharper is designed as an extension to Visual Studio providing an array of productivity benefits for both teams and individual developers.

I’m conscious that by now I’m starting to sound like a salesman, but do bear with me. What I’ve done is bundle together a few ReSharper features in this post. Hopefully it’s enough of a introduction to convince you of it’s necessary place in your toolbox. Continue reading


Repository Caching with Aspect Oriented Programming

Repository Caching with Aspect Oriented ProgrammingThis post provides a walkthrough of how to implement basic cache handling at the repository layer using Aspect Oriented Programming (AOP). I’ve chosen PostSharp’s AOP framework and built a relatively simple Domain-Driven Design (DDD) solution in .NET to illustrate how it all ties together.

I want delve into too much AOP detail up front other than to reiterate the usual AOP pitch – that it’s an incredibly useful programming paradigm which addresses cross-cutting coding concerns within application development. What does that mean in English? Once you’ve mastered the basic AOP terminology and implementation requirements you can use it to remove a lot of duplicate code that appears throughout your solution. If you’re not familiar with AOP then take a quick moment to watch one of PostSharp’s many introductory screencasts or browse through their documentation. Keep in mind that AOP isn’t OOP as you work your way through the following code, it complements OOP extremely well but doesn’t follow object-oriented principles. Continue reading

Leave a comment

Free eBook: 50 Ways to Avoid, Find and Fix ASP.NET Performance Issues

50 Ways to Avoid, Find and Fix ASP.NET Performance IssuesRedgate just released a free ASP.NET eBook which contains 50 highly condensed, and highly practical, ASP.NET performance tips spanning a number of related topics; ORM, MVC, LINQ, SQL, async, string manipulation etc. Worth mentioning is that all of the tips came from developers in the .NET community.

The eBook can be downloaded in PDF format, and all it requires is your name, email and a number.

I’m a big fan of reading abbreviated “best of” tips on any framework in the Microsoft web stack and was quite impressed with the content and it’s presentation. I’d highly recommend this to any junior to intermediate-level ASP.NET developers.


Distributed Caching in Azure – Cache Worker Role

In June 2012 version 1.7 of the Windows Azure Platform release was introduced and with it came the new cache worker role. This provided another distributed cache management option for Azure developers alongside the likes of AppFabric Caching, or Memcached, to name a few. There are a number of ways to utilise and configure cache worker roles and this post covers one of them, providing a step by step guide to creating a new cloud solution where a web and worker role (cache clients) share the same cache worker role (cache cluster). Continue reading