Indigo and Binary XML
Yesterday I attended
Indigo Day at VSLive! in San Francisco. I had not yet been in
Moscone West and I enjoyed it. The site is smaller than the older site where JavaOne is held, but it is above ground, with sunlight and with better cell phone reception. It was a useful day, although the crowds are substantially smaller, and older!, than what I've got used at
JavaOne, and the trade show was thin.
The keynote presentation was by Eric Rudder , and then later Don Box gave the first presentation in the Indigo track. They both did a good job and together with the other presenters provided a good overview of Indigo.
Indigo is MS's next generation WS platform and is intended to substantially improve the ease for writing WS endpoints that can be given different attributes, like reliability, security and transaction-support.
Indigo makes heave use of attributes, and the presenters showed it with examples in both Visual Basic and in C#. The basic principle is what Don describes as A, B, C: an endpoint is an Address, plus Binding, plus a Contract. The address is the URL for the service and the contract describes the types and operations exposed by the service. The binding is a combination of
the protocol, the encoding and properties of the interaction (security, reliability, flow).
I can't give a fair description of the material in this short blog, and I'll follow-up at some
point in the future, maybe when Microsoft publishes the presentations, which they
said they would do. I found a pointer to an
older document on Indigo but it is quite older and what they presented yesterday looks better.
In general, Microsoft is putting together a good WS foundation; a substantial
improvement over their older APIs, which were described as "legacy" APIs.
Since I want the Java platform to do at least as well, I'm quite happy that we have
been working hard on the next generations of JAXB and JAX-RPC and I really want to encourage you to
start looking at that to be sure they are as capable as possible.
There is one area of Indigo that I want to mention here. As I said, the binding of an
enpoint includes the protocol (things like HTTP, TCP, NamedPipe), the Security, Reliability and Flow attributes (based, for example, on WS-* protocols), and an encoder for the content. The whole thing is customizable,
which is very nice, and there are a few predefined bindings for the most
common cases. For example, there
is one binding that uses WS-I basic profile over HTTP, and another doing the same
over HTTPS. Encoders have names like WSHttpBinding, or NetHttpBinding (don't hold me to the exact names, though!).
The presentations described 4 WS* bindings and 4 Net* bindings. The WS bindings use textual XML as the encoder.
Guess what do the Net bindings use? Right! a binary XML encoder!
The binary XML encoding used in Indigo was described by Eric
as the binary encoding of the infoset. Later a member of the audience asked if the
encoding was described "somewhere" and Don replied "yes", but that was it, so
we don't know much. From the one-line description I would expect the encoding to be similar to the open standard developed by ISO/ITU-T
Fast Infoset that is being implemented
in the open source FI at Java.Net.
Indigo's binary XML encoding was mentioned in a number of places as a way to
speed up the communication, including specific cases like when talking to the SQL Server (textual XML also being available there). The story is similar to
the one we have been advocating for a while, so it is nice to have MS also
validating our approach. It would be nicer, though, if MS recognized the
value of having an open standard. If not participating in the development of the Fast Infoset standard, at least
participating in the
XML Binary Characterization WG at W3C. That WG has wide membership and MS absence is very noticeable.
If Indigo's binary XML encoding is proprietary, its appeal will be more limited.
Fortunately, Indigo's binding machinery is supposed to permit the use of other encoders,
so, if there is no special support for the proprietary encoding, one should be able
to plug in an encoder for the open Fast Infoset standard and use it and get
all the benefits of binary XML with interoperability. It will
be interesting to give it a try once Indigo goes out later this year in their