Per my last post I have been eagerly pursuing more information on the impact of the changes to WF 4.0, and specifically, what these changes mean for applications written in 3.5 and new composable applications.
I had a great conversation with Cliff Simpkins, Technical Product Manager for the WF team who was able to answer a lot of my questions and provide some clarity as to what specifically has changed, why and how it affects WF applications.
Let's circle back to the points that Kenny Wolf made when we discussed the changes at a higher level and use these as talking points.
"First is delivering a truly model-based framework that allows every aspect of the WF to be represented declaratively."
In WF 4.0, all aspects of an activity are represented as XAML. Most importantly, this includes variables within each activity which are bound as input/output parameters from one activity to another. This is a significant change from 3.5 because variables are no longer scoped at the global workflow level, but instead are scoped to the activity level. And this is an important point. In WF 4.0, the paradigm is based on Activities, Runtime and Tooling. Activities form a logical workflow as a consequence of their composition. The focus is on the activities which consist of a root activity and child activities. The root activity is the orchestration of the child activities, and all activities exist as a logical workflow but are truly autonomous. They gain this autonomy by not being dependant on variables and state at the global level, but instead at each corresponding activity scope. This is huge when it comes to persistence as I'll discuss shortly.
"Second, was being able to truly participate in the repository ecosystem, which is key for deployment, management and operations scenarios."
This one should be obvious. XAML is the key to being able to serialize services and workflows in the repository. Reengineering how variables are managed by scoping them to the activity (I'll post some sample code soon) completes the picture. WF 4.0 (and incidentally WCF 4.0) will be repository ready, and this is the gestalt of the Oslo vision.
"And last, but not least was performance."
I don't yet have a full picture of how the performance improvements were attained. I suspect that there has been some runtime tuning, and I am eager to learn more here. However, a major positive consequence of the full schematization of the logical workflow is that the entire workflow does not need to be persisted, but instead, only the relevant activities. For example, if you have a workflow with 4 activities and the first two complete and the third activity waits for a stimulus before it resumes work, only the third and forth activity need to be persisted as opposed to the entire worklfow. I do still have questions about atomic versus long-running behavior, and this, along with other details will soon come to light.
Some more stuff
Another thing that you will immediately notice is that the designer has been completely redesigned, and there is a definite Quadrant influence. What is very cool is that both Quadrant and WF designer are using WPF. On this topic, I have to be honest. The design initially struck me as very drab. If you look at the picture I snapped in my original post you'll see a severe departure from the 3.0/3.5 aesthetic. The interesting thing though, is that as I sat in more sessions and touched and felt the designer it really grew on me. At the risk of sounding cliche, the simplicity of the designer makes for a very fluid user experience, perhaps less is more.
What about WF 3.5?
This is a logical burning question. First, let us all agree that WF 3.0 is not relevant to service developers, so I will ignore it, pretending it doesn't exist. The marriage of WF and WCF in WF 3.5 finally makes WF a compelling tool for composing services and this, by the way is going to be a common theme in the NET 4.0 timeframe and beyond.
So what about 3.5? Should we continue to build composable service-oriented applications with WF 3.5 or bite the bullet and build on early WF 4.0 bits? Well, according to Cliff, a couple large flagship products will be shipping with 3.5 over the next couple years, and if Microsoft is willing to invest this heavily in 3.5 in a brand new product that hasn't shipped, you can imagine that it should be suitable for LOB applications as well as the enterprise.
A better question is probably how bad the pain will be in upgrading from 3.5 to 4.0. I talked about the Interop activity which will be the bridge from 3.5 to 4.0, but we can't be so naive to assume it will solve all compatibility issues. I spoke with Jurgen Willis who commited to the early guidance paper I mentioned very soon. As promised, when I get it, you'll have it here.
In the meantime, if you want to watch live recordings of the following PDC sessions on WF, I've provided the links below: