Tuesday, December 09, 2008

Windows Azure Test Harness Is Live!

The OakLeaf Systems Azure Table Services Test Harness page is now accessible at http://oakleaf.cloudapp.net/Default.aspx.

Update 5/11/2009: Sample code is available here from my “Retire Your Data Center” cover article for the February 2009 issue of Visual Studio Magazine.

Update 12/10/2008: The public Windows Azure Test Harness has been updated to enable deleting and re-creating all customers, as well as updating the CompanyName entity.

Here’s a updated preview of the first page with 12 rows per page open in Mozilla Firefox 3 at 1024x768 resolution (click image for full-size screen capture; The FireFox 3 formatting problem has been corrected):

Inserting Editing has been disabled to prevent vandalism and the page might be removed temporarily or permanently without prior notice.

Paging is enabled and you can execute a LINQ to REST query that enumerates the EntitySet and counts the number of customers. (LINQ to REST doesn’t support Count() or other aggregate functions.)

Here’s a list of episodes of the illustrated Azure Storage Services Test Harness tutorial, which includes sample code and HTTP GET, POST, PUT, and DELETE requests and responses:

Enjoy!

Sunday, December 07, 2008

LINQ and Entity Framework Posts for 12/1/2008+

Note: This post is updated daily or more frequently, depending on the availability of new articles.

Updated 12/7/2008 2:00 PM PST
• Updated 12/5/2008 5:30 PM PST
• Updated 12/4/2008 5:30 PM PST

Entity Framework and Entity Data Model (EF/EDM)

••• Colin Meek, who hasn’t added a item since 5/13/2008, went wild and posted the following three articles on 12/7/2008:

••• Simon Segal asks on 11/6/2008, Will Microsoft ORM products ever support the ubiquitous MS Access? My take: It’s about as likely as ADO.NET Data Services with an Access data source (i.e., highly unlikely.)

The EF Team’s detailed “Table Splitting”: Mapping multiple entity types to the same table post of 12/5/2008 explains how to minimize retrieving large blob columns or columns that contain sensitive data. The author says:

There are several ways with which to accomplish this in the Entity Framework, but one of the more flexible and powerful approaches is not much discussed. In this blog post, I will provide a soup-to-nuts example, from DDL to client code, of how to implement this pattern.

Julie Lerman announces that her DevTeach session materials are available in her DevTeach: EF Mapping Session Materials are on DevTeach site post of 12/2/2008.

Kristofer Andersson’s Tools - Part 8 - Add-ins - “Model First” in Entity Framework post of 12/4/2008 describes the initial version of the Huagati DBML/EDMX Tools’ new model-first design feature for Entity Framework v1. Model-first depends on the EDMX cleanup procedure described in Kris’s Tools - Part 7 - Add-ins - How to deal with the Entity Framework designer and orphaned entities post of 11/27/2008. Kris says:

This first version supports generating new databases from scratch, essentially doing what Microsoft have described in their “Model First” article in the EFDesign blog. (And what was demonstrated during their “Entity Framework futures” session at PDC2008). The next version will support incremental SQL-DDL generation identical to the L2S version described in Tools Part 6; generating scripts including only the differences between the model and the underlying database.

You can download the Huagati DBML/EDMX Tools version 1.51 (beta) here. Kris’s post includes an illustrated step-by-step example.

Anthony Sneed’s “Flexible Data Access With LINQ To SQL And The Entity Framework” article for MSDN Magazine’s December 2008 issue describes a data access layer (DAL) that uses Data Transfer Objects (DTOs) to carry data across service boundaries in a persistence-ignorant manner, as shown in this diagram:

Tony incorporates change state into the data contract between client and service, which lets you attach entities that have been disconnected from their original context. His article includes a link to sample code from the MSDN Code Gallery that uses Northwind’s Customers and Orders tables as the data source.

Anne Epstein describes her experience attempting to get EF v1 to work with a legacy database in her NHibernate and Entity Framework Battle it Out in the Real World post of 12/3/2008. She and her team finally abandoned EF v1 in favor of NHibernate.

Stefan Cruysbergh’s ADO.NET Entity Framework : Querying metadata post of 12/2/2008 provides 20 sample LINQ queries against EF metadata. The links to the topics didn’t work for me, but you can go directly to the Web site article, which describes a needed addition for EDM developers.

The ADO.NET Team posted a Migrating from LINQ to SQL to the Entity Framework: Stored Procedures for data retrieval article on 12/2/2008, which describes how LINQ to SQL features that support stored procs might be implemented in EF v2. For example, it appears the EF v2 won’t support hand-written code for stored procedures that return multiple resultsets. Code generation to handle stored procs that return scalar values “is being strongly considered for the next release of Entity Framework.” The team appears to becoming non-committal about the details of EF v2’s feature set.

Alex JamesPluralization post of 12/1/2008 explains how pluralization/singularization will work for English class and member names in Entity Framework v2.

It seems to me that the EF team should adopt at least the naming customization features of the Huagati DBML/EDMX Tools. After all, the features currently proposed for EF v2 are simply clones of LINQ to SQL’s implementation.

LINQ to SQL

Mark Monster continues his LINQ to SQL Doing It Manually series with the Part 3 – Relationships episode of 12/6/2004.

•• Jeffrey Schwartz’s “Is LINQ to SQL Dead” post of 12/4/2008 for Redmond Developer News’ DataDriver blog carries this deck:

As Microsoft aligns behind ADO.NET Entity Framework, some V2 features may slip. Could that breath new life into LINQ to SQL?

Jeff quotes Stephen Forte as saying, "It is dead as a door knob. In my opinion there is going to be a shakeout; the first casualty will be LINQ to SQL," Forte told the New York City .NET User Group. Forte’s opinion might be clouded by his membership on the Entity Framework’s Advisory Panel, whose conclusions from their first meeting have never been made public, despite the ADO.NET Team’s promise to do so.

Here’s Andrew Brust’s opinion:

To me it's like Blu Ray [EF] winning out over HD DVD [LINQ to SQL]. While people who bought HD DVD players and discs are not happy about the outcome, they represent a small group of early adopters, all of whom were warned of and understood the risks in making an early commitment. [Product analogies added.}

LINQ to SQL is a component of ADO.NET 3.5 pre-SP1. EF released with SP1. No one from the ADO.NET Team warned LINQ to SQL users that adopting LINQ to SQL, the first release of a Microsoft-supported data access product O/RM tool, that it was to be abandoned as soon as the ADO.NET Team released an unfinished version of EF. It’s also worth noting that sales of BluRay DVD players never have gotten off the ground.

Jeff quotes me as the contrarian at the end of his story.

Scott Hanselman interviews Rob Conery in the podcast from the Hanselminutes Podcast 140 - Rob Conery learns about Domain Driven Design post of 12/4/2008.

Matthew Hunter announces his LINQ to SQL Entity Base Version 1.0 Final version is available for download from CodePlex.

Anthony Sneed’s “Flexible Data Access With LINQ To SQL And The Entity Framework” article for MSDN Magazine’s December 2008 issue describes a data access layer (DAL) that uses Data Transfer Objects (DTOs) to carry data across service boundaries in a persistence-ignorant manner. See the EF/EDM topic for more details.

Eric White describes code to join SQL Server 2000+ tables to Excel 2007 worksheets in his Joining LINQ to SQL and LINQ to Excel post of 12/3/2008. Eric explains:

This can enable some interesting scenarios – let’s say that you have a database that contains some sort of master records, and you’ve downloaded another table and significantly modified it through one means or another. Without using this technique, you would either need to a) upload your modified records into a temporary table, or b) export the master records in some fashion. However, by combining LINQ to SQL with LINQ to Objects in this fashion, you can write some pretty simple C# code that uses LINQ to join data across two separate, disparate data sources.

His post includes a link to download the sample code, which uses Northwind’s Customers table as a data source. This is another example of Microsoft evangelists preference for LINQ to SQL over EF.

Eyal Lantzman’s Sculpture - Model-Driven Development code generation framework post of 12/2/2008 reports the availability of the open-source Sculpture 1.0 Beta 2 code generator from CodePlex. According to the coordinators, Sculpture 1.0 Beta 2 has the following ready-made molds (templates):

    • For Data Source Layer:
      • SQL Server.
    • For Data Access Layer:
      • DAAB (Data Access Application Block).
      • NHibernate.
      • LINQ to SQL.
      • CSLA framework.
    • For Service Layer:
      • Service Library.
      • ASMX (ASP.NET Web Service).
      • WCF (Windows Communication Foundation).
    • For User Interface Layer:
      • Windows Forms.
      • WPF (Windows Presentation Foundation)
      • Silverlight.
      • ASP.NET.
      • ASP.NET MVC.

[Emphasis added.]

Natthawut Kulnirundorn demonstrates how to use DbLinq with LINQ to SQL to change the data source from SQL Server to My SQL in his LINQ with MySQL post of 11/30/2008 (it just showed up on Technorati.) According to Natthawut:

However, the project is still at its very beginning stage and I think it will take some time before we can use it in production environment, IMHO.

See the ADO.NET Team’s Migrating from LINQ to SQL to the Entity Framework: Stored Procedures for data retrieval post in the EF/EDM topic above.

LINQ to Objects, LINQ to XML, et al.

Michael Friis announces in his LinqtoCRM 0.3.0 released post of 12/6/2008 that v0.3.0 of his LINQ to CRM provider for Microsoft Dynamics CRM (4.0) is available for download from CodePlex. According to Michael, LINQ to CRM offers the following features:

  • Where-clauses of some complexity (And/Or, greater/less-than etc.)
  • Joins through relationtionships
  • Translation of queries to FetchXML
  • Parsing of result to anonymous types or CRM entities
  • Orderby
  • Skip/Take
  • Count
  • Contains, StartsWith, EndsWith
  • CRMMetal tool for generating ManyToMany relationship classes

You can watch a four-minute “getting started” screencast here.

Eric White describes code to join SQL Server 2000+ tables to Excel 2007 worksheets in his Joining LINQ to SQL and LINQ to Excel post of 12/3/2008. See the entry in the LINQ to SQL section for more details.

Sreedhar Vengala’s Linq to Objects - A 5 minute overview of 12/1/2008 is an introduction to LINQ for absolute beginners. His Lambda One-Liner or LINQ post of the same date shows how to convert a List<A> to List<B> with a single-line lambda expression or a LINQ query expression wrapped with the ToList<B> function.

ADO.NET Data Services (Astoria)

Andy Conrad’s Developing anAstoria data provider for SubSonic post of 12/5/2008 describes his newly released project as follows:

I have developed a data provider for SubSonic to enable it as a ADO.NET Data Services data source. This ended up being a bit harder then I initially thought, and is definitely still a work in progress. If you are interested, I have started a code gallery project for it.

Gil Fink explains Eager Loading and Lazy Loading in ADO.NET Data Services in this post of 12/5/2008.

Gil Fink shows you how easy it is in his brief Building a Host for ADO.NET Data Service[s] post of 12/3/2008. He also posted a link to his slide deck (in English) and sample code for his recent presentation to the Israel Visual Basic User Group in ADO.NET Data Services Slide Deck.

Marcello Lopez Ruiz’s Depth vs. width in ADO.NET Data Services $expand post of 12/1/2008 explains the syntax of the $expand option for many:one, one:many, and both relationships for a given parent collection.

ASP.NET Dynamic Data (DD)

Steve Naughton demonstrates in his Dynamic Data – Registering Multiple Models post of 12/7/2008 two ways to enable multiple DataContexts or ObjectContexts in DD sites:

  1. Register Multiple DataContexts with the default Model.
  2. Register each DataContext with it’s own Model.

Although Steve says “And here’s the download” at the end of the post, there’s no link.

Steve Naughton’s Dynamic Data - Updated URL FieldTemplate post of 12/2/2008 shows you how to change DD Future’s URL FieldTemplate to display link text instead of the URL in a list box. 

Scott Guthrie lists recent posts about ASP.NET Dynamic Data, as well as other ASP.NET topics, in his Dec 2nd Links: ASP.NET, ASP.NET Dynamic Data, ASP.NET AJAX, ASP.NET MVC, Visual Studio, Silverlight/WPF linkblog post of 12/2/2008.

SQL Data Services (SDS) and Cloud Computing

••• Steve Marx describes new Twitter functionality for his Azure-based blog in his Windows Azure to Twitter and Back post of 12/7/2008. Check out the list of the five latest tweets, which include an autogenerated tweet for each new post. (I use TwitterFeed.)

 InformationWeek posted on 12/6/2008 a seven-page How-To Guide To Cloud Computing by Adam Ely, David Berlind, J. Nicholas Hoover, and John Foley, which will be published 12/8/2008.

••• Roger Jennings gets bitten by moving-target SimpleDB attributes and explains how to avoid the problem in his Attempts to Cure SimpleDB’s Scrambled Attribute Disease post of 12/5/2008 (updated 12/6/2008.)

••• Eugenio Pace delivers the first chapter of his promised Architecting Cloud Applications for the Enterprise series with Part I - Introducing the Actors of 12/5/2008, which provides the cast of characters: VeryBigCorp (VBC), SuperCloudySoftware, a “cloud ISV”, and IssueTracker, a multi-tenant application for (what else?) tracking issues.

••• Kevin Hoffman posted his concerns about Not-so-secret keys and passwords in a SQL Data Services (SDS) - Getting Started forum thread on 12/5/2008. Microsoft’s George Moore responded:

Unless you have some form of secure storage on your local client where your secret keys can be held (such as this USB key fob) for an appropriate cert exchange, then there's no true security unless you move the keys off the client.  And hence the "gatekeeper" security pattern discussed above.

Client side access of trusted code is Hard Problem, unless, of course, you move the code off the local client.

••• Jim Nakashima Updated: Walkthrough on Deploying a Cloud Service (on Windows Azure) on 12/5/2008. Jim says:

Hopefully it provides more clarity into when you should use the various endpoints (cloudservice.table.core.windows.net versus table.core.windows.net for example) and is a little more concise on some of the terminology.

Mike Amundsen started the I thought we could store Entities with more than one property with the same name thread in the SQL Data Services (SDS) - Getting Started forum on 12/5/2008 and learned from Anil Reddy that:

We’ve never supported the storage of “multi-valued fields” – singletons only.   However we should be returning an error in this case since we’re silently dropping data from the payload.

••• Joe Beernink wonders if Custom Configuration By Environment is possible in a SQL Data Services (SDS) - Getting Started forum thread on 12/4/2008. Aleks Gershaft responds:

You can have different storage accounts used for staging and production. At the current time, you can create 2 storage accounts with a single token. So you can use one storage account for test/staging, while another one for production. You can select between them using the ACS setting, which can be changed without requiring a new deployment.

And explains how “ACS settings could also be used to separate the production and staging versions of the same application as well.”

David Pallman posted the source code for his Whatsup sample Azure cloud application to CodePlex on November 8. (I just ran across it.) He describes the app as:

It is a simple web page where you enter your name and status (what you are doing right now) and see the status of others. Similar to what you see in more deluxe form on site like Facebook.

Whatsup is a "Web Role" cloud service project, consisting of an ASP.NET front end. It stores and queries status info using SQL Data Services (SDS).

You can use Whatsup with any Azure account - specify your credentials (username, password) and SDS specifics (authority container) in the Web.Config file, publish to the cloud, and you're good to go.

Roger Jennings reports an outage of SimpleDB while he was in the midst of enhancing a test harness in his SimpleDB Drops Dead at ~1:45 PM PST on 12/4/2008 of 12/4/2008. ListDomainRequest(), CreateDomainRequest(), and DeleteDomainRequest() from the C# library were still unavailable as of 4:45 PM PST. Cloud computing blots its copybook again.

• Deepak Singh, a business development manager at Amazon Web Services (AWS), announced in his Paging Researchers, Analysts, and Developers post of 12/4/2008 the availability of Public Data Sets on AWS. Deepak says:

Public Data Sets on AWS provides a convenient way to share, access, and consume publicly available data within your Amazon EC2 environment. Here is how it works

  • Select public data sets will be hosted by Amazon Web Services for free as an Amazon EBS snapshot.
  • You can access the data by creating your own personal Amazon EBS volume from a publicly shared Amazon EBS public data set snapshot.
  • You can then access, modify, and perform computations on these data sets directly using an Amazon EC2 instance and just pay for the compute and storage resources that you use.

Goilaswati asks for an explanation of the Difference between Azure Storage and SDS Storage in a 12/4/2008 thread in the Windows Azure forum. Microsoft’s Aleks Gershat replied:

There was a similar thread in SDS forum:
"SDS will provide scalable relational database as a service (today, Joins, OrderBy, Top...are supported) and as it evolves, we plan to support other features such as aggregates, schemas, fan-out queries, and so on.  SDS just like any other database also supports blobs.  SDS is for Unstructured, Semi, and Structured data, with a roadmap of having highly available relational capabilities."

This response appears to me to avoid the question of whether SDS storage is built on Azure Table Services. I believe it is.

• John Watte, an XNA/DirectX MVP, explains why his employer chose not to adopt Azure, Amazon EC2 or Google App Engine in his Why we won't be going with Azure thread of 12/3/2008 in the Windows Azure forum. The responses in the thread throw more light on the differences among cloud computing offerings.

Eugenio Pace discusses what Microsoft’s cloud architects have been up to recently and reminisces about problems with his Azure demos for the PDC 2008 SYMP05 - Services Symposium: Enterprise Grade Cloud Applications session in his Architecting Cloud Services for the Big Enterprise post of 12/4/2008. Eugenio says:

For the last couple of months, we’ve been working on scenarios that involve consuming cloud services and applications from "Big Enterprise". The focus being the technical obstacles for adopting cloud services.

Big Enterprise is the moniker we use to describe an organization with rather heavy investments on on-premises software. …

Since PDC, we’ve been working on improving the reference implementations our demos were based on, by incorporating all this experience: obscure pitfalls, wrong assumptions, unexpected limitations, lack of complete symmetry between production and pre-production, pure randomness, etc. …

My plan is to drill down on each of these aspects in the next (several) couple of blog posts, so stay tuned!

Last but not least, most of the sample code demonstrated will be available for you to download and explore in the upcoming weeks.

I’ll be looking forward to Eugenio fulfilling his promises for reference implementations and related sample code.

Jim Nakashima’s Creating Tables post of 12/3/2008 announces that his Simple Table Storage sample has adopted Steve Marx’s approach to creating tables only once, as described in Steve’s Try to Create Tables Only Once post of 11/18/2008. My Azure Table Services test harness uses Steve’s technique.

Kapil Gupta reports Problem with SDS SSIS connectivity in his 12/3/2008 thread in the SQL Data Services (SDS) - Getting Started forum. According to Microsoft’s Matt Mason:

You'll want to get the latest binaries from the Codeplex project. They were updated November 18th to target the new service URL.
http://www.codeplex.com/SQLSrvIntegrationSrv/Release/ProjectReleases.aspx?ReleaseId=17658
A new URL property has also been added to the Connection Manager, incase you need to point to a new service URL in the future.

Kapil notes that currently you must select the SQL Server Data Services Source and Destination link (Sep 24, 2008, Beta) because the release date hasn’t been updated to 11/18/2008

John Folye’s Politicker.com Impeaches Amazon Web Services post of 12/3/2008 describes the Politicker political Web site’s dissatisfaction with AWS EC2 and its return to dedicated hosted services from Voxel.

As I see it, Windows Azure’s goal is to eliminate the administrative headaches that hampered Politicker’s EC2 usage in high-traffic environments in favor of increased automation of scale-up and scale-out operations.

Mike Manos describes Microsoft’s new datacenter design and deployment in his Our Vision for Generation 4 Modular Data Centers - One way of Getting it just right . . . post of 12/2/2008. The post concentrates on the new modular, containerized data center that Microsoft’s constructing in Chicago.

Vollynerd asks if Table/Blob/Queue storage - REST APIs the only available? in a Windows Azure Forum post of 12/1/2008. Microsoft Daniel C. Wang replies:

The only exposed interfaces for the CTP is the REST protocol. We provide the StorageClient library as an example wrapper, but there is no lower-level interface exposed for the CTP.

Hopefully, the Azure Data Services team will enable a simpler, low-overhead protocol and client wrapper in beta drops, especially for use on deployed projects.

Jeff Barr’s Amazon SimpleDB Grows Up post of 12/1/2008 announces that Amazon Web Service’s SimpleDB database service has moved from private to public beta status with a substantial reduction in data storage fees (from $1.50/GB-month down to $0.25/GB-month). Jeff says:

We've made the business decision to go with SimpleDB even simpler than it was before. You can now get started for free. For at least the next six months, you can consume up to 500 MB of storage, and you can use up to 25 machine hours each month. You can transfer 1 GB of data in, and another 1 GB out. You can move as much data to and from Amazon EC2 as you would like, for free.

I’m in the process of writing and testing an ASP.NET test harness for SimpleDB that emulates the Azure test harness described in my seven-part Azure Storage Services Test Harness series. Currently, I’m testing it locally, which emulates the Azure version’s local Web hosting with Azure data.  Later this week, I’ll test hosting the ASP.NET project on EC2, which very closely resembles an Azure production environment. Another version that’s hosted on EC2 and uses the EC2 instance’s SQL Server Express engine as the data source is operational.

(Above repeated from the 11/24/2008 post)

Amazon announced the following new SimpleDB features that will be forthcoming “in the next few weeks:”

  • SQL-like SELECT API: With this feature, you will be able to employ a very familiar SQL-like query language when constructing queries and building applications. The SELECT API will help you be more productive with Amazon SimpleDB right from the start.
  • Batch Put: Enables you to streamline the upload of multiple items or attributes, with a single batch API request rather than multiple single item calls.

I would expect batched PUT operations would greatly improve the current slow upload times for simple entities.

Zoho Corp’s announced its new CloudSQL middleware in a recent The Future of SQL in a SaaS world: Announcing Zoho CloudSQL post and Access Business Data in the Cloud Through SQL white paper. CloudSQL offers features like SimpleDB’s SELECT API for Zoho Reports with a JDBC driver and entity mapping. The firm plans to extend CloudSQL to other Zoho services, as well as offer ODBC and REST drivers.

SQL Server Compact (SSCE) 3.5 and Sync Services

No significant posts as of 12/7/2008, 8:30 AM PST 

Miscellaneous (WPF, WCF, MVC, Silverlight, etc.)

Rob Conery bites the DDD bullet in his MVC Storefront Part 25: Getting Started With Domain-Driven Design post of 12/5/2008 that includes a link to a 42-minute (!) screen cast.
 

Saturday, December 06, 2008

Attempts to Cure SimpleDB’s Scrambled Attribute Disease

My SimpleDB Drops Dead at ~1:45 PM PST on 12/4/2008 post of 12/4/2008 (updated 12/5/2008) described a problem I called SimpleDB’s Scrambled Attribute Disease (SAD). SAD’s symptom is an arbitrary but consistent order of attributes returned by invoking a consistent QueryWithAttributesRequest() method, followed by a dramatic shift in the sequence of attributes to a new arbitrary but consistent order. The symptom occurs in homogeneous SimpleDB domains to which all items have been added by an identical PutAttributesRequest() method.

Update 12/6/2008 7:00 AM PST: Clarification of issues and response from the SimpleDB tech support staff added.

An outbreak of the disease wreaks havoc on strongly typed generic List<T>s generated by iterating the Items collection returned by invoking the QueryWithAttributesResponse() method and supplying queryResponse.Item[i].Attribute[j].Value expressions as the constructor's arguments, as illustrated in the code examples below. These generic lists commonly serve as the data source for databound .NET Web and Windows controls, as shown in the screen captures later in this post.

My expectation of attribute order consistency was based on the C# library’s use of a numeric index j for the Attribute[j] axis. However, Stefano@AWS squelched my expectation with the following response to my Receiving InternalErrors from SimpleDB thread in the Amazon SimpleDB (Beta) forum:

Indeed we do not provide any guarantee about the order of attributes returned by QueryWithAttributes.

Unlike traditional database systems, SimpleDB provides a sparse rather a fixed schema. Because of that, different Put requests against the same domain can insert items with different sets of attributes.

And different Put requests can insert the same set of attributes but with a different order. For example, nothing prevents a user from issuing a Put where the first attribute is CustomerId and the second is CompanyName, and then a second Put where the first attribute is CompanyName and the second is CustomerId.

Because of that, the QueryWithAttributes API can't and won't provide any guarantees about returning attributes in the explicit order added by the Put operation(s) that inserted the data being returned.

To prevent other developers from being lead down the primrose path to SAD, the C# library documentation for the QueryWithAttributesResponse.Item property and QueryWithAttributesResponse.WithItem() method should carry the following warning label:

There is no guarantee as to the order of attributes returned by this method’s/property’s list.

Similarly, adding this caveat to the QueryWithAttributesRequest.AttributeName property would prevent developers from spinning their wheels attempting to order attributes with a list:

The order of attributes retrieved in the QueryWithAttributesResponse.Item property is not affected by the order of attributes in this list.

Providing an overload that substitutes Item[i].Attribute[Name] for the numeric Item[i].Attribute[j] index would be appreciated.

Note: Extensive testing over a period of more than six months indicates that the SAD malady doesn’t appear to be present in Microsoft’s SQL [Server] Data Services, whose entities have characteristics that are quite similar to SimpleDB items.

This post contains additional details about the problem and the initial method of curing it, in response to a request from Stefano@AWS in the same forum thread.

POST Header and Body to Add a Single Customer Item to the Customers Domain

Executing the C# library’s PutAttributesRequest() method for the first Northwind Customer item (entity) sends the following HTTP POST header and body:

The number (#) in the Attribute.#.Name and Attribute.#.Value POST query string specify explicitly the ordinal sequence of the attributes for the item.

POST Header and Body for a QueryWithAttributes Request

However, invoking the QueryWithAttributeRequest() method doesn’t return attributes in the explicit order added by the POST operation, as illustrated by this example which contains the elements for the first and last items of a request for the first 12 Customer items:

The sequence of attributes in the preceding items is clearly scrambled.

Note: The query is for the first 12 items, not the first 20 as shown above.

Mapping Attributes from the POST Body to List<Customer> Members

The sequence of attributes returned by the QueryWithAttributeRequest() method reflected in the <Item> elements appears in the After Breakdown column of the table below. Breakdown refers to the 12/4/2008 interruption in SimpleDB’s operation as reported in the SimpleDB Drops Dead at ~1:45 PM PST on 12/4/2008 post of 12/4/2008 (updated 12/5/2008).

Ordinal Required Sequence Before Breakdown After Breakdown
0 CustomerID CompanyName CustomerID
1 CompanyName CustomerID ContactTitle
2 ContactName ContactTitle Address
3 ContactTitle Address CompanyName
4 Address Region Region
5 City Country Country
6 Region Fax PostalCode
7 PostalCode PostalCode Fax
8 Country Phone Phone
9 Phone City City
10 Fax ContactName ContactName
Before Breakdown Code and Screen Capture

Before Breakdown required the following code to map the sequence of attributes to obtain the Required Sequence of fields:

Note that the first item in the page (ALFKI) had a different entity mapping, as shown in this Before Breakdown screen capture:

It’s not known if the the single scrambled item problem is repeatable.

After Breakdown Screen Capture and Code Modifications

After SimpleDB resumed operation, regenerating the list with the preceding mapping code resulted in this mess:

All columns except City and Country were incorrectly mapped by the Before Breakdown code.

The After Breakdown items required the mapping code to be modified as follows:

Here’s trial version of the SimpleDB Explorer’s idea of the After Breakdown attribute sequence, which has no relationship to either of the preceding examples:

The Scrambled Attribute Disease Workaround

The workaround to handle arbitrary attribute sequences dynamically involves determining the index (ordinal) of the incoming attribute to assign in sequence to the List<Customer> member. The following C# method provides the required mapping in conjunction with the SimpleDB C# library:

Notice the failed attempt to force sequential return of attributes with the attribs list, which had no affect on the problem. It’s probably safer to execute the loop for each list item to avoid errors from the occasional malformed item.

Update 12/6/2008 8:00 AM: It’s obvious from Stefano’s response that the test should be made for each item, so the If (i == 0) conditional has been removed from the code. Performance for paged return of 12 items isn’t affected materially by the change.

Note: The QueryExpression in the preceding code isn’t valid. It was in limbo while this post was being written.

An overload that substitutes Attribute.Name for the numeric Attribute[index] would eliminate the multiple-loop thrashing.

Substituting a Dictionary for One of the Two Nested Loops

Update 12/6/2008 2:00 PM PST: bd_ posted a comment that suggested substituting a Dictionary collection for the two nested loops. Initializing a Dictionary<string, string> or Dictionary<string, object> with null values provides all required argument values to the C# List<T> constructor. (The VB version with optional parameters having default Nothing values would be simpler.)

The following code assumes that the target object’s properties that aren’t reference values are nullable:

For target classes with varying property types, Parse/TryParse the string values to the appropriate type in the constructor call.

If you have any suggestions for a more efficient method of handling dynamically changing attribute sequences, please let me know in a comment to this post.

Friday, December 05, 2008

SimpleDB Drops Dead at ~1:45 PM PST on 12/4/2008

While I was implementing the Update Customers feature of my latest test harness that substitutes Amazon SimpleDB as the data source for local and Amazon EC2 deployment, SimpleDB started returning 500 Internal Error messages instead of expected responses. I noticed the problem at between ~1:45 and ~2:00 PM PST on 12/4/2008.

Update 12/5/2008 7:00 AM PST: Service returned to normal at ~5:00 PM PST but my test harness/domain were afflicted with SimpleDB Scrambled Attribute Disease (SAD).

Update 12/5/2008 1:00 PM PST: Adds Amazon’s report about the cause of the problem (see end of post) and mentions post with workaround for SAD.

Here’s a snapshot of the AWS Status page at about 2:45 PM (click images for full-scale captures):

You can read about other users experiences in the Receiving InternalErrors from SimpleDB thread of the Amazon SimpleDB (Beta) forum. I’m surprised that there weren’t more complaints in the thread.

The test harness I’m building is a clone of the Azure Table Services test harness described in Azure Storage Services Test Harness: Table Services 1 – Introduction and Overview and subsequent episodes. You can test most features of the Azure version by clicking here. The intent of the three test harnesses is to compare the performance of:

  1. Azure Table Services in Developer Table and Developer Fabric mode
  2. Azure Table Services in Azure Table and Developer Fabric mode
  3. Azure Table Services in Azure Table and Azure Fabric mode
  4. ASP.NET application deployed locally with local SQL Server Express instance (baseline)
  5. ASP.NET application deployed to Amazon EC2 with EC2 SQL Server Express instance
  6. ASP.NET application deployed locally with SimpleDB data source
  7. ASP.NET application deployed to Amazon EC2 with SimpleDB data source

Here’s the EC2/SimpleDB test harness’s UI:

[Notice the substitution of the City attribute value for ContactName, Phone for City, and PostalCode for Phone for the ALFKI item (entity) in the above screen capture. This was the first occurrence of what I call SimpleDB Scrambled Attribute Disease (SAD). See the end of this post for a more egregious example.]

Update 12/4/2008 3:30 PM PST: I found no evidence that “Error rates are beginning to decline.” In fact, at 3:30 PM PST, the status indicator reverted from a bogus “Service is operating normally” (green) state to an equally erroneous “Performance issues” (yellow) state as shown below:

I’m encountering 100% errors on ListDomainRequest() C# method calls with three retries. That spells Service disruption (red) to me.

Update 12/4/2008 4:30 PM PST:

My app starts with ListDomainRequest() to create a domain if the “Customers” domain isn’t present. Thus I need both ListDomainRequest() and CreateDomainRequest() methods operational because the service went down while I was executing a Delete/Recreate Domain operation. (The domain was deleted but not recreated.)

Update 12/4/2008 5:30 PM PST: SimpleDB came back up at ~5:30 PM but somehow scrambled the sequence of entities. Here’s what the test harness looked like after executing the ListDomainRequest() and CreateDomainRequest() methods, followed by a QueryWithAttributesRequest() for the first 20 Customers items:

Notice that ContactTitle values have moved to the CustomerID column, CustomerID to CompanyName, Address to ContactTitle, and PostalCode to Fax for all entities, not just the first, as in the earlier screen capture, which has a different transposition. This isn’t the first time I’ve encountered the problem, but it’s the first time the problem affected more than one entity.

I’m in the process of writing a separate post with more details about SimpleDB Scrambled Attributes Disease.

The Attempts to Cure SimpleDB’s Scrambled Attribute Disease post of 12/5/2008 details the problems with attribute sequence as a moving target.

Stay tuned for more updates if Amazon chooses to say anything about the outage.

Update 12/5/2008 1:00 PM PST: Matt@AWS noted in the Receiving InternalErrors from SimpleDB thread:

6:21 PM PST  To close the loop, at 1:47 PM PST, while performing an administrative operation on our domain mapping system, we experienced several connectivity issues and this combination of events caused a portion of the domain directory to become inaccessible. This affected all CreateDomain, ListDomain, DeleteDomain API requests and a high percentage of PutAttributes, DeleteAttributes, and GetAttributes API requests for domains in the inaccessible portion of the directory. Later this evening, we will deploy a fix to our directory connectivity software that will prevent reoccurrence of this issue.

The fact that only a part of the domain directory died probably is responsible for the few trouble reports on the Internet.

Monday, December 01, 2008

LINQ and Entity Framework Posts for 11/24/2008+

Note: This post is updated daily or more frequently, depending on the availability of new articles.
Updated 12/1/2008 4:30 PM PST
Updated 11/27/2008 9:00 AM PST
               • Updated 11/26/2008 9:00 AM PST

Entity Framework and Entity Data Model (EF/EDM)

Julie Lerman’s Calling UDFs from Entity Framework - Not what you might have expected post of 11/29/2008 describes how EF handles SQL Server’s user-defined functions, which you must call directly from the SSDL with Entity SQL, unless they return an entity instead of a scalar value.

Boincer asks “So does SDS work with .Net's Entity Framework at all?” is his SDS and Entity Framework thread of 11/29/2008 in the SQL Data Services (SDS) - Getting Started forum. Microsoft’s Anil Reddy responds:

We continue to work on this as we speak. I cannot mention the timeline, but we should have the functionality that you mention exposed very soon. [Emphasis added.]

Support for EF depends on implementing schemas for SDS entities, which the SSDS team has been promising for many months. It probably depends also on implementing the AtomPub wire protocol, the goal of this incubation project:

Accessing SDS using ADO.NET Data Services - This incubation project focuses on aligning SDS and ADO.NET Data Services. With this alignment SDS will support AtomPub and JSON formats. It will also provide support for established set of conventions for constructing URLs to point to resources. We are also extending ADO.NET Data Services to provide access to the flexible data stored in SDS.

Note: Disregard the incorrect Codename “Astoria” – Online article title; that’s a separate incubator project.

Kristofer Andersson’s Tools - Part 7 - Add-ins - How to deal with the Entity Framework designer and orphaned entities post of 11/27/2008 describes the beta version of a new EDMX Cleanup feature added to the Huagati DBML/EDMX Tools that …

will assist with cleaning up orphaned entitysets/entitytypes without the need for an xml editor. The first version supports creating CSDL equivalents from orphaned SSDL entities, or alternatively dropping orphaned SSDL. Creating SSDL/dropping CSDL will be added in the next version.

You can download a copy of v1.49 the beta here.

His Offtopic: Thanksgiving, the turkey holiday… article offers a Thai-flavored recipe for roast turkey stuffed with pineapple, which has enzymes that act as a meat tenderizer, and a link to his wife’s recipe for Thai Left-over Turkey Curry.

Julie Lerman shares my reservations (see below) about Srikanth Mandai’s approach to sub-dividing EDMs by adding <Using> elements in her CSDL's Using Construct for Big Models post of 11/26/2008. I wouldn’t be surprised to see Kristofer Andersson tackle this problem in a future DBML/EDMX Tools update.

Beth Massi interviews Milind Lele in the Drag-Drop Data Binding Comes to WPF in Visual Studio 2010 Channel9 video of 11/26/2008. Milind demonstrates drag-and-drop data-binding an Entity Data Model for Northwind’s Customers and Orders tables to a WPF master-details form. The feature is coming in VS 2010.

Matthieu Mezil asks How to delete all the related entities? and answers his question in a brief 11/26/2008 post.

Srikanth Mandadi’s Working With Large Models In Entity Framework – Part 2 post of 11/26/2008 suggests “Sub-dividing the model into smaller models with type reuse,” which has the following shortcomings:

  1. No designer support: The designer does not support “Using”. So you would have to create your model first using designer and then edit the xml to use Entities from a related model.
  2. Bi-Directional Navigation Not Supported: Since you cannot create cycles when creating model dependencies, you can declare navigation properties only in one model.

These two limitations are likely to make this approach unpopular.

Matthieu Mezil observes in his EF: Attach a graph post of 11/25/2008:

In a lot of cases (WCF scenario for example) we need to attach a graph to a context. But the graph can be modified when it is detached. So you have to apply modifications when you attach it back. To do this, ObjectContext class has a method ApplyPropertyChanges. This method only applies to the scalar properties, so it’s insufficient for graphs. …

In fact, in a WCF scenario for example, you never get the same ObjectContext. So to delete an entity, it means that you need to load it from DB to delete it then. In this case, I prefer to use a SSDL Function (which can be a DB stored procedure) to delete it directly with just the entity key.

He then goes on to provide the source code for a static AttachExtension class which supports most modification cases.

Ido Flatow asks What does Entity Framework has to do with MSBuild? (11/24/2008) and provides his own answer:

The answer to the above question should be “nothing, unless you’re trying to build a project that references entity framework”, but apparently it isn’t so.

He supplies the solution (adding an <assemblyBinding> group to the config file) to running the project with .NET 3.5 as the target framework.

Srikanth Mandadi’s Working With Large Models In Entity Framework – Part 1 post of 11/24/2008 acknowledges the performance problems that occur when EF’s Entity Data Model reaches 50 to 100 tables. Metadata load and view generation times increase roughly in proportion to the number of tables and the number of interconnections between the tables. The post notes that you can reduce view generation time by pre-compiling the view, but the only practical method of reducing metadata load time is to split the model.

Alex James want EF users and trainers to stop referring to the EDMX file as the Entity Data Model (EDM) in his EDM misconceptions post of 11/24/2008. But he does acknowledge that the ADO.NET Team is at least partially responsible for the confusion by using the EDMX file extension.

LINQ to SQL

Kristofer Andersson tackles set-based delete operations in his Architecture - Linq-to-SQL and set-based operations: Delete statements post of 11/25/2008, which is a follow-on to his earlier post about set-based update statements: Architecture - Linq-to-SQL and set-based operations: Update statements of 11/5/2008. Kris notes:

Microsoft’s Bart de Smet (author of the B# blog) also recognized the need for language integrated set-based operations in his “Dude, where’s my LINQ DML” blog entry. Although his article left out the actual implementation - he’s instead elaborating on a generic interface to front this functionality. (Although I have to say that I think my implementation results in more clean end-user code than his suggested interface. I know I’m abusing lambdas for the “set”-part but I think it is clear enough anyway…).

See below for a copy of last week’s post about Bart’s article.

••• Visual Studio Magazine’s “Speed O/R Mapping with LINQ to SQL” cover story by Roger Jennings for the December 2008 issue carries the following deck:

LINQ to SQL continues to be a top contender in the .NET object/relational mapping tool market despite Microsoft's promotion of the Entity Framework as one of the "Pillars of SQL Server 2008: Dynamic Development."

The article includes a table that compares LINQ to SQL and Entity Framework features and a “Visual Studio 2008 SP1 Add-Ins Remove LINQ to SQL Roadblocks” sidebar that describes Huageti Systems’ DBML/EDMX Tools utility for LINQ to SQL and Entity Framework and Damien Guard’s T4 template for customizing LINQ to SQL partial class code generation.

The LINQ to SQL Featured in Visual Studio Magazine’s December 2008 Cover Story post of 11/24/2008 adds related OakLeaf blog links and a couple of minor corrections to the text and table. (Repeated from LINQ and Entity Framework Posts for 11/17/2008+.)

Bart De Smet’s Dude, Where’s My LINQ DML? post of 11/22/2008 discusses adding DML for “batch updates that don’t require client-side input or computation.” Bart demonstrates attempts at “Updateable LINQ to Objects,” “Updateable remotable LINQ,” and “Introducing IUpdateable<T>”, but bails with the following:

I’ll leave a concrete implementation of an update provider to the inspired reader; a basic prototype for SQL (only allowing columns to be updated with constant string or integer values) worked like a charm.

(Repeated from LINQ and Entity Framework Posts for 11/17/2008+.)

LINQ to Objects, LINQ to XML, et al.

Justin Etheredge proposes Taking the Magic out of Expression<T> in his 11/29/2008 post, which provides a easy-to-read introduction to the implementation of expression trees in C# 3.0.

LinqMaster’s Yield Statement in C# post of 11/26/2008 explains how the Yield statement relates to iterators for LINQ collections that implement IEnumerable.

ADO.NET Data Services (Astoria)

Simon Segal concludes in his REST Vs. SOAP - Is the writing on the wall for WSDL & SOAP? post of 11/27/2008 that:

A lot of excitement seems to be being generated [at Microsoft] around REST and remarks like “keep using SOAP and WSDL if it works for you and your comfortable with it”, only seem to support that notion that the focus is shifting.

ASP.NET Dynamic Data (DD)

Vincent Home explains why Dynamic Data is an important development in his Dynamic Data a Nutshell post of 11/29/2008 and links to Scott Hanselman’s earlier Putting ASP.NET Dynamic Data into Context post of 4/10/2008, which offers a more complete analysis.

David Ebbo’s Fun with T4 templates and Dynamic Data post of 11/26/2008 continues the trend started by Damien Guard and Danny Simmons toward code-generation with T4 templates for data-driven projects. David’s template automates getting started with a DD custom page by replacing the FormView with a DetailsView and adding a DynamicControl for each field. The template works with both LINQ to SQL and Entity Framework data sources.

Steve Naughton also updated Dynamic Data Compound Column *** UPDATED 2008/11/08 *** again on 11/26/2008.

Steve Naughton’s DynamicData - Automatic Column Update For Entity Framework post of 11/26/2008 is an update to his earlier Automatic Column Update post of 5/25/2008.

David Ebbo demonstrates Using User Controls as Page Templates in Dynamic Data with or without routing in this 11/25/2008 post, which includes downloadable code.

SQL Data Services (SDS) and Cloud Computing

••• Jeff Barr’s Amazon SimpleDB Grows Up post of 12/1/2008 announces that Amazon Web Service’s SimpleDB database service has moved from private to public beta status with a substantial reduction in data storage fees (from $1.50/GB-month down to $0.25/GB-month). Jeff says:

We've made the business decision to go with SimpleDB even simpler than it was before. You can now get started for free. For at least the next six months, you can consume up to 500 MB of storage, and you can use up to 25 machine hours each month. You can transfer 1 GB of data in, and another 1 GB out. You can move as much data to and from Amazon EC2 as you would like, for free.

I’m in the process of writing and testing an ASP.NET test harness for SimpleDB that emulates the Azure test harness described in my seven-part Azure Storage Services Test Harness series. Currently, I’m testing it locally, which emulates the Azure version’s local Web hosting with Azure data.  Later this week, I’ll test hosting the ASP.NET project on EC2, which very closely resembles an Azure production environment. Another version that’s hosted on EC2 and uses the EC2 instance’s SQL Server Express engine as the data source is operational.

Note: I’m finding some strange behavior of the QueryWithAttributesResult class returning attributes in an unexpected sequence and an issue with the use of the QueryWithAttributesRequest’s sort operator in query expressions. More details will follow this week.

••• Mike Amundsen’s SDS Feature Wish List of 11/30/2008 lists his request for added HTTP protocol features. Mike says:

You might notice that most of the requests I list here relate to 'application protocol' level items - HTTP. That's because I am currently most interested in these issues and I have not found too many others covering the same space. I know there are lots of important database-related features that SDS can include, too.

••• George Reese presents security issues with Amazon Web Services that also apply, at least in part, to the Azure Services Platform and Google App Engine in his Key Security Issues for the Amazon Cloud post of 11/30/2008 and his earlier Twenty Rules for Amazon Cloud Security post of 11/27/2008.

Steve Marx’s Deleting Entities from Windows Azure Without Querying First post of 11/29/2008 shows you how to directly delete entities whose composite primary key values you know. Direct deletion saves a server round trip.

Mike Levy asks How "expensive" is it to create a queue? in an 11/29/2008 thread in the Windows Azure forum. Microsoft’s Daniel C. Wang replies that the resource cost is approximately the same as creating a blog container, which he considers “cheap.” Determining the economic cost remains in the dark until Microsoft announces pricing for Azure Queue Services.

Ken Church, Albert Greenberg, and James Hamilton analyze micro- versus mega-datacenters in their On Delivering Embarrassingly Distributed Cloud Services paper presented at the Seventh ACM Conference on Hot Topics in Networks (Hotnets 2008), 10/6-7/2008 in Calgary. In many cases, especially e-mail processing, geodisperse server “condos” holding 48 servers are more cost-effective than tier II+ datacenters housing 54,000 servers. (You can read all conference papers in this 20-MB PDF file.)

Boincer asks “So does SDS work with .Net's Entity Framework at all?” is his SDS and Entity Framework thread of 11/29/2008. See the EF/EDM section for Microsoft’s reply.

Michael Arrington’s Live Cashback Having A Bad Black Friday post of 11/28/2008 observes that “users are reporting that [Microsoft’s Live Cashback site] has been down much of [Friday] morning, and more than half of my attempts to connect are timing out.” He points out:

It’s also not so great for Microsoft’s expanding cloud computing efforts. If Microsoft can’t keep their own sites live on heavy traffic days, they can’t expect other companies to have faith in them as a platform either.

There’s a bit more more about the outage in Rajat Taneja’s Black Friday cashback blackout post to the Live Search blog of 12/1/2008.

Mike Amundsen describes updates to his SDS Provisioning Client in his Sample SDS Web Client Updated thread of 11/26/2008 in the Windows Azure forum. The new release “includes the ability to display the SDS metrics for authorities and containers as well as an option to view the "raw" SDS responses for all queries.” 

Stuart Lodge’s A fix for the Azure TableStorageMemberProvider post of 11/26/2008 solves this bug, a providerKey is generated but is never actually stored in the table storage, by adding a single line of code. Microsoft’s Frank Siegemund says the bug is a known issue in the Simple fix for ProviderUserKey in TableStorageMembershipProvider in the SDK samples thread of the Windows Azure forum and provides source code for the current method.

Steve Marx followed up on an earlier post (see below) with his Windows Azure Worker Role to Deal with Spam post of 11/25/2008. The post includes a live link to test Steve’s anti-spam implementation.

Scott Watermasysk’s Cloud Options - Amazon, Google, & Microsoft post of 11/25/2008 compares the features of the three major cloud computing platforms. Scott gives the Azure Services Platform props for background processing (not available with the Google App Engine), “super-simple deployment,” and staging. Dare Obasanjo gives Scott’s post high marks in his A Comparison of Amazon, Google and Microsoft's Cloud Computing Offerings post of the same date.

Jon Udell’s IronPython/Azure status report of 11/25/2008 doesn’t paint a rosy picture for using IronPython in the cloud. Windows Azure’s security model currently prevents importing even pure Python modules. Jon did manage to get Sriram Krishnan’s Python module, “which wraps the RESTful interface to Azure blobs,” by exchanging Python’s minidom, httplib, time, and base64 modules with their .NET equivalents.

Steven Levy says on page 7 of his Ray Ozzie Wants to Push Microsoft Back Into Startup Mode cover article of 11/24/2008 for Wired Magazine’s December 2008 issue:

The Ozzie project that must deliver results is Microsoft's so-called operating system for the cloud. As more apps become Web-based, the raison d'être for Windows—running programs on desktop PCs—becomes less compelling. What better way to make up for the decreasing importance of a desktop operating system than to create a dominant OS that runs services in the cloud? This is not only a crucial effort but one in which Microsoft is playing catch-up: Amazon.com went live with its cloud services in early 2006 and now hosts data storage or applications for more than 400,000 developers, including the complete historical archives of The New York Times. Google's entire company is based on the premise that people want to move from desktop to cumulus. But Microsoft hopes to use its cloud OS (codenamed Red Dog, now called Windows Azure) to dominate the cloud the way DOS and Windows did the desktop. [Emphasis Levy’s.]

He then goes on to deliver additional background on the Red Dog project and Live Mesh.

Lori MacVittie’s Cloud Computing: Vertical Scalability is Still Your Problem post of 11/24/2008 discusses issues with vertical, rather than horizontal scalability. Her definitions:

Horizontal scalability is the ability of an application to be scaled up to meet demand through replication and the distribution of requests across a pool or farm of servers. It's the traditional load balanced model, and it's an integral component of cloud computing environments.

Vertical scalability is the ability of an application to scale under load; to maintain performance levels as the number of concurrent requests increases.

Lori suggests “Things you can do to improve vertical scalability

  1. Optimize SQL / database queries
  2. Take advantage of offload capabilities of application delivery solutions available
  3. Be aware of the impact on performance and scalability of decomposing applications into too finely grained services
  4. Remember that API usage will impact vertical scalability
  5. Understand the bottlenecks associated with the programming language(s) used and address them”

Steve Marx demonstrates Adding a Property (Column) in Windows Azure Tables (11/24/2008) by adding UserIP, UserAgent, Referrer, and IsSpam properties (attributes) to the BlogComment entity of his blogging application with a flexible schema. Steve notes that local Developer Storage runs on a SQL Server 200x Express instance, so his method only applies to instances running on Azure’s cloud storage.

LiquidBoy’s  How do you make a Container's content read-accessible to the public? thread started 11/24/2008 in the SQL Data Services (SDS) - Getting Started forum elicited a reply from the SDS Team’s Rick Negrin:

We do not have that capability today.  The only way to access a container is using the username and password for the account that owns that container. So unless you give out your password no one else can access it. This is something we are looking to implement in the future.

As Ryan Dunn notes in another reply, Azure Data Storage services and the Windows Azure OS enable public access to applications, tables, blobs, and messages.

SQL Server Compact (SSCE) 3.5 and Sync Services

Steve Lasker’s Demos, Presentations, Links, Screencasts and Videos for SQL Server Compact post of 11/25/2008 covers his recent presentations at PDC and Tech Ed:

His extraordinarily long post also includes links to many SSCE and Sync Services demo projects and other related resources.

Miscellaneous (WPF, WCF, MVC, Silverlight, etc.)

Simon Segal’s ASP.Net only for line of business? [Silverlight baby, Silverlight - Part 1] post of 11/24/2008 discusses the issues developers face when deciding which new technologies to adopt and his decision to take on development of a Silverlight 2 project. You can download the project’s initial UI here.

Microsoft announces availability of the Microsoft Web Platform Installer (Release Candidate), which installs Visual Web Developer 2008 Express Edition, SQL Server 2008 Express Edition, Visual Studio Tools for Silverlight, latest ASP.NET MVC beta and the .NET Framework 3.5 SP1 on Windows Vista RTM, Windows Vista SP1, Windows XP, Windows Server 2003, Windows Server 2008. The OS support added in the RC makes it ideal for installing these packages on an Amazon EC3 Windows Server 2003 instance.

Eric White adds Query Composition using Functional Programming Techniques in VB 9.0 in his Functional Programming Tutorial for Visual Basic 9.0 post of 11/24/2008 to his earlier Query Composition using Functional Programming Techniques in C# 3.0. Eric says:

The examples are converted to Visual Basic, and I’ve adjusted some topics to accommodate the differences between Visual Basic and C#. As with the C# tutorial, I've targeted it towards VB developers who have no functional programming experience.