Bindings : a quick cut at an abstract definition

This is a quick take at what a high-level "binding" abstraction might
look like.  I start off by presenting a little context, then take a
stab at a (very small) abstract binding framework.

A couple of things to note first:

The message infoset is an entirely abstract notion, and the actual
representation of the infoset in memory or on the wire is entirely up to
the application.  An example: we may define an infoset item which
indicates that a given message is an RPC request.  One possible
implementation might actually insert a block into the message which
carries this information.  Another implementation may implicitly "know"
that this information is "virtually" in the message by virtue of the
fact that an API such as "call(method, arguments)" was invoked in the
execution path.

To send or receive a SOAP message, a binding must be selected.  Therefore,
it seems likely that the binding name itself is an item in the message's
infoset.

Bindings supply "facets".  Some of these facets may be entirely internal
to the binding in question, and in this case they do not need to be
specified in any particular way.  Some facets, however, may be expressed
in terms of the message infoset - doing this allows the definition of
concepts that are shared or referenced across multiple bindings or other
extensions.

OK, so a proposal for a binding framework might look as simple as this:

A binding should include:

1. A name (URI) for the binding

2. A specification of the binding's "private" facets.  This would be
any binding features/behaviors which do not have a well-defined
normative representation in the SOAP infoset, but still must be
clearly specified so that multiple implementations of the binding may
interoperate.  An example might be "this binding uses TCP port 4999".

3. A specification of the binding's "public" SOAP facets.  These would
be descriptions of how the binding generates, consumes, or in some
other way relates to particular normatively defined pieces of the
message infoset or other extensions/bindings.  This might include
message exchange patterns, security, or anything else that has been
defined by the WG or by extension writers.

... and that might be it.

I am still unsure about how to characterize the difference between
"encapsulation" bindings and "transport" bindings, and so have left this
intentionally vague in that respect.

Item 3 certainly could/should be expanded into more detail.  I also
note that it seems to me that the difference between a binding and
any other SOAP extension becomes somewhat unclear if we head down this
road - bindings, I think, are the only extensions allowed to specify
"private" patterns as in item 2, but aside from that it's very similar.
This may be a good thing or not.

Glen Daniels
Macromedia
http://www.macromedia.com/
                                Building cool stuff for web developers

Received on Monday, 30 July 2001 07:52:41 UTC