NServiceBus Transport for RFC 1149

As readers of this blog already know, NServiceBus offers a great framework for building distributed systems with publish/subscribe, automatic retries, long-running business processes, high performance, and scalability. It offers a fully pluggable transport mechanism so that it can be run over MSMQ, RabbitMQ, ActiveMQ, Windows Azure, or even use SQL Server as its queuing infrastructure. No matter which transport you choose, NServiceBus enables you to build a highly reliable system with minimal effort.

But who wants that?

Honestly the developers at Particular have gone a little bit overboard with how easy they have made it to build these robust distributed systems. This is why it’s such good news that, thanks to me, there is finally an NServiceBus transport available that supports RFC 1149: IP Datagrams over Avian Carriers.

Read more »

Speaking at RavenConf 2014

I will also be giving my Modeling Tricks My Relational Database Never Taught Me talk at the first ever RavenDB conference in Raleigh, North Carolina on April 8. Click on the conference banner below for details.


Speaking at TCDNUG on RavenDB Modeling

This week I will be speaking at the Twin Cities .NET User Group:

Modeling Tricks My Relational Database Never Taught Me
Date: Thursday, April 6, 5:30 PM
Location: ILM Professional Services, 5221 Viking Drive, Edina, MN 55435

In this session we will explore several modeling scenarios from my own experience that can easily be achieved using RavenDB, but difficult (if not nearly impossible) to build using a classic relational database. The focus will be on helping those accustomed to SQL Server or other relational databases learn good document modeling skills by example, with a summary of document modeling guidelines at the end.

As always, my employer ILM Professional Services will be providing the pizza at the meeting.

TCDNUG has recently switched to using Meetup.com to register for these events, but apparently Meetup has become the victim of a very sophisticated DDoS attack and is temporarily unavailable. Seriously, who does that?

So if you are unable to actually register, please come anyway. We would love to see you there!

Excerpt from Learning NServiceBus

My publisher has allowed me to reprint my favorite part of my book, Learning NServiceBus, here on my blog. It is the introduction to Chapter 3, Preparing for Failure.

Why is it my favorite? Chapter 3 is the chapter that deals with how to be ready for the inevitable errors that will befall a system due to the fallacies of distributed computing, stupid user tricks, and plain outright buggy code. This is the part of NServiceBus that really grabbed me in the beginning and has never let go.

Plus, and I can’t stress this point enough, this is the part of the book about Batman.

Read more »


Last night my blog passed the 100,000 all-time views mark, which feels like a pretty cool (if ultimately fairly meaningless) accomplishment. The lucky 100,000th visitor will receive…….absolutely nothing of course, mostly because I have no way to figure out who they were. But that person and the 99,999 that came before have my thanks and appreciation at the very least.

I started this blog in 2010 thinking that I would blog about software development and beer. I quickly learned that although I love craft beer, I had absolutely no ability to describe a beer’s flavor and aroma in any sort of meaningful terms. As far as I was concerned, it was either tasty or not tasty. So the blog became 100% software development and my beer hobby became solely about drinking and enjoying, and later brewing as well. (I currently have a Honey Bee Ale in the fermenter that will be ready to enjoy just before Christmas.)

What I can say is that this blog has done a tremendous amount to advance my career, so if you are a junior developer thinking about starting a blog, don’t think about it, just do it. You will become a better writer, and learn things better through the process of explaining them to others. Then one day, it may help land you a great job or opportunity that may not have been available to you otherwise.

OK that’s it, I promised myself this post would not become a long-winded “why blogging is awesome” post.

So thank you to everyone for sharing in this arbitrary milestone with me. I hope that if you have found yourself here you have found something worthwhile. If not, leave me a comment and maybe I can do something about it!

Delivering official NServiceBus Training Course

While of course buying my book is a great way to get started with NServiceBus, absolutely nothing beats formal in-person training. There is no substitute from learning directly from someone who has been there before, who can provide both the info you need and the background behind it, with the ability to ask questions specific to your use case.

This is why I am so excited to be offering the formal 4-day NServiceBus training course. The course will be held on December 9-12 at ILM’s offices in Minneapolis, Minnesota. This is the official course with the official curriculum originally developed by Udi Dahan himself, but updated for all of the new features in NServiceBus V4.

Click here for all the details for the course, and to register to attend.

If you have any questions about the course, please contact me through the training site contact form or through the comments on this post and I’ll answer any question I can.

I’m looking forward to meeting some talented developers and hopefully throwing back a tasty beverage or two as well!

We’re also planning to hold more training courses on other topics soon, so be sure to watch my Twitter feed for updates.

InjectRouteData ActionFilter for ASP.NET MVC

If you really want to take control of your ASP.NET routes to create a RESTful or at least RESTish URL naming scheme, first you need to let go of default MVC convention-based routes (Controller/Action/{id}) and use something like AttributeRouting. (AR is now half-baked into MVC 5, unfortunately without some of the more useful things AttributeRouting has to offer, like the ~/routes.axd route debugging handler.)

In any case, once you use either method of getting attribute routes, you’re now faced with how to integrate that data in your controllers. The first step is to put a RoutePrefix attribute on your controllers, but then to get that data out, you have to scrape the data out of the RouteData manually within your action method, or override OnActionExecuting to do the same except drop the values in an instance variable.

Read more »

Angular/Ember/Knockout Data-Binding Comparison

Recently a colleague referred me to a video from Marius Gunderson’s session at JSConf EU 2013 entitled A comparison of the two-way binding in AngularJS, EmberJS and KnockoutJS. It’s an excellent watch, comparing and contrasting the two-way databinding capabilities of each product without descending into a flame war about which is better, and it only weighs in at 20 minutes long. Here’s the video itself.

Read more »

Developing with NServiceBus and RavenDB simultaneously

I presented an introduction to Service Oriented Architecture at Twin Cities Code Camp over the weekend, and unfortunately hit a little bit of a snag during one one of the demos, so unfortunately while the audience got to see all the code that makes Publish/Subscribe work in NServiceBus, they didn’t get to see it actually, you know, work. Such is the risk of a live demo. (Even if you test it the day before, which I did!)

This morning I was able to take a closer look at the error message and figure out what is going on. I’m currently starting a project using RavenDB so the first thing I did was to upgrade RavenDB to the latest stable version, 2.5 Build 2700.

Ummmmm….shouldn’t have done that.

A license for NServiceBus (including the developer license you get for free from the NServiceBus website) covers your use of RavenDB to handle NServiceBus related storage, for subscriptions, sagas, timeouts, and a few other things that are handled by the NServiceBus framework. If you want to use Raven for your own application (which I would highly recommend) you need a separate license for that in production.

For development where Raven isn’t really licensed anyway, I didn’t think it would matter that much, but I was wrong.

Raven.Abstractions.Exceptions.OperationVetoedException: PUT vetoed by Raven.Database.Server.Security.Triggers.WindowsAuthPutTrigger because: Cannot setup Windows Authentication without a valid commercial license.

Oops! NServiceBus V4 uses Raven 2.0 and hasn’t been tested with 2.5 yet. So what to do if you want to develop solutions with both simultaneously? First, allow NServiceBus to install RavenDB 2.0 on port 8080 as is the default. Then, if you want to develop with RavenDB 2.5 as well, install that to port 8081. In my opinion it’s easier to set the nonstandard port on your DocumentStore’s URL (which you have to set anyway) than to modify the NServiceBus conventions that (while they are overridable) expect to see RavenDB 2.0 living on port 8080.

Twin Cities Code Camp 15

I will be presenting an Introduction to Service Oriented Architecture, featuring NServiceBus, at the Twin Cities Code Camp 15 this weekend. The code camp is on the University of Minnesota campus so if you’re in the area, I would highly encourage you to come out and see me as well as some other awesome presentations. I will be speaking at 12:45 in room 3-180. Personally I’m really looking forward to seeing Judah Himango, the brains behind the new HTML 5 version of the RavenDB Management Studio, speak about TypeScript. Of course the code camp is entirely free, and I think you can still register.

As a bonus, I’ll be giving away a free hardcopy of my book, Learning NServiceBus, during my session!

I hope to see you there!