Just saw today, from Mary Jo Foley, that .Net Framework 3.0 is now available. You can get it here [Update 6/9/07 - I've updated this link. It goes to the download page for the .Net Framework 3.0 SDK. It says it's "for Vista", but it will work with Windows XP or Windows Server. It also provides a link XP and Windows Server users will need to follow to download the runtime components so that everything works].
As I noted earlier, .Net Framework 3.0 is what Microsoft was calling earlier “WinFX”. All they did was change the name. It runs on the .Net 2.0 runtime (CLR). So if you previously got the .Net 2.0 redistributable, or the .Net 2.0 Framework (either as an SDK or through a version of Visual Studio 2005), you do not need to upgrade the runtime. .Net Framework 3.0 is a library upgrade to the .Net 2.0 package.
It will be included with Windows Vista when it’s released, and is now available for download for Windows XP SP2, and Windows Server 2003 SP1. If you want to work with the IDE tools for .Net Framework 3.0, called “extensions” at this point, you must use Visual Studio 2005 Professional Edition. It doesn’t look like these extensions work with VS 2005 Express.
.Net Framework 3.0 includes Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF), and Workflow Foundation (WF).
WPF is the technology that includes the XAML markup scheme where you can define what is essentially a thick client UI in XML, have the user download it through a URL, and it compiles and runs on the user’s machine. You get the ease of web deployment with the responsiveness to the user of a thick client. A nice technology. It also solidifies the notion of separating presentation from application logic in .Net. All XAML handles is the UI that the user sees and interacts with. Internal logic to an application, which determines what happens next, is decoupled, and is done somewhere else. This logic can be in a web service or remote component, accessed via. WCF (I get into this below). It can be in a managed DLL that’s downloaded along with the XAML. It can also be handled via. WF (I also get into this below).
WCF is what at one point Microsoft called “Indigo”. It’s the new web services API, and it replaces a method of explicit RPC that existed in .Net 1.x, called “remoting”. As I understand it, it supports remotable components, though some remoting capabilities (like customizing the RPC) that used to exist are not supported any longer. From what I gather it takes care of the plumbing work to determine what it’s communicating with, so the developer doesn’t have to worry about it. If it’s a web service, a component accessed via. remoting, or even a COM+ or DCOM component, it’ll do the work of detecting what’s at the other end, and using it.
WF is a neat addition, but I imagine it’ll mostly be used on the server end (Windows Server 2003 for now). WF allows you to stitch together a bunch of loosely coupled components to create a program flow. It’s essentially the glue for what’s called Service-Oriented Architecture (SOA).
Where you used to stitch a bunch of web pages together in code, through links in each page, or through CGI, to form an application, now you can define the web pages in their own separate components, each not knowing about the others, and use WF to pass data and control flow between each of them. Don’t get me wrong, it’s not just restricted to traditional web applications. WF can be used with WPF as well.
What this enables is applications that can change without recompilation. To add new features to an application, you either add them to existing components, or create new ones, and if necessary add them to the workflow. If you want to change the order of execution of components, or take some components out, just change the workflow. No recompilation is necessary. The workflow does the decision making about what happens next. It can handle conditional execution of components, and loops. BizTalk Server has had this capability for years, but now you can get it for free.
From everyone I’ve heard talk about .Net Framework 3.0, it is a HUGE upgrade to the .Net 2.0 Framework class library, hence the reason they upped the version number to 3.0. As I discussed earlier, I’m sure it makes sense from Microsoft’s perspective, but to technology buyers it’s going to be confusing, because people who use .Net are familiar with the versioning scheme: Framework version number = CLR version number. With .Net Framework 3.0 this is no longer the case. I’ve been wondering if this is going to continue.
For example, the Linq Project CTPs currently run on the .Net 2.0 CLR, even though its scheduled release is in the Orcas version of .Net, further down the road. Linq is a promising technology being developed at Microsoft that will benefit all of us developers who work with databases. As a techie myself, the exciting features are that it supports dynamic types (known as “duck typing” nowadays), and lambda expressions (analogous to closures). I’ve seen a couple demonstrations of it, and it’s very exciting. For those who don’t know about it, I’ll just say that with what’s coming, someday you’ll be able to create collections of objects and query them as though you were querying a database. Someday you won’t have to define SQL query strings to pass to a database. You’ll be able to inline your database query in your code as naturally as though it was part of the programming language, and get back a result set of objects. That’s as much of Linq as I’ve seen. The next stage of it is completing the C/R/U/D operations: inserts, updates, and deletes. I’m looking forward to it.