June 13, 2006
@ 07:14 PM

empox v. (ĕm-pŏks)
      1. The act of adding POX endpoints to an application.

Categories: Other Stuff

My first of two sessions this week here at TechEd is on Thursday, at 2:45pm in room 153ABC on "Designing Bindings and Contracts".

I realize that the title sounds a bit abstract and a different way to put this would be "How to choose the correct bindings and what to consider about contracts in a variety of architectual scenarios", but that would have been a bit long as a title. in the talk I'll explain the system-defined bindings that we ship in the product so that we've got stuff to work with and then I'll get out the tablet pen and draw up a bunch of scenarios and how our bindings (read: communication options) make sense in those. What's the best choice for N-Tier inside and outside of the corporate perimeter, what do you do for queueing-style apps, how do you implement volatile or durable 1:1 pub/sub, how do you implement broadcasts and where do they make sense, etc.

Categories: Architecture | Indigo | WCF

We've just released the "Windows Communication Foundation RSS Toolkit" on our new community site. This toolkit, which comes with complete source code, illustrates how to expose ATOM and RSS feeds through WCF endpoints. I will discuss the toolkit in my session CON339, Room 107ABC, Friday 10:45am here at TechEd.

Categories: TechEd US | Indigo | WCF

Just so that you know: In addition to the regular breakout sessions, we have a number of interactive chalk talks scheduled here at the Connected Systems Technical Learning Center in the Expo Hall. Come by.

Categories: TechEd US | Technology | Indigo | WCF | Workflow

June 12, 2006
@ 12:48 PM

This is my first TechEd! - as a Microsoft employee. It's of course not my first tech event in my new job (Egypt, Jordan, UK, France, Switzerland, Holland, Belgium, Denmark, Las Vegas/USA, Slovenia, and Israel are on the year-to-date list - on top of three long-distance commutes to Redmond), but the big TechEds are always special. It'll be fun. Come by the Connected Systems area in the exhibition hall and find me to chat if you are here in Boston.

Frankly, I didn't expect a Sunday night keynote to be nearly as well attended as it was, but it looks that experiment mostly worked. The theme of the keynote were Microsoft's 4 Core Promises for IT Pros and Developers nicely wrapped into a video story based on the TV show "24" and with that show's IT superwoman Chloe O'Brian (actress Mary Lynn Rajskub) up on stage with Bob Muglia (our team's VP far up above in my chain of command), who acted as the MC for the show. Finally we got an apology from a Hollywood character for all the IT idiocy the put up on screen. Thanks, Chloe.

Our team has a lot of very cool stuff to talk about at this show. The first highlight is John Justice's WCF Intro talk (Session CON208, Room 157ABC) today at 5:00pm with a "meet the team" panel Q&A session at the end. Block the time.

Categories: Technology | Indigo | WCF

Late last night, my colleague James Conard, who has worked and worked and worked tirelessly on this for the past few months and has shown great patience with a big group of people pulling into all sorts of directions as we got this together has flipped the switch to turn on the new .NET Framework 3.0 community portal family at netfx3.com

The new Windows Communication Foundation community home is at http://wcf.netfx3.com and it's a great improvement over the small, hastily-thown-together site that we used to have. There'll be a number of news bits and announcements throughout and after TechEd at the new site, so it might be a good idea to subscribe to the feed now. 

My official "Welcome!" post over on the new site is here, the James' site-wide welcome message can be found here.

Categories: Indigo | WCF

June 9, 2006
@ 06:01 PM

Two killer goals (1:0 and 4:2), one clear offside goal against us and a ref who likes to be in the player's way. Entertaining, fun, won. Next one, please.

Categories: WM 2006

... or as Pluralsight's main security dude and newly crowned MSDN guest editor Keith Brown calls it more formally: Identity and Access Management Developer Center on MSDN.
Categories: MSDN

Doug Purdy, our Group Program Manager, runs a wodge of home-cooked code every now and then to produce the link list below. I thought that you all out there might find that valuable and therefore I stole a copy of the list for you.

Workflow
Passivation (Dehydration, Unloading) Policy [5/19/2006 4:38:00 PM] -- Advanced Workflow: Enabling Tricky Scenarios
A couple of great new workflow articles [5/29/2006 3:28:00 PM] -- Paul Andrew
WinFX Beta 2 is Released [5/23/2006 6:20:00 PM] -- Paul Andrew
Bill Gates exec email mentions Windows Workflow Foundation [5/17/2006 9:11:00 AM] -- Paul Andrew
Define and execute WF rules on any target object [5/21/2006 11:50:00 AM] -- Moustafa Khalil Ahmed's Space
Services and the Business/IT Gap [5/30/2006 8:30:59 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
WorkflowDesigner hosting and Rules [6/1/2006 11:13:15 PM] -- Jon Flanders' Blog
WorkflowInstance.GetWorkflowDefinition [6/1/2006 10:27:50 PM] -- Jon Flanders' Blog
Absolutely - I am a Quicklearn instructor - this proves it [5/25/2006 10:49:02 AM] -- Jon Flanders' Blog
WF and Serialization Part One [5/23/2006 9:42:25 AM] -- Jon Flanders' Blog
Dave Green on using workflow [5/17/2006 9:40:10 AM] -- Jon Flanders' Blog
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Bracha and Bray on Continuations [5/20/2006 7:11:00 AM] -- Don Box's Spoutlet
WinFX Beta2 has officially shipped [5/23/2006 11:03:05 PM] -- OhmBlog
WF Q & A [5/23/2006 8:18:00 AM] -- Jeffrey Schlimmer's Blog
VSlive 2006 [5/18/2006 2:14:00 PM] -- Welcome to The Metaverse
Biztalk WSE 3.0 Adapter Ships [5/23/2006 9:21:00 PM] -- Mark Fussell's WebLog
TechEd 2006: WCF and WF Chalk Talk Schedule [6/2/2006 9:42:00 PM] -- Kavitak's WebLog
TechEd 2006 - Chalk Talks on Custom Channels [5/20/2006 7:43:00 PM] -- Kavitak's WebLog

Transactions
Passivation (Dehydration, Unloading) Policy [5/19/2006 4:38:00 PM] -- Advanced Workflow: Enabling Tricky Scenarios
WF and Serialization Part One [5/23/2006 9:42:25 AM] -- Jon Flanders' Blog
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
WCF Webcasts in June [5/31/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Versioning for Addresses, Envelopes, and Messages [5/30/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Creating Custom Bindings [5/25/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
An alternative "WCF to IBM Mainframe CICS" approach [6/1/2006 10:27:00 AM] -- distilled
WinFX Beta 2 is out there [5/23/2006 8:19:00 AM] -- distilled
Rev your transaction engines for WinFX Beta 2 [5/22/2006 9:53:00 PM] -- distilled

Indigo
WinFX Beta 2 is Released [5/23/2006 6:20:00 PM] -- Paul Andrew
So What Is A WCF Configuration Extension Anyways? [5/26/2006 10:44:00 AM] -- Mark Gabarra's Blog
Nothing this week [5/16/2006 12:05:00 PM] -- Mark Gabarra's Blog
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Look, look, my blog is on MSDN [5/26/2006 9:19:11 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Lost questions [5/17/2006 11:23:21 PM] -- Brain.Save()
TS-5540 Summary by an audience [5/30/2006 6:08:51 PM] -- Arun Gupta's Blog
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
WCF Webcasts in June [5/31/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Versioning for Addresses, Envelopes, and Messages [5/30/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Choosing a Transport [5/24/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Today's Real News: Beta 2 Released [5/23/2006 12:00:00 PM] -- Nicholas Allen's Indigo Blog
Resources for Channel Authors [5/17/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Building a Custom Message Encoder to Record Throughput, Part 4 [5/16/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
WCF Impersonation for Hosted Services [5/18/2006 2:19:00 AM] -- Wenlong Dong's Blog
WinFX Beta2 has officially shipped [5/23/2006 11:03:05 PM] -- OhmBlog
UnREST over WS-* and other "enterprisey" things [5/17/2006 8:38:54 AM] -- TheArchitect.co.uk - Jorgen Thelin's weblog
httpcfg Flag Weirdness [5/16/2006 6:18:00 AM] -- Musings from Gudge
VSlive 2006 [5/18/2006 2:14:00 PM] -- Welcome to The Metaverse
WSE 3.0 in June 2006 MSDN Magazine [5/23/2006 10:07:00 PM] -- Mark Fussell's WebLog
Biztalk WSE 3.0 Adapter Ships [5/23/2006 9:21:00 PM] -- Mark Fussell's WebLog
TechEd 2006: WCF and WF Chalk Talk Schedule [6/2/2006 9:42:00 PM] -- Kavitak's WebLog
Beta2 of WinFX Runtime Components v3.0 now available [5/23/2006 1:43:00 PM] -- Kavitak's WebLog
TechEd 2006 - Chalk Talks on Custom Channels [5/20/2006 7:43:00 PM] -- Kavitak's WebLog
An alternative "WCF to IBM Mainframe CICS" approach [6/1/2006 10:27:00 AM] -- distilled
WinFX Beta 2 is out there [5/23/2006 8:19:00 AM] -- distilled
Rev your transaction engines for WinFX Beta 2 [5/22/2006 9:53:00 PM] -- distilled

Standards/Protocols
Define and execute WF rules on any target object [5/21/2006 11:50:00 AM] -- Moustafa Khalil Ahmed's Space
So What Is A WCF Configuration Extension Anyways? [5/26/2006 10:44:00 AM] -- Mark Gabarra's Blog
Microsoft Architect Connections (MSAC) [6/1/2006 7:38:00 AM] -- Service Station, by Aaron Skonnard
Autonomy isn't Autonomy - and a few words about Caching. [6/1/2006 7:18:43 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Services and the Business/IT Gap [5/30/2006 8:30:59 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Look, look, my blog is on MSDN [5/26/2006 9:19:11 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Blogging from Office 12 [5/27/2006 6:40:22 AM] -- Brain.Save()
Hanselminutes Podcast 19 [5/31/2006 12:15:40 AM] -- ComputerZen.com - Scott Hanselman
Hanselminutes Podcast 18 [5/25/2006 9:26:25 PM] -- ComputerZen.com - Scott Hanselman
Subtle Behaviors in the XML Serializer can kill [5/24/2006 11:44:25 PM] -- ComputerZen.com - Scott Hanselman
Articles on Sun/Microsoft interoperability [5/18/2006 1:16:35 AM] -- Arun Gupta's Blog
Introducing wsit.dev.java.net [5/16/2006 5:23:06 PM] -- Arun Gupta's Blog
Ballmer makes Microsoft's case to Wall Street [5/31/2006 6:48:00 AM] -- Todd Bishop's Microsoft Blog @ SeattlePI.com
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Inside the Standard Bindings: BasicHttp [6/1/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
WCF Webcasts in June [5/31/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Versioning for Addresses, Envelopes, and Messages [5/30/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Choosing a Transport [5/24/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Resources for Channel Authors [5/17/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Building a Custom Message Encoder to Record Throughput, Part 4 [5/16/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
WCF Impersonation for Hosted Services [5/18/2006 2:19:00 AM] -- Wenlong Dong's Blog
Developers fail to care about one sided religious war [5/25/2006 4:56:51 PM] -- Marc's space terminal
Don't be that guy (EPR version) [5/22/2006 3:07:32 PM] -- Marc's space terminal
VB9 and Atom [5/17/2006 9:27:00 PM] -- Don Box's Spoutlet
On the C# 3.0 Preview: Some Thoughts on LINQ [5/17/2006 6:35:13 AM] -- Dare Obasanjo aka Carnage4Life
UnREST over WS-* and other "enterprisey" things [5/17/2006 8:38:54 AM] -- TheArchitect.co.uk - Jorgen Thelin's weblog
So you want to learn WSE 3.0? A short primer on how and where to start. [5/25/2006 8:49:00 PM] -- Mark Fussell's WebLog
Biztalk WSE 3.0 Adapter Ships [5/23/2006 9:21:00 PM] -- Mark Fussell's WebLog
Beta2 of WinFX Runtime Components v3.0 now available [5/23/2006 1:43:00 PM] -- Kavitak's WebLog
WS-Policy Working Group [6/2/2006 5:50:09 AM] -- Chris Ferris
Two articles, one good and one bad... [5/19/2006 7:30:00 AM] -- XML Nation

REST
Microsoft Architect Connections (MSAC) [6/1/2006 7:38:00 AM] -- Service Station, by Aaron Skonnard
Developers fail to care about one sided religious war [5/25/2006 4:56:51 PM] -- Marc's space terminal
Windows Live Gadgets SDK Released [5/26/2006 11:09:15 AM] -- Dare Obasanjo aka Carnage4Life
New Version of Windows Live Local Shipped [5/24/2006 10:12:31 AM] -- Dare Obasanjo aka Carnage4Life
My Microsoft [5/18/2006 12:33:29 PM] -- TheArchitect.co.uk - Jorgen Thelin's weblog

POX
Microsoft Architect Connections (MSAC) [6/1/2006 7:38:00 AM] -- Service Station, by Aaron Skonnard
Choosing a Transport [5/24/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog

SOA
Autonomy isn't Autonomy - and a few words about Caching. [6/1/2006 7:18:43 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Services and the Business/IT Gap [5/30/2006 8:30:59 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Putting the User back into SOA - my first ARCast! [5/19/2006 11:36:00 AM] -- simon.says
Two articles, one good and one bad... [5/19/2006 7:30:00 AM] -- XML Nation
Noted [6/1/2006 8:51:06 AM] -- Barry Briggs' Weblog

Web Services
Autonomy isn't Autonomy - and a few words about Caching. [6/1/2006 7:18:43 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Services and the Business/IT Gap [5/30/2006 8:30:59 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Look, look, my blog is on MSDN [5/26/2006 9:19:11 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
TS-5540 Summary by an audience [5/30/2006 6:08:51 PM] -- Arun Gupta's Blog
JavaOne 2006 TS-5540 Slides [5/23/2006 11:31:05 AM] -- Arun Gupta's Blog
JavaOne 2006 - Project Tango Keynote Demo [5/17/2006 1:20:43 AM] -- Arun Gupta's Blog
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
WCF Webcasts in June [5/31/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Versioning for Addresses, Envelopes, and Messages [5/30/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Developers fail to care about one sided religious war [5/25/2006 4:56:51 PM] -- Marc's space terminal
Windows Live Gadgets SDK Released [5/26/2006 11:09:15 AM] -- Dare Obasanjo aka Carnage4Life
So you want to learn WSE 3.0? A short primer on how and where to start. [5/25/2006 8:49:00 PM] -- Mark Fussell's WebLog
Biztalk WSE 3.0 Adapter Ships [5/23/2006 9:21:00 PM] -- Mark Fussell's WebLog
An alternative "WCF to IBM Mainframe CICS" approach [6/1/2006 10:27:00 AM] -- distilled
[ANN] Tungsten 1.0 - Web services platform [5/24/2006 2:06:44 PM] -- Davanum Srinivas' weblog
Web Services are Dead, Long Live Web Services [5/25/2006 6:43:37 AM] -- mnot’s Web log
WS-Policy Working Group [6/2/2006 5:50:09 AM] -- Chris Ferris
Two articles, one good and one bad... [5/19/2006 7:30:00 AM] -- XML Nation

Remoting
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions

WSE
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
WCF Webcasts in June [5/31/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Resources for Channel Authors [5/17/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
So you want to learn WSE 3.0? A short primer on how and where to start. [5/25/2006 8:49:00 PM] -- Mark Fussell's WebLog
WSE 3.0 in June 2006 MSDN Magazine [5/23/2006 10:07:00 PM] -- Mark Fussell's WebLog
Biztalk WSE 3.0 Adapter Ships [5/23/2006 9:21:00 PM] -- Mark Fussell's WebLog

COM/MTS/COM+/EnterpriseService
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog

IIS
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions
Choosing a Transport [5/24/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
Building a Custom Message Encoder to Record Throughput, Part 4 [5/16/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
WCF Impersonation for Hosted Services [5/18/2006 2:19:00 AM] -- Wenlong Dong's Blog

MSMQ/System.Messaging
Is .NET Remoting Dead? [5/26/2006 9:19:17 AM] -- Clemens Vasters: Enterprise Development and Alien Abductions

Serialization
Subtle Behaviors in the XML Serializer can kill [5/24/2006 11:44:25 PM] -- ComputerZen.com - Scott Hanselman

Security
Introducing wsit.dev.java.net [5/16/2006 5:23:06 PM] -- Arun Gupta's Blog
TechEd 2006 Chalk Talk Schedule [6/2/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
UnREST over WS-* and other "enterprisey" things [5/17/2006 8:38:54 AM] -- TheArchitect.co.uk - Jorgen Thelin's weblog
VSlive 2006 [5/18/2006 2:14:00 PM] -- Welcome to The Metaverse
TechEd 2006 - Chalk Talks on Custom Channels [5/20/2006 7:43:00 PM] -- Kavitak's WebLog

AJAX
CEO Schmidt on question of Google browser [5/31/2006 11:46:00 AM] -- Todd Bishop's Microsoft Blog @ SeattlePI.com
WCF Webcasts in June [5/31/2006 2:00:00 AM] -- Nicholas Allen's Indigo Blog
[ANN] Tungsten 1.0 - Web services platform [5/24/2006 2:06:44 PM] -- Davanum Srinivas' weblog

System.Net
VB9 and Atom [5/17/2006 9:27:00 PM] -- Don Box's Spoutlet

Categories: WCF | Workflow

My PM colleague Nicholas Allen is certainly on my list for "best blogging newcomer of 2006".  He started in February, got hooked, and I am not sure whether he actually did leave the keyboard since then.

Nicholas just started a blog series that explains the system-defined (formely known as: standard-) bindings that we ship with WCF. He's got three of them explained now and my guess is that there are more to follow:

While you are there, make sure to subscribe to Nicholas' feed and also take a look around and look at earlier posts. His channel category is a gold mine and the same can be said of the transports and ... everything there is fabulous stuff.

Categories: Indigo | WCF

June 6, 2006
@ 08:35 PM

I'm running Vista since Sunday.

Surprised? I mean, are you surprised that I haven't been running Vista for the last several months already? Realistically, given I am one of a very small group of members of the greater Indigo team who telecommute across the Atlantic, running early bits that host all of my work tools including email and RAS/VPN lifeline with all the SmartCard drivers was a pretty big risk that I wasn't willing to take up to Beta 2 and until a reasonably large number of folks assured me that Vista worked ok for them. Selfhosting prerelease bits is everyone's individual decision at Microsoft and while many people are very happy beta testers, there is a business to be run as well.

All that said, I have made the move on the "upgrade from XP path" and as more and more of the stuff on my disk gets indexed for search and as I start remembering the new ways to do things, I increasingly like it. Really. All the essential stuff works and even something much less important such as Media Center on my Tablet PC with a USB DVB-T receiver worked right away without any hiccup in setup. I am actually pretty impressed.

Categories: Windows

Christian Weyer stars in a new episode of the German dotnetproTV series and masterfully explains the Windows Communication Foundation. If you don't understand German, you may still enjoy Christian's flip-chart skills and overall good looks. ;-)

Christian Weyer – Microsoft Regional Director und allgemein anerkannter und geschätzter Web Services Erklärbar – ist der  Star der neuesten dotnetproTV Episode zum Thema Windows Communication Foundation. Ich habe mir die Episode gerade angesehen und … Holla die Waldfee! … das ist einer der besten Überblicke zu WCF, die ich bisher gesehen habe! Und der Dialog mit Ralf Westphal ist natürlich kurzweilig und interessant wie immer. Hut ab!

Und weil mir das Thema natürlich am Herzen liegt bin ich sehr froh, daß dotnetpro für diese Folge nicht nur einen „Teaser“ zur Verfügung stellt, sondern Christians ganze Show in der ganzen 370MB großen Herrlichkeit (der Link zum Video ist in der orangefarbenen Kiste hier auf der Seite). Runterladen! Gucken!

Categories: Indigo | WCF

One Dream. Starting Friday.

Categories: WM 2006

A question that is raised quite often in the context of “SOA” is that of how to deal with data.  Specifically, people are increasingly interested in (and concerned about) appropriate caching strategies. What I see described in that context is often motivated by the fundamental misunderstanding that the SO tenet that speaks about ”automony” is perceived to mean “autonomous computing” while it really means “avoid coupling”. The former is an architecture prescription, the latter is just a statement about the quality of a network edge.

I will admit that it the use of “autonomy” confused me for a while as well. Specifically, in my 5/2004 “Data Services” post, I’ve shown principles of autonomous computing and how there is a benefit to loose coupling at the network edge when combined with autonomous computing principles, but at the time I did not yet fully understand how orthogonal those two things really are. I guess that one of the aspects of blogging is that you’ve got to be ready to learn and evolve your knowledge in front of all people. Mind that I stand by the architectural patterns and the notion of data services that I explained in that post, except for the notion that the “Autonomy” SO tenet speaks about autonomous computing.

The picture here illustrates the difference. By autonomous computing principles the left shape of the service is “correct”. The service is fully autonomous and protects its state. That’s a model that’s strictly following the Fiefdoms/Emissaries idea that Pat Helland formulated a few years back. Very many applications look like the shape on the right. There are a number of services sticking up that share a common backend store. That’s not following autonomous computing principles. However, if you look across the top, you’ll see that the endpoints (different colors, different contracts) look precisely alike from the outside for both pillars. That’s the split: Autonomous computing talks very much about how things are supposed to look behind your service boundary (which is not and should not be anyone’s business but yours) and service orientation really talks about you being able to hide any kind of such architectural decision between a loosely coupled network edge. The two ideas compose well, but they are not the same, at all.

Which leads me to the greater story: In terms of software architecture, “SOA” introduces very little new. All distributed systems patterns that have evolved since the 1960 stay true. I haven’t really seen any revolutionary new architecture pattern come out since we speak about Web Services. Brokers, Intermediaries, Federators, Pub/Sub, Queuing, STP, Conversations – all of that has been known for a long time. We’ve just commonly discovered that loose coupling is a quality that’s worth something.

In all reality, the “SOA” hype is about the notion of aligning business functions with software in order to streamline integration. SOA doesn’t talk about software architecture; in other words: SOA does not talk about how to shape the mechanics of a system. From a software architecture perspective, any notion of an “SOA revolution” is complete hogwash. From a Business/IT convergence perspective – to drive analysis and high-level design – there’s meat in the whole story, but I see the SOA term being used mostly for describing technology pieces. “We are building a SOA” really means “we are building a distributed system and we’re trying to make all parts loosely coupled to the best of our abilities”. Whether that distributed system is indeed aligned with the business functions is a wholly different story.

However, I digress. Coming back to the data management issue, it’s clear that a stringent autonomous computing design introduces quite a few challenges in terms of data management. Data consolidation across separate stores for the purposes of reporting requires quite a bit of special consideration and so does caching of data. When the data for a system is dispersed across a variety of stores and comes together only through service channels without the ability to freely query across the data stores and those services are potentially “far” away in terms of bandwidth and latency, data management becomes considerably more difficult than in a monolithic app with a single store. However, this added complexity is a function of choosing to make the service architecture follow autonomous computing principles, not one of how to shape the service edge and whether you use service orientation principles to implement it.

To be clear: I continue to believe that aligning data storage with services is a good thing. It is an additional strategy for looser coupling between services and allows the sort of data patterns and flexibility that I have explained in the post I linked to above. However, “your mileage may vary” is as true here as anywhere. For some scenarios, tightly coupling services in the backyard might be the right thing to do. That’s especially true for “service-enabling” existing applications. All these architectural considerations are, however, strictly orthogonal to the tenets of SO.

Generally, my advice with respect to data management in distributed systems is to handle all data explicitly as part of the application code and not hide data management in some obscure interception layer. There are a lot of approaches that attempt to hide complex caching scenarios away from application programmers by introducing caching magic on the call/message path. That is a reasonable thing to do, if the goal is to optimize message traffic and the granularity that that gives you is acceptable. I had a scenario where that was a just the right fit in one of my last newtelligence projects. Be that as it may, proper data management, caching included, is somewhat like the holy grail of distributed computing and unless people know what they’re doing, it’s dangerous to try to hide it away.

That said, I believe that it is worth a thought to make caching a first-class consideration in any distributed system where data flows across boundaries. If it’s known at the data source that a particular record or set of records won’t be updated until 1200h tomorrow (many banks, for instance, still do accounting batch runs just once or twice daily) then it is helpful to flow that information alongside the data to allow any receiver determine the caching strategy for the particular data item(s). Likewise, if it’s know that a record or record set is unlikely to change or even guaranteed to not change within an hour/day/week/month or if some staleness of that record is typically acceptable, the caching metadata can indicate an absolute or relative time instant at which the data has to be considered stale and possibly a time instant at which it absolutely expires and must be cleaned from any cache. Adding caching hints to each record or set of records allows clients to make a lot better informed decisions about how to deal with that data. This is ultimately about loose coupling and giving every participant of a distributed system enough information to make their own decisions about how to deal with things.

Which leaves the question about where to cache stuff. The instant “obvious best idea” is to hold stuff in memory. However, if the queries into the cached data become more complex than “select all” or reasonably simple hashtable lookups, it’s not too unlikely that, if you run on Windows, a local SQL Server (-Express) instance holding the cache data will do as good or better (increasingly with data volume) compared a custom query “engine” in terms of performance – even if it serves data out from memory. That’s especially true for caching frameworks that can be written within the time/budget of a typical enterprise project. Besides, long-lived cached data whose expiration window exceeds the lifetime of the application instance needs a home, too. One of the bad caching scenarios is that the network gets saturated at 8 in the morning when everybody starts up their smart client apps and tries to suck the central database dry at once – that’s what in-memory database approaches cause.

Categories: Architecture

May 30, 2006
@ 11:09 PM

I may work for the firm, but ... As a good corporate citizen I just installed the Windows Update item that got pushed out to me. The "Windows Genuine Advantage Notification" tool that's supposed to notify me -- I am paraphrasing the decription that I clicked away already -- whether my copy of Windows is genuine and to help me acquire a legal copy if it finds out that its not (whatever that might do). I think I have a bit of an understanding why there's such a tool and why that Windows Genuine Advantage program exists. Like it or not, we make software that we ask people to buy.

But why, why, why does that particular update want me to reboot my machine after the install?  

Categories: Technology

Recently, a gentleman from Switzerland wrote me an email after attending the “WinFX Tour” presentations in Zurich. He is a business consultant advising corporations on the IT strategy and an IT industry veteran with his first programming work dating as long back as 1962. He was quite interested in the Workflow part of my presentation, but wrote me that he thinks that those abstraction efforts go the wrong way. He sees the fundamental gap between business and IT widening and sees very little hope for the two sides to ever find a way to communicate effectively with each other. In his view, IT isn’t truly interested in the reality of business. He wrote me a very long email with several statements and questions, which I won’t quote – the (very long) reply below should give you enough context: 

Your main concern is, in my words, about the disconnect between the reality of the business vs. the snapshot of a perceived business reality that is translated into a software system. I say “perceived” because the capturing of the actual business reality is done by analysts who are on the fence between being business experts and IT experts and even though they would ideally be geniuses in both worlds to do that translation, they often are coming down on one side of that fence in terms of their core competencies.  

The only way to close that gap is to pull people off that fence onto the business side and enable them to capture the reality of the business and the way the business processes flow with tools that fit their needs and don’t demand that they are programmers or even have the sense of abstraction that a software designer or process analyst possesses. Our industry is only starting to understand what is required to achieve this and we are certainly thinking hard about these problems. 

You state that the Business/IT gap cannot be bridged. I do not fully agree with that assessment. I think what you are observing is a particular effect of software architecture and implementation as it exists today. You are truly an “industry veteran” you can certainly see much clearer how software has evolved since you got into the trade in 1962 than I can as a relative youngling. However, my (humble) observation is that the fundamental concepts of business software design haven’t changes all that much since then. A business application is a scoped set of siloed functionality built for a set of predefined purposes and whether the user interacts with the system through batch jobs, green screens, web sites or whether the system is made up of 5000 identical fat client applications with identical logic that talk to a central database is merely an implementation detail. The tradition of (interactive) business software is very much that we’ve got a system with some sort of menu screen or other form of selecting the task you want to perform with the system and any number of forms/screens/dialogs with which you can interact with the system. The reason for your observation of IT conveniently neglecting at least 20% of what they are told to do is not only caused by them not understanding the business, but also caused by them being not in control of the monsters they create because the scope grows too big, everything is tightly coupled to everything else, and a lot of functionalities are crammed together in ”multi-purpose” user interfaces that often make changes or adjustments mutually exclusive and hence “impossible”. 

The actual business process is often external to the software or if the software has workflow guidance, the workflows are not taking all the “offline” activities into account and the process becomes lossy. The way that most applications are built today is that they present the user with a grab-bag of tools and procedures and leaves it up to them to navigate through it. Even worse, business processes are often changed to fit the constraints of software – and not the other way around. Testimony for this is that the organizational structure of many companies is hardly recognizable once the SAP/PeopleSoft/Oracle/etc. ERP consultants have left the building. 

So what’s changing with the SOA/BPM “hype” as you call it? Or I shall better say: What’s the opportunity?  

First, we’re working hard to get to a point where we can build interoperable, autonomous pieces of software with well-defined interfaces where we don’t have to spend 80% of our time and money trying to make those pieces communicate with each other. Before the industry consensus around XML, SOAP and the WS-* specifications this most fundamental requirement for breaking up the solution silos simple didn’t exist (despite previous efforts like DCE or CORBA). I am not saying that we have completely arrived at that point, but we’ve got a better foundation than ever to build composable, loosely coupled, distributed systems that can interact irrespective of their implementation specifics. 

Second, we are starting to see growing insight on the IT side for the need of a common understanding of the idea of “services”. Any employee, department, division or vendor assumes various roles within an organization and renders a certain portfolio of services towards the organization. The notion of service-oriented architecture speaks about writing software that fits into the organization instead of fitting the organization to the software. Just like an employee assumes roles, software assumes roles as well. From an architecture perspective, people and software are peers collaborating on the same business task. The former are just a lot more flexible than the latter. 

Business processes (or bureaucracy), whether formalized or ad-hoc, are driven by the flow of information. If the information flow is not central to the execution of the process you have friction and efficiency suffers. With a paper-bound “offline” process where all information flows in a (paper-) file folder and on forms carried by courier from department to department there’s arguably a better and more complete information flow than in an environment where information is scattered around dozens of different computer systems where the flow of information and the flow of tasks are disconnected and only knitted together by people shuffling mice around on their desks. 

The opportunity is right at that point. With the technology we have available and a common notion of “services”, the line between the implementation of deterministic work (done by programs) and non-deterministic work (done by humans) begins to blur. It is fairly easy today to write chat-bots, mail-bots, or speech-enabled services that allow rich computer/human interaction within their respective scope. It is likewise fairly easy to expose application to application services that allow exchanging rich data across system and platform boundaries using Web Services. The concrete form of how a service interacts with a peer depends on who the peer is. If you have an address book lookup service, it may have all of these capabilities at once. With that, services can be integrated into real-life ad-hoc scenarios singly or in combination because they are built to satisfy specific roles and their capabilities are exposed for (re)use in arbitrary contexts.  

When you have a service that’s specialized on creating complex sales offers and you are a salesman on the road an sit in a taxi, it’s absolutely fathomable to build a solution that allows you to call in, identify yourself towards a voice service and ask for an baseline offer for 500 units of A and 300 units of B for a specific customer and have the result, with all applicable rebates and possible delivery time frames, including shipping cost and considering the schedule of the container freighter ship from China, pushed onto your hotel fax or by email or SMS/MMS. However, the question of how realistic it is to build that service purely depends on how easy it is to make all the necessary backend systems talk to each other and wire up all the roles into a process that can jointly accomplish the task. And it also depends on how well any necessary human intervention into that process can be integrated into the respective flow. Assuming that the resulting offer would cross a certain threshold in terms of the total order amount, the offer might require approval by a manager – the manager renders a “decision service” towards the process and might so by responding to an email that is sent to him/her by a program and will be evaluated by a program.  

Ideally, you could teach a service (through mail, speech or chat) the workflow ad-hoc just as you would tell an administrative assistant a sequence of activities. “Get A and B, do C, let Mike take a look at it and send it to me”. The information can be parsed, mapped to activities, the activities can be wired up to a one-off workflow and the workflow can be launched. The crux is that you need to have those individual capabilities and activities catalogued and available in a fashion that allows composition. And the above example of the approval manager goes to show that people’s roles and capabilities must be part of that same catalogue. 

We (Microsoft) are already shipping and will ship even more building blocks not only for creating such services and workflows, but we also have an increasingly complete federated identity and access control infrastructure that allows to realize all that decentralized interaction in a secure fashion. From a purely technical perspective, the above scenario is not utopia. We have every single component in place to let customers build this, voice recognition included. However, mind that I am not saying “very easy”. 

“BPM” tools such as the Windows Workflow Foundation or BizTalk Orchestration are all about putting the process into the center. Services are all about creating easy-to-integrate, loosely coupled, business-aligned pieces of functionality that can be used and reused in as many contexts as a role in a business can be used in different contexts. A workflow may just be one step that you just have in your head as you are interacting with the address lookup service or it may be a more formalized workflow with several steps and intertwined people-based and program-based activities. The realization here is that while individual roles in an organization are relatively sticky, the way that the organization acts across those roles and tunes the rules for the roles is very dynamic. BPM tools are precisely about shaping and reshaping the flow and rules quickly and deploying those instantly into the business environment. 

The design of the Windows Workflow Foundation also recognizes that business processes, especially those that run for days and weeks rather than seconds or minutes, are never set in stone. If you’ve got a (very) long running master workflow that were, for instance, tracking an insurance policy and applies rebates and handles claims as time progresses and suddenly the client comes around and sues the insurance company, that policy certainly no longer belongs into the same bucket as the other 100000s of policies that are being tracked. So for such unforeseeable circumstances, the foundation makes it possible to jump right in, assess the status and redirect or reshape the respective flow on a case-by-case basis and if the new action that you add into the flow in order to terminate it is merely that you hand off the entire case with all of its status to your legal department’s “dropoff service”. 

You write about SO/A and BPM as an “effort to extend the borders of IT”. From my perspective it’s rather the attempt by IT to humbly fit itself into the ever changing dynamic nature of business. On an industry level we have started to realize that we need to get away from the thinking that applications are silos and that nobody should factually care about whether he/she interacts with a “CRM” or “ERP” system or needs to navigate across a dozen of intranet websites to get a job done. The whole notion of “we build a loan application handling program” is indeed misguided. That’s the disconnect. 

But how alien is the notion of building a library of services that are not wired up into a thing that you can install and instantly run as a program? We hire people into organizations who have a broad education if which we only tap a fraction at any given point in time, but we can trust that we can instantly tap some other capability as the process changes. Which CEO/CFO/CIO will commit to a project that “educates” a software system to have a broad spectrum of capabilities that may or may not be used in the circumstances of “now” but which may become a pressing necessity as you need to quickly adapt to a change in the business? How strange of an idea is it that you might produce a software package that consists of hundreds of roles and thousands of activities but none of them are connected in any way, because that’s the job of the space that’s intentionally left blank and undefined to host the customized business process? How does the buyer justify the expense? What can the vendor charge? Would you continually service and update a “dormant” software-based capability to the latest policies, laws and regulations so that it can be used whenever the need arises? 

All that comes back to a completely different communication breakdown: How does IT explain that sort of perspective to the business stakeholders? The great challenge is not in the bits, it’s in the heads.

Categories: Architecture | SOA