CTP2 of our ADO.NET Data Services v1.5 release is now available for download here.  ADO.NET Data Services v1.5 CTP2 is the second tech preview release of the next version of ADO.NET Data Services.  This release (v1.5) will target the .NET Framework 3.5 SP1 & Silverlight 3 platforms and provide new client and server side features for data service developers.  In addition, the features included in this release (v1.5) will be part of the .NET Framework 4 release. 

What’s included in CTP2?

This release includes updates to the features that were in the CTP1 release of ADO.NET Data Services v1.5 plus a few additional new features and a number of bug fixes.  The features included in this CTP are:

· Projections: This ADO.NET Data Services URI format has been extended to express projections (i.e. you can now work with a subset of the properties of an entity).  This CTP includes both server and client library (including LINQ support) support for projections.  We’ve done a fair amount of work in this space to support roundtripping projected values, working with anonymous types, etc.  We’ll create a subsequent series of posts to describe this feature.  

o Changes since CTP1: This feature is new in this CTP

· Data Binding:  The data services client library for the .NET Framework 3.5 SP1 and Silverlight2 has been extended to support two-way data binding for WPF and Silverlight based applications. 

o Changes since CTP1: We’ve cleaned up the types (e.g. DataServiceCollection class) introduced in CTP1 to make data binding simple with ADO.NET Data Services

· Row Count: One scenario we heard a ton of feedback on after shipping V1 of ADO.NET Data Services in the .NET Framework 3.5SP1 is the ability for the a client of a data service to determine the total number of entities in a set without having to retrieve them all.  To address this need, we have extended the data services addressing scheme to allow a client to obtain this type of information without having to download all the entities in a set.

o Changes since CTP1:  Bug fixes, APIs are the same as in CTP1

· Feed Customization (aka "Web Friendly Feeds"): A common ask we have received is to provide the ability to customize how entities are mapped into the various elements of an AtomPub feed.  This feature does just that by providing a data service author declarative control over how the data service runtime maps the properties of an entity (e.g. a Customer, Order, etc) to the elements of a feed.

o Changes since CTP1: We extended the number of Atom elements which entity properties can be mapped to.  We have also renamed each of the attributes used to customize feeds.  We’ll post an updated blog series on this topic in the coming days to describe the changes in detail.

· Server Driven Paging (SDP): This one is best described by example.  If you had a data service that exposes photos, you likely want to limit the total number of photos a single request to the service can retrieve because the total collection of photos may be very large.  This feature allows a service author to set per collection limits on the total number of entities returned for each request.  In addition to limiting the number of photos returned per request, the server provides the client a "next link" which is simply a URI specifying how to continue retrieving the rest of the entities in the collection not returned by the first request.  For those familiar with AtomPub, this feature adds support for AtomPub <link rel="next" ...> elements to the data service runtime.  

o Changes since CTP1:  This CTP adds client library (.NET & Silverlight3) support for SDP

· Enhanced BLOB Support: This feature enhances the BLOB support provided in V1 to enable data services to stream arbitrarily large BLOBs, store binary content separate from its metadata, easily defer the loading of BLOB content when its metadata is requested, etc. 

o Changes since CTP1: This CTP adds client library (.NET & Silverlight3) support for BLOBs.  Server support was included in CTP1

· Request Pipeline: We have started to expose events throughout the data services server request processing pipeline.  For this release we’ll expose request level events and in future we’ll look to expose more fine grained events based on your feedback.  The goal of exposing our processing pipeline is to allow services further transparency into a data service such that a service author can do things such as setting HTTP response cache headers, wrapping interceptor processing and data service request processing in a single transaction, etc.   

o Changes since CTP1: This feature is new in this CTP

· New "Data Service Provider" Interface for Custom Provider Writers: As the data services runtime has evolved, so has the number of ways people want to plug data into the data service framework.  In V1, two methods (Entity Framework and arbitrary .NET classes) were supported to enable a data service to interact with various diverse data sources.  To address another class of environments and data sources we have introduced a way to write a "custom" provider for those cases when the previous two provider models don't meet your needs.

o Changes since CTP1: In addition to adding a few new provider interfaces, this CTP has renamed & refactored a number of the provider interfaces introduced in this release.  Stay tuned for a follow up blog post that describes what interfaces are available and their purpose.  

· Bug Fixes: This release builds on the code base shipped in CTP1 and incorporates all fixes we have made to this point.

Getting Started

To get started with the v1.5 CTP2 bits, check out the basic "getting started" video below.  The video walks through how to configure VS support for the release and how to get a very simple “hello world” project up and running quickly.  NOTE: double click the screen to open the video in full screen mode.

CTP2 Frequently Asked Questions

Q1: What are the prerequisites?

A1: See the CTP2 download center page here for a list of prerequisites, supported operating systems, etc?

Q2: Does CTP2 install side-by-side with what is currently on my development machine?

A2: By in large this install is side-by-side with existing VS 2008 SP1 and .NET Fx 3.5SP1 bits; however, that was not possible in all cases so some .NET and VS files will be modified by the CTP2 installer.  The files should be replaced to their original state during uninstall of this CTP.  CTP2 does NOT install side-by-side with CTP1 of ADO.NET Data Services v1.5.  The CTP2 installer will require you to first uninstall CTP1.

Q3: Why does the CTP2 download page include two installers?

A3: This CTP includes a “full” (runtime & tools) and a “runtime only” installer.  The “full” installer will install all required runtime assemblies as well update your VS2008 SP1 environment to work with the CTP.  The “runtime only” installer will install all the data services runtime assemblies as well as a command line tool (datasvcutil.exe) into the CTP2 directory.  No visual studio integration will be installed by the “runtime only” installer.  Having two installers is a temporary solution (for this CTP only) to allow us to get this CTP out as soon as possible.  In future we will have a single installer for the release.

Q4: Does this CTP work on Windows 7?

A4: This release supports Windows 7.  The CTP2 “full” installer (see Q3 above) will only install the runtime components on Windows 7.   If you wish to get the “full” experience on Windows 7, then you can follow steps similar  to those described by Shawn Wildermuth here (note: his post was for CTP1 of data services, but they should apply to CTP2, just be sure to look for the CTP2 directory, instead of the CTP1 directory). 

Giving Feedback

The following forum is dedicated to providing feedback on "pre-release" versions of data services such as this CTP: http://social.msdn.microsoft.com/Forums/en-US/dataservices/threads.  Please direct all your questions about the release to this forum. 

Note: The forum intended for questions on currently shipping versions of ADO.NET Data Services is still available at: (http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/threads/ )

We look forward to hearing your thoughts on the release!

-Mike Flasko

ADO.NET Data Services, Program Manager