Today we released the betas for
VS2008 sp1 and .NET 3.5 sp1. Scott did
a good job (as usual :-)) running through the top-level enhancements, so I won't parrot
it all here.. but I'd like to go through the next level of detail on what new goodies
we have for service developers.
The most interesting/exciting feature for service developers is what we call Data
Services (previously known as "Astoria"). The best way to explain how Data Services
fits into the overall "services platform" that .NET provides is through a picture:
As a service developer, .NET offers me a layered stack - if I want to write "to the
metal", I can build a service on top of System.Net and HttpListener (which is a managed
wrapper on top of HTTP.SYS - our kernel HTTP driver). Not many people end up
doing that, because there are lots of good pieces that we've already written for you..
WCF provides the next layer. WCF gives you some modular pieces, such as channels
(HTTP, TCP, MSMQ, etc); Serialization, which is a fancy word for pouring objects into
a serialized formats such as XML, binary, JSON, and deserializing back into objects;
and what we call "Syndication", which are some classes that support various data publishing
microformats such as RSS and ATOM. Finally, we have a layer called Service Model
that ties all of this stuff together in a coherent, approachable programming model.
WCF is a powerful but general framework, so the next layer up consists of particular
scenarios that we wanted to significantly simplify. I think of two canonical scenarios
for writing services: "resource-oriented" services, where you model your service as
a bunch of resources and offer request/response, HTTP-based access to those resources;
and "operation-oriented" services, where you want to create a new "operation" that
wraps a more involved operation that often has to coordinate state changes across
multiple resources.
Operation-oriented services become more attractive the more asynchrony you need in
your service implementation.. the canonical example is "book a trip" which in turn
composes other asynchronous services, such as "book the airfare", "book the hotel",
etc. We realized that most operation-oriented services are actually most
easily modeled as workflows.. and that's why we invested heavily in .NET 3.5 in Workflow
Services, which is a pretty deep integration between WCF and Workflow.
Resource-oriented services became easier to write in .NET 3.5 via our REST support
that we added to WCF. But we thought we could do even better for some canonical
scenarios, such as when you have data in a database (or any LINQ data source) that
you want to expose over REST/ATOM. So the ADO.NET team built Data Services,
which is layered on top of WCF's REST and ATOM capabilities and offers a really easy
way of doing just that.
Any layer of abstraction makes some choices, and some of those choices may not be
exactly what you want. The nice thing is that given the layering of Workflow
Services and Data Services over WCF, if you don't like the choices we've made for
you, you can always drop down to the layer below (WCF).
As I type this, I realize that there's really one additional scenario that I didn't
capture in the picture - which is "services that back a presentation layer".
ASP.NET AJAX is the obvious example of that today.. in .NET 3.5, we added support
for being able to "back" an ASP.NET AJAX page with a "AJAX-Enabled WCF Service" (complete
with a VS template). So that's another example of a targetted scenario that's
layered on top of WCF... (I'll have to fix my picture :-))
Besides Data Services, there are some additional cool new enhancements in WCF and
WF that are worth mentioning:
-
We are enabling DataContract Serializer to serialize types without the need to annotate
them with the [DataContract] attribute and its relatives. We affectionately
have taken to calling this feature POCO (plain old C# Objects), tipping our hat to
POJO :-)
-
We’ve enabled interoperable object references in our serialization format. This
was done to support certain Entity Data Model (EDM) types but is generally useful
in improving our interoperability with Java
-
We’ve made the WCF Test Client (the form that comes up when you hit "F5" on a service)
into a stand-alone tool and added more features to increase the breadth of web services
it can handle
-
The WCF Service template is now available in the Visual Web Developer Express SKU
-
We are delivering a hosting wizard for Visual Studio WCF Service projects that allows
easy deployment of Web Services from VS into IIS
-
Event Logging is now enabled in Partial trust so that people who host their services
in medium trust environments have more of the WCF "juice" :-)
-
We extended the syndication OM to support the ServiceDocument in AtomPub
-
We did some nice perf enhancements to the WF activities designer to make it much more
snappy, even if you have a large number of activities
And of course, we fixed many of the most common bugs that you all have reported to
us (thanks!)
All in all, a bunch of good value in a service pack release.. of course, this is a
beta, so there are still some issues in the bits. Please give them a test-drive
and let us know what you think!