Slicing the Windows Communication Foundation Technology Stack, Part 1

Now it's time to start digging a little deeper into the guts of WCF.  I decided to make up a simple scenario that just happens to exercise lots of WCF technologies.  Since I'm not going to be writing about the various WS-Whatever standards for a while, I'll go easy on the application and service level protocols except for a couple of standards that impact decisions about the channel and transport layer.

Steve has a really big data problem. He wants to deliver customized maps to people over the Internet. He's going to expose a service that lets people send their location and a query as a request. He'll send them back a map image and markers that describe points of interest on the map. I'm sure that Robert Scoble knows a thousand companies with this business plan, but let's pretend that Steve thinks he can actually make money providing this service. Steve wants to authenticate users and make sure that they've paid him. Steve also wants to make sure that users get the maps that they've requested even when they're using a flaky cellular phone as their network provider. And, he wants make sure that no one else can see or tamper with the maps or queries.

A couple of the requirements jump out as triggering obvious technology needs.  Since we need to guarantee that messages arrive, we'll use reliable message.  Since we need confidentiality and integrity, we'll use SOAP security with some kind of trust scheme to provide the authentication.  It's also important to think about the performance of the scenario since we are transferring large messages.  Bandwidth is an issue so we'll use an efficient binary encoder for the messages with a lightweight TCP/IP transport.  This architecture gets a lot of things right, but we'll talk later about what it gets wrong.

Here's a quick sketch of what we've got so far:
 

I've indicated a couple of slices in the technology stack that correspond to different conceptual layers in WCF.  Off the top of the picture is the logic for the actual application and any application-level protocols that we might use, such as WS-Federation.  Below that are services like reliable messaging and security.  These provide the assurance that some complicated property is taken care of for us.  Below that at the messaging layer, there are technologies for constructing an envelope containing data and an address for delivery.  At the very bottom is the transport layer that is responsible for actually sending the data to the correct address.

Next time: Slicing the Windows Communication Foundation Technology Stack, Part 2