July 7, 2008

July DNUG Meeting

So tonight, in addition to the traditional pizza, we also had the traditional (I guess that's ok to say, it has only been a few months though) presentation and the soon to be traditional "Tool Tip".

This first presentation of a "Tool Tip" - my own name for it, though if you want to take it, do so Paladino - was vouching for and showing some uses of some of Sysinternals's utilities. Now, I'd heard of Sysinternals before, but didn't know they'd been bought by Microsoft.

Two things of note not mentioned at the meeting:

  1. Sysinternals is the group behind Rootkit Revealer, which famously uncovered the infamous Sony Music CD rootkit.
  2. Some PC games have copy-protection software that watches for either an installation of Process Explorer or for an active Process Explorer, uh, process. So, fair warning to those of you who may game on a machine you also use for developing.
The meat of the meeting though, was a presentation on the Windows Communication Foundation (WCF), which is part of the .NET framework since version 3.0. Its focus is on abstracting most of the communication involved in passing messages between clients and services (both local and intra-/inter-network) while allowing both the ability to build in your own handlers/channels for the communication and to communicate with at least some non-WCF clients or services.

It's all based around the decoupling of client and service (or server) through the use of Web Service Definition Language (WSDL) "contracts". This means that you don't need to explicitly share code between your two pieces and really facilitates having, say, an internal WinForms or WPF application and an external ASP.NET or Silverlight application that make use of the same functionality.

Since WCF is entirely opt-in through attributes (except for the actual host of the service, which I would hope is obvious), it should be pretty easy to adapt an existing codebase - probably the "business logic" layer of a standard WinForms app - for use as a service. And like I said above, depending on how the service is being hosted or the service itself, a WCF service can talk to a non-WCF client and a non-WCF service can communicate with a WCF client. That means you can talk cross-platform if you have a mixed shop.

It's some pretty cool stuff, especially with the use of the IExtensibleDataObject interface that allows a service and the client to pass around information that they don't really understand but some service in chain uses or requires. It's a sort of "soft versioning" so that the clients don't blow up when you change the service.