What Do You Need to Send Data?

There are three transports that I tend to refer to as the "standard" transports of WCF: HTTP, TCP/IP, and named pipes. These transports receive a lot more attention than the other transports we've written, MSMQ and PeerChannel, although it's tough to get excited about named pipes.

Ignoring WCF for a moment, almost everyone that writes web applications uses HTTP as their transport. Almost everyone that doesn't use HTTP uses TCP/IP instead. There's a very long tail of other formats, ranging from tens of users to tens of thousands of users.

Now, let's stop ignoring WCF and start ignoring existing web applications. If you were writing an application that used any network protocol you wanted, what would you want to have support for? Well, it depends on what purpose you're building the application for. Let's say I want to write an application that streams some content to clients. Here's my list of five protocols I'd think about:

  1. BitTorrent
  2. Some instant messaging protocol
  3. TCP/IP
  4. Some cloud data storage service protocol
  5. UDP (with multicasting)

Most of these protocols have good reach and connectivity. There's either a naturally low bar for establishing connections or someone else has a vested interest in providing a low bar. Very few of these protocols has a natural programming model that makes writing applications fun and easy.  HTTP doesn't even make the top five.

Assuming that we can solve the programming model problem, which protocols are the right ones to put in the toolbox?