Joe Long from Microsoft gave a nice talk on the technology roadmap for Indigo, with a nice dose of prescriptive guidance for those of us who need to do distributed application development today but want to be mindful of the future. The talk was framed around this question: how do we support incremental upgrades of clients and/or servers as we move to Indigo?

Joe suggested two approaches to this problem:

  • We can teach the existing infrastructure new protocols. For example, if I have a component written that gets deployed and accessed via Enterprise Services (COM+), Microsoft can shim in some new bits under the hood to teach enterprise services how to talk via Indigo.
  • We can teach the new infrastructure about the existing legacy protocols. For example, if I write a new Indigo service, it could fall back in some fashion to talk via DCOM.

Microsoft is opting for the first approach - move the underlying protocols forward and don't look back. This does place some constraints on what you do today and what might or might not work in the future. Joe covered several of the common cases, which I'll briefly discuss here.

COM+ Binary Interoperability

Interesting stuff here - the goal is to not force a recompile of clients or servers by utilizing a bridged service environment. There are a few requirements for this to work though:

  • Servers must have a type library for metadata
  • Components must be COM+ / Enterprise Services. Sorry, your ATL DCOM NT Service won't magically be accessible via Indigo.
  • You must be explicit about interface types when used as parameters, i.e., don't pass around IUnknown references.
  • Avoid explicit use of COSERVERINFO.
  • Custom proxy/stub marshalling will not be supported.

MSMQ Binary Interoperability

I was a bit confused on this point, but it appears that Indigo will provide Indigo compatibility by automatically exposing MSMQ servers via web services.

ASMX Web Services

No real concerns about interoperability here, since this is SOAP/XML.

.NET Remoting and WSE

Out of luck - don't expect much help here.

Migrating Code to Indigo

I won't go into extensive detail here - you can check out the presentation yourself if you would like more details. The gist of changes revolves around instantiation of servers and proxies - everything else can pretty much remain the same if you are writing ASMX web services or Enterprise Services components today. .NET remoting is mostly orphaned, though porting won't be too difficult. The use of "new" to create client proxies will not be supported.

Where Should We Host Server Components?

I asked this question at the end of the talk. In the Longhorn world, as in today, there are two primary hosts for components - IIS / ASP.NET, and Enterprise Services. Joe's recommendation was to use ASMX web services by default and host in IIS. If you need Enterprise Services, go ahead and use it but opt for the library component model and still host in IIS if at all possible.