<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Pablo Castro's blog : Astoria</title><link>http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx</link><description>Tags: Astoria</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Every SharePoint 2010 server is a Data Services server</title><link>http://blogs.msdn.com/pablo/archive/2009/10/19/every-sharepoint-2010-server-is-a-data-services-server.aspx</link><pubDate>Tue, 20 Oct 2009 06:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9909690</guid><dc:creator>pabloc</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9909690.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9909690</wfw:commentRss><description>&lt;P&gt;I haven't been writing much here, mostly because I've been way too busy but also because I couldn't discuss publicly many of the things I'm doing. Now that &lt;A href="http://www.microsoft.com/presspass/press/2009/oct09/10-19MSSharePointConf09PR.mspx" target=_blank mce_href="http://www.microsoft.com/presspass/press/2009/oct09/10-19MSSharePointConf09PR.mspx"&gt;SharePoint 2010 has been announced&lt;/A&gt; and its feature set published everywhere, I can finally discuss one of the coolest things we've been up to lately.&lt;/P&gt;
&lt;P&gt;SharePoint is a repository of resources (list items and documents in document libraries) that are collected and manipulated collaboratively. Resources have a bunch of security and business logic attached to them, such as who can see each item, who gets to change it, or whether a particular column in a list needs to conform to a particular validation formula. &lt;/P&gt;
&lt;P&gt;When SharePoint folks said they wanted a RESTful interface this was great news...the system is just a perfect fit. Not only it's a perfect fit for RESTful services in general, but also for Astoria in particular. In the end SharePoint is very data-centric in nature, it already supports queries and business logic as part of the uniform interface.&lt;/P&gt;
&lt;P&gt;So we're really excited to announce that as of SharePoint 2010, every SharePoint server is an Astoria server out of the box. No configuration required or anything, just make sure the proper version of ADO.NET Data Services is in the box. For SharePoint 2010 beta, the "right" version is &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a71060eb-454e-4475-81a6-e9552b1034fc&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a71060eb-454e-4475-81a6-e9552b1034fc&amp;amp;displaylang=en"&gt;ADO.NET Data Services v1.5 CTP2&lt;/A&gt;. We'll put details out there for future iterations as they come.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/astoriateam/archive/2009/10/19/share-your-data-across-data-sources-sharepoint-sql-server-azure-reporting-services-etc-applications-net-silverlight-excel-etc-using-data-services.aspx" target=_blank mce_href="http://blogs.msdn.com/astoriateam/archive/2009/10/19/share-your-data-across-data-sources-sharepoint-sql-server-azure-reporting-services-etc-applications-net-silverlight-excel-etc-using-data-services.aspx"&gt;Official write up&lt;/A&gt; in the Astoria team blog.&lt;/P&gt;
&lt;P&gt;The SharePoint Data Service head is not just a side integration deal, it's a full-on REST-over-HTTP head for SharePoint. It supports browsing as well as modifying data using regular HTTP verbs (GET, PUT, DELETE, etc.), it does ETags for concurrency control, enforces business logic as part of side-effecting methods, and it handles the full range of Data Services conventions for URLs, Atom and JSON payload formats, etc. It also exposes full metadata like any other Astoria service, allowing Visual Studio and any other metadata-driven client to give you a great experience on the client side. Now if you need to get or manipulate data in SharePoint from any platform in any language, all you need is an HTTP stack.&lt;/P&gt;
&lt;P&gt;The other cool aspect is that the SharePoint folks where able to build this entirely on top of public bits, using our new fancy provider model for advanced data sources I &lt;A href="http://blogs.msdn.com/pablo/archive/2008/11/01/ado-net-data-services-in-windows-azure-pushing-scalability-to-the-next-level.aspx" target=_blank mce_href="http://blogs.msdn.com/pablo/archive/2008/11/01/ado-net-data-services-in-windows-azure-pushing-scalability-to-the-next-level.aspx"&gt;discussed here&lt;/A&gt; some time ago.&lt;/P&gt;
&lt;P&gt;SharePoint joins a growing family of Microsoft products that enable users to share data through the use of a simple RESTful interface that follows the Astoria conventions when needed (e.g. URLs, structured data in Atom). Another example on the server side include SQL Server Reporting Services, which in SQL Server 2008 R2 can now render any report as Atom feed that follows the Astoria conventions (examples &lt;A href="http://blogs.msdn.com/gemini/archive/2009/09/24/data-feeds.aspx" target=_blank mce_href="http://blogs.msdn.com/gemini/archive/2009/09/24/data-feeds.aspx"&gt;here&lt;/A&gt;). On the client, in addition to developer-oriented options such as .NET, Silverlight, AJAX, PHP, Java and more, we now also have &lt;A href="http://www.powerpivot.com/" target=_blank mce_href="http://www.powerpivot.com/"&gt;PowerPivot&lt;/A&gt; (f.k.a. Gemini) which can pull data from any data service and do fancy analysis and publishing over it, making it trivial to bring data from Data Services into Microsoft Excel 2010 among other things.&lt;/P&gt;
&lt;P&gt;I find this to be extremely important. A simple, uniform way of sharing data at the protocol level, and in a way that truly enables the lowest possible bar of entry, is key to enable broad integration across products and break data silos that form around applications.&lt;/P&gt;
&lt;P&gt;I'll be talking about this at the &lt;A href="http://www.mssharepointconference.com/" target=_blank mce_href="http://www.mssharepointconference.com"&gt;SharePoint conference 2009&lt;/A&gt;&amp;nbsp;in Las Vegas this week, and at the &lt;A href="http://microsoftpdc.com/" target=_blank mce_href="http://microsoftpdc.com/"&gt;Professional Developer Conference (PDC 2009)&lt;/A&gt; in late November. If you're attending any of these and this sounds interesting, these sessions will drill into plenty of details.&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909690" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/pablo/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>We're on a roll: Java client for Data Services announced</title><link>http://blogs.msdn.com/pablo/archive/2009/09/28/we-re-on-a-roll-java-client-for-data-services-announced.aspx</link><pubDate>Tue, 29 Sep 2009 04:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9900531</guid><dc:creator>pabloc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9900531.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9900531</wfw:commentRss><description>&lt;P&gt;Just a few weeks after announcing the PHP toolkit for Data Services we now are happy to announce a Java toolkit for consuming Data Services that follow the Astoria RESTful data services pattern. The library ships as an extension to the existing Java Restlet library. I'm really happy to see more and more clients and servers come up that can be used to share data between systems.&lt;/P&gt;
&lt;P&gt;You can &lt;A href="http://blogs.msdn.com/interoperability/archive/2009/09/28/new-bridge-broadens-java-and-net-interoperability.aspx" mce_href="http://blogs.msdn.com/interoperability/archive/2009/09/28/new-bridge-broadens-java-and-net-interoperability.aspx"&gt;check out the announcement&lt;/A&gt; in the Interoperability's Team blog. &lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9900531" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>ADO.NET Data Services v1.5 CTP2!</title><link>http://blogs.msdn.com/pablo/archive/2009/09/01/ado-net-data-services-v1-5-ctp2.aspx</link><pubDate>Tue, 01 Sep 2009 21:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890008</guid><dc:creator>pabloc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9890008.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9890008</wfw:commentRss><description>&lt;P&gt;Yesterday we announced that the CTP 2 of the ADO.NET Data Services framework (yeah, Astoria) is available for download. We put in a ton of work on this release, ranging from adding better support for high-end services to making it easier to write applications in Silverlight by having cross-domain and proper data-binding support.&lt;/P&gt;
&lt;P&gt;Official announcement is &lt;A href="http://blogs.msdn.com/astoriateam/archive/2009/08/31/ado-net-data-services-v1-5-ctp2-now-available-for-download.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2009/08/31/ado-net-data-services-v1-5-ctp2-now-available-for-download.aspx"&gt;here&lt;/A&gt;, and includes details on where to download from, what to watch for (it's still a CTP, comes with fine-print :) ), and a list of the new and updated features.&lt;/P&gt;
&lt;P&gt;Also, many folks in the Astoria Team have been writing a bunch of content to cover the new features, so watch the &lt;A href="http://blogs.msdn.com/astoriateam/" mce_href="http://blogs.msdn.com/astoriateam/"&gt;Astoria Team blog&lt;/A&gt; as well as related blogs for all sorts of samples and details to come up.&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9890008" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>PHP toolkit for ADO.NET Data Services</title><link>http://blogs.msdn.com/pablo/archive/2009/08/21/php-client-for-ado-net-data-services.aspx</link><pubDate>Fri, 21 Aug 2009 19:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9878948</guid><dc:creator>pabloc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9878948.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9878948</wfw:commentRss><description>&lt;P&gt;Folks in the interoperability team at Microsoft just announced something they've been cooking for a while, developed&amp;nbsp;&lt;A href="http://www.persistentsys.com/" mce_href="http://www.persistentsys.com/"&gt;Persistent Systems&lt;/A&gt;: a client PHP toolkit for Astoria services. It follows more or less the model of the .NET client where you can run a tool during development to get code-gen based on a data service metadata, and then it has a runtime library that can be used to send queries, obtain responses as PHP objects, track and submit changes, etc. They implemented both the Atom and JSON formats, and even threw in batching support. &lt;/P&gt;
&lt;P&gt;The best part is that it's all written in PHP (both code-gen tool and runtime), so it runs in any environment where PHP and the toolkit dependencies (XML, XSLT, CURL) are available.&lt;/P&gt;
&lt;P&gt;For more details check out the &lt;A href="http://blogs.msdn.com/interoperability/archive/2009/08/21/a-new-bridge-for-php-developers-to-net-through-rest-php-toolkit-for-ado-net-data-services.aspx" mce_href="http://blogs.msdn.com/interoperability/archive/2009/08/21/a-new-bridge-for-php-developers-to-net-through-rest-php-toolkit-for-ado-net-data-services.aspx"&gt;post in the interoperability team's blog&lt;/A&gt;, the kick off&amp;nbsp;&lt;A href="http://channel9.msdn.com/posts/jccim/Consuming-data-over-the-web-between-PHP-and-NET-with-REST-and-ADONET-Data-Services/" mce_href="http://channel9.msdn.com/posts/jccim/Consuming-data-over-the-web-between-PHP-and-NET-with-REST-and-ADONET-Data-Services/"&gt;Channel 9 video&lt;/A&gt;, and the &lt;A href="http://phpdataservices.codeplex.com/" mce_href="http://phpdataservices.codeplex.com/"&gt;PHP toolkit project&lt;/A&gt; in codeplex.&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9878948" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/REST/default.aspx">REST</category></item><item><title>Busy week: ADO.NET Data Services v1.5 CTP coming and "Astoria Offline" preview out</title><link>http://blogs.msdn.com/pablo/archive/2009/03/07/busy-week-ado-net-data-services-v1-5-ctp-comming-and-astoria-offline-preview-out.aspx</link><pubDate>Sun, 08 Mar 2009 02:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9464569</guid><dc:creator>pabloc</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9464569.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9464569</wfw:commentRss><description>&lt;P&gt;We announced two releases this week, kind of usual but it worked out this way.&lt;/P&gt;
&lt;P&gt;The first one is the first CTP of ADO.NET Data Services v1.5. This is the next version of "Astoria" or the ADO.NET Data Services framework, and it includes a number of enhancements that were requested both by the developer community and by some internal partners. More details about this upcoming release &lt;A href="http://blogs.msdn.com/astoriateam/archive/2009/03/01/announcing-ado-net-data-services-v1-5-ctp1.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2009/03/01/announcing-ado-net-data-services-v1-5-ctp1.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The second one is the preview release of an exploration project we have been calling "Astoria Offline". This project sits at the intersection between Data Services, Sync Framework, SQL Express/Compact and the Entity Framework. It will be interesting to see what folks think about it. I'm personally very interested in this space so I'm happy to see this finally out. As the announcement says, this is not an "official" product or anything like that, but more like an early experiment to understand the problem space. More details about the release and pointers to the download page available in &lt;A href="http://blogs.msdn.com/astoriateam/archive/2009/03/07/announcing-project-codename-astoria-offline-alpha-preview.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2009/03/07/announcing-project-codename-astoria-offline-alpha-preview.aspx"&gt;the announcement in the Data Services team blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Looking forward to hear feedback about both of these releases and the technologies behind them. &lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9464569" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Offline/default.aspx">Offline</category></item><item><title>Adding support for JSONP and URL-controlled format to ADO.NET Data Services</title><link>http://blogs.msdn.com/pablo/archive/2009/02/25/adding-support-for-jsonp-and-url-controlled-format-to-ado-net-data-services.aspx</link><pubDate>Thu, 26 Feb 2009 06:29:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9445482</guid><dc:creator>pabloc</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9445482.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9445482</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" target="_blank"&gt;JSONP&lt;/a&gt; is a common way of making data accessible in client-side mashups even when the requests need to be cross-domain.&lt;/p&gt;  &lt;p&gt;While the current version of the ADO.NET Data Services framework does not support this, it’s possible to build it on top. There are a couple of ways of doing this. Here is what’s probably the simplest way. There is some downsides to this approach, but overall is the most straightforward path to get there.&lt;/p&gt;  &lt;p&gt;The default transport layer for Data Services is WCF, which has a many extensibility points across the stack. For the case of JSONP support, IDispatchMessageInspector comes in handy.&lt;/p&gt;  &lt;p&gt;There are two things needed to support JSONP properly:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The ability to control the response format. Data Services uses standard HTTP content type negotiation to select what representation of a given resource should be sent to the client (e.g. JSON, Atom). That requires that the caller can set the Accept request header, which is not possible when doing the JSONP trick (which basically just uses &amp;lt;script&amp;gt; tags). We need to add the ability to use the query string in the URL to select format. (e.g. /People(1)/Friends?$orderby=Name&amp;amp;&lt;strong&gt;$format=json&lt;/strong&gt;). &lt;/li&gt;    &lt;li&gt;A new option to wrap the response in a callback if such callback was provided in the request (also in the query string). For example /People(1)/Friends?$orderby=Name&amp;amp;$format=json&amp;amp;&lt;strong&gt;$callback=loaded&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What we’ll do is register a message inspector and adjust the request/response when we see these new options coming in.&lt;/p&gt;  &lt;p&gt;In order to support the $format=json option we can intercept the message before it gets dispatched to the Astoria runtime, at the IDispatchMessageInspector.AfterReceivedRequest method. If we see the query string option then we’ll a) strip it out from the URL so Data Services does not generate an error and b) change the “Accept” header to “application/json”, so the rest of the system just thinks that the client asked for a JSON response in the first place.&lt;/p&gt;  &lt;p&gt;For the second part, where we need to wrap the response into a Javascript call if the $callback option was used, we have the IDispatchMessageInspector.BeforeSendReply method which gives us the perfect spot to rewrite the response. One unfortunate side-effect of this is that the response will get buffered and re-encoded; that said, in many cases this won’t make any noticeable difference.&lt;/p&gt;  &lt;p&gt;Finally, we need to register the interceptor with WCF’s dispatchers. For that we create an attribute that implements IServiceBehavior, so we get called during service initialization. When we get called we can register our message interceptor.&lt;/p&gt;  &lt;p&gt;The net effect is that if you include this code in your project, you just need to add a single attribute to your Data Service to make it support JSONP:&lt;/p&gt;  &lt;p&gt;[JSONPSupportBehavior]    &lt;br /&gt;public class SampleService : DataService&amp;lt;ContactsData&amp;gt;     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // your service code here...     &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;Once that's in place you can use JSONP by adding $format and $callback to URLs, for example: &lt;/p&gt;  &lt;p&gt;http://&amp;lt;host&amp;gt;/SampleService.svc/People?$format=json&amp;amp;$callback=cb&lt;/p&gt;  &lt;p&gt;Of course, you can still use all the other Data Services URL options in addition to these.&lt;/p&gt;  &lt;p&gt;The implementation and a small sample service are available at MSDN code gallery, here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://code.msdn.microsoft.com/DataServicesJSONP" href="http://code.msdn.microsoft.com/DataServicesJSONP"&gt;http://code.msdn.microsoft.com/DataServicesJSONP&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;-pablo&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9445482" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/REST/default.aspx">REST</category></item><item><title>ADO.NET Data Services in Windows Azure: pushing scalability to the next level</title><link>http://blogs.msdn.com/pablo/archive/2008/11/01/ado-net-data-services-in-windows-azure-pushing-scalability-to-the-next-level.aspx</link><pubDate>Sun, 02 Nov 2008 05:40:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9028809</guid><dc:creator>pabloc</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9028809.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9028809</wfw:commentRss><description>&lt;p&gt;The announcement of Windows Azure is a big milestone for us in the Astoria team. We got a chance to add our little contribution to the platform by providing data service interfaces for a couple of the Azure services. &lt;/p&gt;  &lt;p&gt;Currently there are two services that use the ADO.NET Data Services runtime: the &lt;a href="http://www.microsoft.com/azure/windowsazure.mspx" target="_blank"&gt;Windows Azure&lt;/a&gt; Tables Service, which was announced this week as part of the whole Windows Azure story, and &lt;a href="http://www.microsoft.com/azure/sql.mspx" target="_blank"&gt;SQL Data Services&lt;/a&gt;, which has been around for a while but got &lt;a href="http://sqlserviceslabs.net/SDSAstoria.html" target="_blank"&gt;a new experimental Data Services interface&lt;/a&gt; this week to coincide with the PDC.&lt;/p&gt;  &lt;p&gt;These services -and others that will come in the future also based on Data Services- share a common aspect: they have extreme scalability requirements.&lt;/p&gt;  &lt;p&gt;In order to enable them to use our Data Services server runtime we had to extend the data service framework to make it scale in various new dimensions. In the rest of this post I'll summarize some of the walls we hit and the changes we made to the system to handle these scenarios.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Things that already scaled&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Data Services runtime already incorporates many design principles that help with scalability. &lt;/p&gt;  &lt;p&gt;For example, the system does not keep any required state between requests (we do cache stuff, but we can throw it away at any time), so scale out of the front-end servers of the storage systems is relatively straightforward. This allows the existing runtime to handle an arbitrarily large number of requests by throwing more front-ends to the problem (as long as the back-end systems can take it, of course).&lt;/p&gt;  &lt;p&gt;Also, we don't make any assumptions around the size of the data and provide mechanisms to push-down filters in requests to the data source, so effectively in principle there are no limits to the amount of data that a data service may be fronting.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Hitting the scalability wall&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;While some things scaled, there are certain aspects in which we ran into a scalability wall that required a number of changes in the system.&lt;/p&gt;  &lt;p&gt;Using .NET types to represent the shape of the services is great in a single application, but not-so-great if you have millions of users with hundreds or thousands. We needed another way of describing the &amp;quot;shape of the data in the service&amp;quot;, that is the metadata or schema of the service.&lt;/p&gt;  &lt;p&gt;Since you can't practically create a distinct type for every user/application/table in the system, that means that the instances of objects that represent data flowing through the data services runtime cannot be of a specific type for each entity type. Instead, we needed independent of the flow format with respect of the declared types.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Metadata and service schema&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The data services runtime needs to know the &amp;quot;schema&amp;quot; of each service it exposes. That is, the list of entity-sets, the entity-types of the instances living in those entity sets and the relationships between the various entities.&lt;/p&gt;  &lt;p&gt;In a typical data service, the service exposes data for a given application or domain-specific service, so the schema of the service is known and static (within a given version at least) and all the front-end servers simple share the same schema.&lt;/p&gt;  &lt;p&gt;The way a service author specifies the schema of a service in the shipping version of the Data Services runtime is by using .NET classes or an Entity Framework model (which in turn generates .NET classes). That works great for application developers, because .NET classes are a simple and natural way of defining the shape of your objects. &lt;/p&gt;  &lt;p&gt;Now, if the requirement is to be able to handle millions of applications, each of which can have hundreds or thousands of tables, does that mean that we have to create a .NET type for each service and for each table, and the corresponding number of properties and such? And if so, since the front-end systems are stateless and potentially don't have any affinity to parts of the data, does that mean that any given system may end up having to load up millions of types in memory? To complicate things further, once you load an assembly (the only container in which .NET types can exist), you can't unload it unless you unload the AppDomain.&lt;/p&gt;  &lt;p&gt;.NET types are a great solution for the scenarios where the schema is known and more or less bounded, and will continue to be the primary way of creating services in that context. However, we needed something else to handle the high-end side of the spectrum.&lt;/p&gt;  &lt;p&gt;To address this need we introduced a new interface that data services can optionally implement. We already had the internals of the system organized more or less like this, but didn't expose it in the first release. The idea is that there is main split between the &amp;quot;upper half&amp;quot; of the runtime that deals with URL translation, LINQ expression tree generation, interceptors, policies and all aspects that make a Data Service look like a Data Service. The &amp;quot;bottom half&amp;quot; is the &amp;quot;data service provider&amp;quot;, and is responsible for describing the shape of the service among other things. There are two built-in &amp;quot;data service providers&amp;quot;, the Entity Framework provider which is what you use when you create a data service over an Entity Framework model, and the reflection-based provider which is what you use when creating a service on top of an arbitrary object graph. With the new change you can now create new implementations of these data service provider thingies that can obtain and manage metadata any way they want. &lt;/p&gt;  &lt;p&gt;The way we interact with the provider is carefully designed to avoid requiring long term state state in the provider or the consumer of the provider in any way, while at the same time allowing the provider to do caching of metadata and control information if desired.&lt;/p&gt;  &lt;p&gt;First, we never hold on to information returned by the provider beyond the scope of a single request. So for all we know the provider could be reloading all the metadata in every request. In practice, providers will probably cache this metadata in some way or another.&lt;/p&gt;  &lt;p&gt;Second, we load metadata on demand and piecemeal. For example, during URI translation we do a small scale version of the usual binding and semantic analysis that any compiler does, and for that we need metadata. In those cases we don't load all the metadata, but only the pieces we need to do type checks, symbol lookups, etc.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Making metadata dynamic&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Another aspects around metadata to consider is the fact that the shape of one of these data services can be altered at any time. For example, the Azure Table service has the concept of tables, and you can add and remove tables whenever you want. &lt;/p&gt;  &lt;p&gt;The new scheme with custom data service providers make this possible because we don't remember anything at all across requests. So all the provider needs to do when the underlying shape of the data changes is report a different schema on the next request, and the data services runtime will happily take it. &lt;/p&gt;  &lt;p&gt;With .NET types this would have meant creating and re-distributing new types (or creating them on demand on each node), and dealing with not being able to unload the old types from memory. Clearly not an option at this scale.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Flow format independence&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;With the addition of the &amp;quot;data service provider&amp;quot; interfaces we no longer have .NET types to use for the instances of each entity-type that flows through the system (e.g. from the data source to the runtime via the IEnumerables returned in LINQ queries, and from there to the serialization stack).&lt;/p&gt;  &lt;p&gt;Another important change we made in the system is that we no longer assume anything about the shape of each CLR object returned by the query. We treat instances just as &amp;quot;object&amp;quot; all over the code base. When we need to access a member, we use methods in the data service provider interface to do that, imagine something like GetPropertyValue(object o, string name).&lt;/p&gt;  &lt;p&gt;That means it's now possible to use some form of generic record type across the system. Not only this avoids the need for specific types, but also allows providers to piggyback control information in the instances themselves, avoid copies from the original format into CLR objects just to flow them through our runtime and a few more benefits.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Impact on LINQ expressions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;While having flow format independence is great, it did complicate things for query formulation.&lt;/p&gt;  &lt;p&gt;We typically translate URLs to expression trees, and since we have all the CLR types in the server that correspond to the entity types, all the expression trees are nice and clear.&lt;/p&gt;  &lt;p&gt;When we're operating against unknown types we can't generated &amp;quot;typed&amp;quot; expression trees anymore. In those cases we still produce expression trees, but the member-access operations (and certain operators) are represented using custom calls to a well-known set of static members. The providers that enable this feature need to know about this and do proper translation of these expression trees.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Extension to the data model&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We did one more major change that while it's not directly related to scalability it has a lot to do with the database/storage services in Windows Azure.&lt;/p&gt;  &lt;p&gt;In the current version of Data Services types are &amp;quot;closed&amp;quot; in the sense that they have a structure that's final. You list a set of properties for each type and instances of that type cannot have properties added dynamically.&lt;/p&gt;  &lt;p&gt;It turns out that the data services we have online have a more flexible model, where each entity has a fixed portion but also a dynamic portion. Typically the fixed portion includes a key or some sort and a version property. The dynamic portion is a property bag where you can add any name/typed-value pair.&lt;/p&gt;  &lt;p&gt;We call these types that can be extended on a per-instance basis at runtime &amp;quot;open types&amp;quot;. We introduced support for open types in the Data Services runtime such that you can mark a given entity type as &amp;quot;open&amp;quot; in metadata and that would cause the system to allow unknown properties to be set, as well as the use of unknown properties in queries (e.g. in filter predicates). &lt;/p&gt;  &lt;p&gt;There is a lot of details around open types that I won't go into here, maybe the topic for another post, but I wanted to point out the change because it was a significant addition.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What do these changes mean for developers?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;What does all this mean to current users of data services. Well...not much other than some background on how the system is evolving. Other than open types, services created with custom metadata/custom flow formats are indistinguishable from the ones created the &amp;quot;classic&amp;quot; way.&lt;/p&gt;  &lt;p&gt;Furthermore, we will preserve the existing model where creating a service based on some .NET objects or an Entity Framework schema is really straightforward, and we consider that our primary scenario for developers.&lt;/p&gt;  &lt;p&gt;At the same time, addressing the needs for the highest-end services out there is important, so many (if not all) of these changes will eventually make it into the shipping product so that other folks out there can use them if they chose to. Beware that these interfaces are not designed to be &amp;quot;nice&amp;quot;, but rather optimized for control and efficiency, so it may not be exactly a fun experience, but you'll get all the scalability you'll need out of them.&lt;/p&gt;  &lt;p&gt;-pablo&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9028809" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Azure/default.aspx">Azure</category></item><item><title>Now you know...it's Windows Azure</title><link>http://blogs.msdn.com/pablo/archive/2008/10/28/now-you-know-it-s-windows-azure.aspx</link><pubDate>Wed, 29 Oct 2008 04:02:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9021320</guid><dc:creator>pabloc</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/pablo/comments/9021320.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=9021320</wfw:commentRss><description>&lt;p&gt;Since we shipped ADO.NET Data Services v1 in .NET 3.5 SP1 (and actually before that as well) I've been working on a few things that I could share (such as offline/sync support for data services) and some that I couldn't discuss publicly until all the big plans where announced.&lt;/p&gt;  &lt;p&gt;This week at PDC Microsoft announced &lt;a href="http://www.azure.com" target="_blank"&gt;Windows Azure&lt;/a&gt;. A lot has been written about it, so I won't go into the details.&lt;/p&gt;  &lt;p&gt;On our side, in the data services team, we made our small contribution to the big picture. &lt;/p&gt;  &lt;p&gt;The Windows Azure table service is a structured storage facility that's part of the core part of Azure. Access to the table service is done through a data-services compatible RESTful interface that uses the Astoria conventions over an HTTP binding. That means that you use either any client with an HTTP stack to talk to it, or you can use the ADO.NET Data Services client, which does a nice job exposing data as .NET objects, letting you write simple queries using LINQ instead of URLs, etc.&lt;/p&gt;  &lt;p&gt;Another cool thing about the table service (and the blobs and queuing service for that matter) is that they are accessible both from the virtual compute environment and from anywhere in the Internet. In both cases, if you're using .NET, you can use the data services client to interact with it. In the case of code running in the Windows Azure hosting environment, the client is already present (the environment includes .NET 3.5 SP1) so you can use it without worrying about taking new dependencies.&lt;/p&gt;  &lt;p&gt;You find out more about the table service you can watch &lt;a href="http://channel9.msdn.com/pdc2008/ES04/" target="_blank"&gt;Brad's PDC session&lt;/a&gt; for a discussion of the service itself, and this other &lt;a href="http://channel9.msdn.com/pdc2008/ES07/" target="_blank"&gt;session than Niranjan and I did together&lt;/a&gt; (or &amp;quot;will do&amp;quot; if you're reading this before Wed in the PDC week) for a drill down on how to program the Windows Azure table service. If you're not at PDC no worries, these talks are accessible to online.&lt;/p&gt;  &lt;p&gt;On the next layer up from the core, the Windows Azure service layer, SQL Data Services also is making big announcements in this PDC. We're introducing more relational capabilities into the system, and also experimenting with a data services-compatible interface. &lt;a href="http://channel9.msdn.com/pdc2008/BB14/" target="_blank"&gt;This PDC talk from Patrick&lt;/a&gt; will discuss and demo the new interface, and you can follow how this effort goes &lt;a href="http://sqlserviceslabs.net/SDSAstoria.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;-pablo&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9021320" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/PDC2008/default.aspx">PDC2008</category></item><item><title>Trying something: short videos in our design notes</title><link>http://blogs.msdn.com/pablo/archive/2008/09/28/trying-something-short-videos-in-our-design-notes.aspx</link><pubDate>Mon, 29 Sep 2008 01:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8968239</guid><dc:creator>pabloc</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pablo/comments/8968239.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=8968239</wfw:commentRss><description>&lt;p&gt;During the design of Data Services (Astoria) v1 we did the &lt;a href="http://blogs.msdn.com/astoriateam/archive/2007/07/20/transparency-in-the-design-process.aspx" target="_blank" mce_href="http://blogs.msdn.com/astoriateam/archive/2007/07/20/transparency-in-the-design-process.aspx"&gt;transparent design&lt;/a&gt; thing. We're quite happy with the result, we got a lot of feedback and were able to adjust many aspects of the project based on that.&lt;/p&gt;  &lt;p&gt;Now that we're in full swing with v2 design work, we're going to be posting regularly again (hopefully :). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/aconrad" target="_blank" mce_href="http://blogs.msdn.com/aconrad"&gt;Andy&lt;/a&gt; got a new tiny camera and he had to use it for something...so he suggested that we do short clips that may help explain design points. Sometimes a short explanation is just much better than a bunch of writing.&lt;/p&gt;  &lt;p&gt;The first post with the write-up + short video format discusses &amp;quot;Friendly Feeds&amp;quot; and is &lt;a title="Friendly Feeds" href="http://blogs.msdn.com/astoriateam/archive/2008/09/28/making-feeds-friendly.aspx" target="_blank" mce_href="http://blogs.msdn.com/astoriateam/archive/2008/09/28/making-feeds-friendly.aspx"&gt;here&lt;/a&gt;. If you get a change to take a look, let us know what you think about the new style (and friendly feeds)!&lt;/p&gt;  &lt;p&gt;-pablo&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8968239" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>Coming from under the rocks just to celebrate for a bit</title><link>http://blogs.msdn.com/pablo/archive/2008/08/11/coming-from-under-the-rocks-just-to-celebrate-for-a-bit.aspx</link><pubDate>Tue, 12 Aug 2008 05:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8849779</guid><dc:creator>pabloc</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pablo/comments/8849779.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=8849779</wfw:commentRss><description>&lt;P&gt;I've been sort of under a rock for a while, but I thought I'd come out for a minute to celebrate. Today we made available .NET 3.5 SP1 and Visual Studio 2008 SP1. There are two components in the release I spent a bunch of time on, which interestingly enough have very different origins and get to RTM through very different processes. One is the ADO.NET Entity Framework,&amp;nbsp;which has been cooking for&amp;nbsp;several years and survived controversies, comparisons with non-shipped previous attempts and other natural disasters; the other one is the ADO.NET Data Services Framework or Project Astoria, which was built, well...fast.&lt;/P&gt;
&lt;P&gt;I won't go into details of the release, folks have discussed the &lt;A class="" href="http://blogs.msdn.com/astoriateam/archive/2008/08/11/rtm-is-here.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2008/08/11/rtm-is-here.aspx"&gt;Astoria&lt;/A&gt;, &lt;A class="" href="http://blogs.msdn.com/adonet/archive/2008/08/11/rtm-is-finally-here.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2008/08/11/rtm-is-finally-here.aspx"&gt;Entity Framework&lt;/A&gt; and &lt;A class="" href="http://blogs.msdn.com/data/archive/2008/08/11/announcing-entity-framework-ado-net-data-services-rtm.aspx" mce_href="http://blogs.msdn.com/data/archive/2008/08/11/announcing-entity-framework-ado-net-data-services-rtm.aspx"&gt;general data-related features&lt;/A&gt; in the release already.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Why have I been under a rock? In the last few months I've been spending time working on various things related to Astoria, online services and data interfaces. Some I can discuss, some will need to wait a bit until the stakeholders are comfortable to talk about it publicly. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Moving Astoria as a framework forward: we were ready (modulo bug fixing and last minute tweaks) some time ago, and we've been thinking about the next steps for the Astoria framework. In Mix 08 we mentioned that we were working on "Astoria Offline" and showed a prototype. We've been working hard in that topic. There is also a bunch of features we want to take on for the next release. I'm sure we'll post something in the &lt;A class="" href="http://blogs.msdn.com/astoriateam" mce_href="http://blogs.msdn.com/astoriateam"&gt;Astoria blog&lt;/A&gt; at some point about our thinking and give a change for folks to give feedback.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Online services: as you can imagine there is a number of things going on around online services these days, and a number of them involve Astoria one way or the other. I've been working with several of them, varying from providing guidance all the way to writing custom "v.next" versions of Astoria to experiment with their needs. An example of these efforts is the work we're doing to align SQL Server Data Services and the ADO.NET Data Services framework. We would like to see them as the "service" and the "framework" pieces, both using the same HTTP interface, same client interfaces, etc., so we've been spending a bunch of time exploring how to bring them together.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Anyway, there, a bit of a celebration. &lt;/P&gt;
&lt;P mce_keep="true"&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8849779" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/MIX08/default.aspx">MIX08</category></item><item><title>Data Services and Entity Framework beta bits available</title><link>http://blogs.msdn.com/pablo/archive/2008/05/12/data-services-and-entity-framework-beta-bits-available.aspx</link><pubDate>Mon, 12 May 2008 20:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8495736</guid><dc:creator>pabloc</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/pablo/comments/8495736.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=8495736</wfw:commentRss><description>&lt;P&gt;The news are out. The ADO.NET Data Services Framework (Astoria) and the ADO.NET Entity Framework will be shipping as part of .NET 3.5 SP1, and the &lt;A class="" href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx" mce_href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;Beta 1 release is now available&lt;/A&gt;.&amp;nbsp;All the official blogs discussed the details&amp;nbsp;already, including the &lt;A class="" href="http://blogs.msdn.com/astoriateam/archive/2008/05/12/ado-net-data-services-framework-beta-1-is-live.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2008/05/12/ado-net-data-services-framework-beta-1-is-live.aspx"&gt;Astoria team blog&lt;/A&gt;, &lt;A class="" href="http://blogs.msdn.com/adonet/archive/2008/05/11/visual-studio-2008-sp1-beta-net-3-5-sp1-beta.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2008/05/11/visual-studio-2008-sp1-beta-net-3-5-sp1-beta.aspx"&gt;ADO.NET&amp;nbsp;team blog&lt;/A&gt;, &lt;A class="" href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx"&gt;Scott's&lt;/A&gt;, and many others out there.&lt;/P&gt;
&lt;P&gt;Folks out there trying Astoria and the EFx have been working on bits from last December for a while. Finally we have a newer release for everyone to take a look, try stuff and send feedback.&lt;/P&gt;
&lt;P&gt;In addition to the release of the framework and VS, we also put out &lt;A class="" href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=13357" mce_href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=13357"&gt;the Data Services AJAX library in codeplex&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;This is the last beta before we're done, so give this release a shot and let us know what you find!&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8495736" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>Provider availability enables Entity Framework and Data Services over many database vendors</title><link>http://blogs.msdn.com/pablo/archive/2008/05/07/provider-availability-enables-entity-framework-and-data-services-over-many-database-vendors.aspx</link><pubDate>Wed, 07 May 2008 20:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8466279</guid><dc:creator>pabloc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/pablo/comments/8466279.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=8466279</wfw:commentRss><description>&lt;P&gt;There are fresh news about ADO.NET provider support &lt;A class="" href="http://blogs.msdn.com/adonet/archive/2008/05/06/recent-ado-net-entity-framework-provider-news-demos-and-downloads.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2008/05/06/recent-ado-net-entity-framework-provider-news-demos-and-downloads.aspx"&gt;here&lt;/A&gt;, and there is an official looking statement from last December with more details &lt;A class="" href="https://www.microsoft.com/presspass/press/2007/dec07/12-06EntityBeta3PR.mspx" mce_href="https://www.microsoft.com/presspass/press/2007/dec07/12-06EntityBeta3PR.mspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The ADO.NET Entity Framework is designed so that the upper layers of the system are database-independent. There has been many attempts at this in the past, with varying degrees of success.&lt;/P&gt;
&lt;P&gt;I really like the Entity Framework approach because it goes all the way. It's not just a bunch of interfaces to make the API itself generic, but it's also machinery to make things that need to be provider independent so. For example, the Entity SQL compiler and the LINQ to Entities translator sit high in the stack and provides the *same code* for query translation across all databases. That means guaranteed consistency in syntax, something that was somewhere between hard and impossible before.&lt;/P&gt;
&lt;P&gt;Of course, at some point we hand out the query expression to the provider for database-specific handling, and behavioral differences may arise there, but they are much more contained.&lt;/P&gt;
&lt;P&gt;Coming back to the topic at hand, I've been looking at all the buzz about adoption of the ADO.NET Entity Framework provider model and how it enables access to many databases. This is a big deal...we kind of slowed down on database independence with previous versions of ADO.NET. This new round restores the database independent capabilities.&lt;/P&gt;
&lt;P&gt;This is great news both for the Entity Framework and for Data Services (Astoria). It means that developers writing middle-tier code against databases and those creating Data Services get immediate support for using many databases in addition to SQL Server. &lt;/P&gt;
&lt;P&gt;In the case of Data Services, the system itself is designed for data source independent beyond databases. If you have an IQueryable implementation, you're ready to go for read-only services (and you can &lt;A class="" href="http://blogs.msdn.com/astoriateam/archive/2008/04/10/iupdatable-ado-net-data-services-framework.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2008/04/10/iupdatable-ado-net-data-services-framework.aspx"&gt;add IUpdatable for update support&lt;/A&gt;). For custom data sources this flexibility is great. However, when you're targeting relational databases there is no need to go through the process of writing your own IQueryable (which is far from an easy task); we included rich database support out of the box through integration with the Entity Framework.&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8466279" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>The Astoria team is hiring!</title><link>http://blogs.msdn.com/pablo/archive/2008/04/22/the-astoria-team-is-hiring-2008.aspx</link><pubDate>Wed, 23 Apr 2008 09:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8418349</guid><dc:creator>pabloc</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/pablo/comments/8418349.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=8418349</wfw:commentRss><description>&lt;P&gt;The Astoria team builds the ADO.NET Data Services Framework and works on creative projects in the data+web space. In my completely biased opinion, it's quite a special team at Microsoft; we're given a lot of freedom to innovate; we use agile methodologies for development, cross the traditional lines between software and services constantly as we build infrastructure and frameworks that span them, and are constantly looking for new applications and creative solutions to existing problems. &lt;/P&gt;
&lt;P&gt;We are now growing the team as we get ready to take on new challenges. We are looking for folks for Development, Quality Assurance and Program Management positions. If you are interested feel free to drop me a line, ask questions or send your resume directly. You can contact me through this blog's &lt;A class="" href="http://blogs.msdn.com/pablo/contact.aspx" mce_href="http://blogs.msdn.com/pablo/contact.aspx"&gt;contact link&lt;/A&gt; or &lt;A class="" href="mailto:pablo.castro@microsoft.com" mce_href="mailto:pablo.castro@microsoft.com"&gt;email me&lt;/A&gt; directly.&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8418349" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>REST and Concurrency Control</title><link>http://blogs.msdn.com/pablo/archive/2008/04/22/rest-and-concurrency-control.aspx</link><pubDate>Wed, 23 Apr 2008 04:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8417689</guid><dc:creator>pabloc</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pablo/comments/8417689.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=8417689</wfw:commentRss><description>&lt;P&gt;As part of the Astoria design process we scanned through many topics, some of them are straightforward, some are hard but mostly mechanical, but there are some that become interesting, fundamental aspects to address.&lt;/P&gt;
&lt;P&gt;I found the problem of concurrency control over REST interfaces very interesting to explore. The problem is actually well addressed in HTTP so it wasn't that we had to invent a bunch of stuff. It was more about learning what was out there, reading about good/bad stories, and then mapping it to our model and see how it fitted.&lt;/P&gt;
&lt;P&gt;In the end we landed on what I think is a quite nice place. If you're interested, check out &lt;A class="" href="http://blogs.msdn.com/astoriateam/archive/2008/04/22/optimistic-concurrency-data-services.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2008/04/22/optimistic-concurrency-data-services.aspx"&gt;this write up&lt;/A&gt; in the Astoria team blog on the topic.&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8417689" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/REST/default.aspx">REST</category></item><item><title>Unifying service interfaces</title><link>http://blogs.msdn.com/pablo/archive/2008/02/29/unifying-service-interfaces.aspx</link><pubDate>Sat, 01 Mar 2008 01:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7966262</guid><dc:creator>pabloc</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/pablo/comments/7966262.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pablo/commentrss.aspx?PostID=7966262</wfw:commentRss><description>&lt;P&gt;As David Treadwell &lt;A class="" href="http://dev.live.com/blogs/devlive/archive/2008/02/27/213.aspx" target=_blank mce_href="http://dev.live.com/blogs/devlive/archive/2008/02/27/213.aspx"&gt;announced&lt;/A&gt; yesterday, we are starting to align the Windows Live services interfaces to use the AtomPub protocol, and to have a uniform set of conventions that are shared across internet services and the Project Astoria bits.&lt;/P&gt;
&lt;P&gt;What does that mean? It means that starting now (and more in the future) you can interact with many consumer and infrastructure services in the same way. It also means that those Microsoft services out there and your own services -online or on-premises- created with the ADO.NET Data Services Framework look and behave in highly compatible ways.&lt;/P&gt;
&lt;P&gt;You won't need to learn yet another API every time a new service comes out. Furthermore, we (or you, or services providers out there) won't need to create new APIs for every service. Highly uniform interfaces bring the opportunity for extensive client library and tools re-use across services of broad nature.&lt;/P&gt;
&lt;P&gt;We've been talking about this for a while...and it's exiting to see the first pieces start to come in place.&lt;/P&gt;
&lt;P&gt;If you want to know more, see live demos of services and tools working together, and chat about the details, we'll be going through all of this at &lt;A class="" href="http://visitmix.com/2008" target=_blank mce_href="http://visitmix.com/2008"&gt;Mix 2008&lt;/A&gt;. There is a talk specifically about this called "Accessing Windows Live Services using AtomPub" where I'll be telling the whole story and showing the thing working live.&lt;/P&gt;
&lt;P&gt;More details about our Mix sessions &lt;A class="" href="http://blogs.msdn.com/astoriateam" target=_blank mce_href="http://blogs.msdn.com/astoriateam"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;-pablo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7966262" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pablo/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://blogs.msdn.com/pablo/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category><category domain="http://blogs.msdn.com/pablo/archive/tags/MIX08/default.aspx">MIX08</category></item></channel></rss>