I got several emails as a response to my previous post and enjoyed them all. One proposed channel I saw and really liked was the mailboat channel .
On a more futuristic note, if the mars explorer were to use WCF, it would probably have the same extremely long latency and reliability issues that the Carrier Pigeon channel has. This brings us to the topic of 'message exchange patterns', or MEPs. The message exchange pattern exposed by all the above channels is a one-way datagram. And in reality, it is hard to think of any low-level communication that is not built on a one-way channel. However, this is not always the appropriate model to use in communication systems.
Two higher-level channel abstractions that WCF exposes are the Request-Reply abstraction, and the DuplexSession abstraction. More of these abstractions in my next post....
Sometimes, to explore the full meaning of an abstraction, you have to discuss the fringes - the cases where the abstraction almost works, but is quite ridiculous.
One such case is the Carrier Pigeon WCF (Indigo) Transport. In its core, a channel implementation should support sending and receiving a Message object. One way to send a Message object would be to serialize (in this case, manually write) the resulting XML on a piece of paper, tie it to a friendly pigeon, and send the message. The receiving side would deserialize the message by typing in the content of the paper. We don't yet plan on automating the pigeons themselves.
This transport has some interesting properties. The basic data unit is a datagram (piece of paper).
It is slow, low throughput, unreliable (pigeons get lost), does not have order guarantees and insecure (opponents can capture our pigeons, read the attached paper, and modify it). It can also be pretty messy.
However, the carrier pigeon transport would fit the WCF channel model. It can be composed with WS-Security to provide security, and WS-RM (or another reliability protocol, as WS-RM was not optimized for carrier pigeons) to provide ACKs and reliability, etc.
In reality, a similar transport has been used during WWI.
Do you have other exotic WCF channel ideas? leave me a comment or send me an email! -- Yaniv
My latest MSDN Magazine article was just made available on line here. Most of the article verbiage is dedicated to discussing using UDP from .NET (using managed sockets) and how you would solve general UDP-protocol issues using an abstraction layer over .NET.
However, the article also describes a solution to the same problem using Windows Communication Foundation (Indigo) using the UDP transport and the supplied reliability layer.
It is interesting to note that the WCF code spans 40 lines, while a partial implementation of similar behavior spans almost ten times more code. What's more, changing the behavior of the WCF code involves setting a few properties, while changing the behavior of the .NET sockets code requires much code, and even more debugging.
...We must have been doing something right...
Some other Indigo blogs on blogs.msdn.com that I regularly scan (and their recent post) can be found at -
Shy Cohen - http://blogs.msdn.com/shycohen/archive/2005/10/17/482086.aspx
Yasser Shohoud http://blogs.msdn.com/yassers/archive/2005/11/29/497997.aspx
Richard Turner - http://blogs.msdn.com/richardt/archive/2006/1/6.aspx
KavitaK - http://blogs.msdn.com/kavitak/archive/2005/10.aspx
Florin Lazar - http://blogs.msdn.com/florinlazar/archive/2005/10/4.aspx
If you blog on blogs.msdn.com and Indigo is in your DNA, drop me a line.
Of course, many Indigites blog on their personal sites or in blogs hosted elsewhere. I have not seen a list anywhere ; If I find one, I will link to it.
My name is Yaniv Pessach, and I am a member of the Indigo aka Windows Communication Foundation aka XML Web Services team.
Why This Blog?
The purpose of this blog differs from the goal of my personal website (http://www.yanivpessach.com) or my personal bLog - it will be focused on work-related topics, and I expect most posts to be about Indigo-related technology.
Enjoy the bLog.