If you attended the Phoenix Connected Systems User Group meeting last week you know what a great talk it was. For those who attended and would like a summary, and for those that were not able to make it, here's what you missed.
Recap
Rob Wisehart, Technical Team Lead at DriveTime Sales & Finance did a fantastic job introducing the group to WF 3.5. He provided an Overview and Essentials of WF and really did a great job of explaining why WF is important and why it matters. People are visual. We've learned thousands of languages since the beginning of time, but our Neanderthal ancestors had it right. We still communicate best with drawings and pictures. At least I do. Rob went on to talk about Sequential and State Machine Workflows and when each is appropriate. Rob really showed his experience with WF applications here, talking about the pros/cons of each worklfow type. Discussed as well was Hosting and Services. Just like WCF, WF needs hosting love too. In fact, any CLR process can host a WF service, and the models are quite similar.
My favorite part of the talk was on Custom Activities. Rob did an awesome job talking about why Custom Activities should be the preferred way to build WF applications. He really hit the nail on the head, talking about how, at DriveTime, they color code their Custom Activities, so that users (developers, and analysts) start to build that emotional connection with the software. For example, brown Custom Activities are always queue based activities while blue might be database related.
Of course, Rob closed out with a discussion on using WF as a WCF Service. While in 3.0 this required heroics, the story got better in 3.5, and today, if you are building a WCF service, using WF to orchestrate the logic should be compelling. On this topic, I believe that .NET 4.0 will really focus on WF from a marketing perspective, and WCF will be somewhat in the shadows of WF. This is OK, because .NET 3.0 and 3.5 was really all about WCF because it was a) a tremendous accomplishment that *will* change your life as a developer and b) fully baked. WF 4.0 will focus much more on the modeling aspects of building service-oriented applications, relegating WCF as a utility player. Of course, anyone that knows WCF understands that this could be further from the truth due to the incredible robustness and richness of the framework, but when a technology becomes commoditized, its a clear sign of success, both as a technology and from an adoption perspective. To say that WCF will commoditize cross-process communication between WF 4.0 applications is a very good thing indeed.
The Goods
Rob's deck can be downloaded from SkyDrive here:
Rob's code can be downloaded from SkyDrive here:
Swag
We closed the event with some great handouts, including WF+WCF 4.0 t-shirts courtesy of the Connected Systems Division, some laptop stickers and a group photo with folks that were lucky enough to get a t-shirt. Many thanks to Marjan Kalantar at Microsoft CSD for taking such good care of us.
Late Breaking Update on WF 4.0
I also took about 5 minutes to talk about some of the changes that are coming in WF 4.0. Most of this content is a combination of what I learned at PDC along with a draft of a whitepaper that Kenny Wolf shared with me. While I've been asked not to circulate the paper until it is fully baked, I provided some of the biggest highlights and key points with Kenny's permission, of course.
As I've discussed in earlier posts (http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx, http://rickgaribay.net/archive/2008/10/30/more-on-wf-4.0.aspx), there are several new features and key changes coming in WF 4.0:
- WF 4.0 ships with a completely new designer which very much resembles the look and feel that is being demo' d in Quadrant.
- WF 4.0 provides full declaration of activities using XAML. While this is the same XAML that is used in WPF and WF 3.0/3.5, the file extension has been changed from .xoml to .xamlx.
- There is a new activity model which makes all WF 4.0 artifacts activities. There is no longer the concept of distinguishing between Workflows and activities. In WF 4.0, all artifacts *are* are activities, and this includes Sequential Workflow Activities, State Machine Activities and a new Flowchart Activity. The key is that activities are the root of everything in WF 4.0 and activities compose other activities, be they custom activities or workflow activities.
- Significant runtime performance, between 10% and 100%.
- Better persistence and re-hydration performance largely due to the fact that the entire workflow need not be persisted as is the case in 3.0/3.5, but instead, because the XAML model is extended to every aspect of the workflow application, persistence can be managed at the activity level (see, there is a method building here).
- Code Activities are dead. Don't write them anymore. Seriously, no Code Activities in WF 4.0.
These are just a few of the major improvements/changes coming our way. The next thing we talked about is what do to to prepare and what the migration story is.
- WF 3.0/3.5 will run side-by-side with WF 4.0. WF 3.0/3.5 will run in the 2.0 CLR and WF 4.0 will run in the 4.0 CLR. What?! You didn't know there is a brand, spanking new CLR coming in NET FX 4.0? Better start coming to PCSUG meetings!
- WF 3.0/3.5 can be composed within WF 4.0 activities using the Interop Activity. I joked here that this is like the P-Invoke of WF, and I don't mean that in a critical way, it's just necessary. If you look at how we pass variables around in WF 3.0/3.5 and the fact that in WF 4.0, variables are just neatly bound at the activity level with in/out semantics (and thus, different signatures) you need a bridge. The Interop Activity is that bridge.
- There is no support for the Code Activity. Is there an echo in the room? Stop using them and start writing Custom Activities.
- There will be a migration tool to port from 3.0/3.5 to 4.0, but like any tool, CSD will try their best but it won't be perfect.
Start preparing for WF 4.0 now by:
- Choosing the fully declarative workflow template in 3.5
- Do not use Activity.Initialize to initialize your activity, instead use Activity.Execute. The former goes away in 4.0.
- Being diligent about scoping your variables within your 3.5 activities.
- Think in terms of activities. Think in terms of your domain. Build activities.
- Using WCF Send/Receive Activities in 3.5
- Stop using Code Activities (there's that echo again)
As promised before, as soon as the guidance whitepaper becomes public, I will post it here.
Note: There will be no PCSUG meeting in December as we will be participating at the MSDN Unleashed Presents: The Best of PDC event on December 10th. Be sure to register for this event as seating is limited and when you arrive, be sure to fill out our PCSUG registration card so we can stay connected and inform you of what's coming in 2009.