Sonntag, 31. Januar 2010

Dallas oder Denver Clan?

Unter dem Codenamen “Dallas” hat Microsoft ein neues Produkt vorgestellt, welches einem ermöglicht auf statistische Daten zuzugreifen. Diese Daten werden in einem Microsoft Data Center zentral von unterschiedlichen Anbietern (z.B. Behörden, Firmen) zur Verfügung gestellt und können dann über die Azure Plattform von Entwicklern gelesen werden. Die Abrechnung des Zugriffs erfolgt zentral über die Windows Azure Bezahlservices(Live-Plattform).
In der jetzigen CTP-Phase kann man über Microsoft Connect einen Invitation Code beantragen, womit man dann über seinen Live-Zugang diesen Dienst registrieren kann. Registrierung erfolgt über https://www.sqlazureservices.com/
Zur Zeit werden u.a. die Datendienste von
  • Data.Gov (Kriminalstatistik von den USA)
  • InfoUSA Business Analytics U.S., U.K. and Canada (Geschäftsdaten aus den USA und Kanada)
  • NASA Mars Exploration Rover Mission Images (Bilder von der Mars Expedition – ziemlich cool)
  • UNESCO UIS Data (Statistische Daten zu Ausbildung, Wirtschaft, Technik)
Dallas Ressourcen
Ein beispielhafter Zugriff auf diese Daten ist dann recht einfach und sieht so aus:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Dallas.Services;

namespace ConsumingDallasData
{
    class Program
    {
        static void Main(string[] args)
        {
            // Specify the account key and unique user ID to use for the query
            string accountKey = "";
            string uniqueUserId = "";
            // Create a service proxy with which to execute the query. Note that the 
            // service proxy requires the
            // account key and unique user ID
            FAO3510Service service = new FAO3510Service(accountKey, new Guid(uniqueUserId));

            List results = service.Invoke(null, null);

            // Set up a header row for the results
            Console.WriteLine("{0,13}{1,24}{2,18}{3,7}{4,10}", "Series Code", "Country or Area Code", "Country or Area", "Year", "Value");

            // Iterate through the result set
            foreach (FAO3510Item item in results)
            {
                Console.WriteLine("{0,13}{1,24}{2,18}{3,7}{4,10}", item.SeriesCode, item.CountryOrAreaCode, item.CountryOrArea, item.Year, item.Value);
            }

            Console.ReadLine();

        }
    }
}

Die Service-Proxy-Klasse bekommt man über https://www.sqlazureservices.com/Subscriptions.aspx generiert. Die Abfrage der Daten kann auch über eine REST-konforme Query (z.B. Bild der Mars Mission) erfolgen:

// REST Call

            // Establish a Web Request to the Dallas Dataset Url
            string url = "https://api.sqlazureservices.com/NasaService.svc/MER/Images/1F128724129RSD0211P1003L0MZ?$format=raw";
            WebRequest request = WebRequest.Create(url);
            // Specify the request headers containing our account key and unique user ID
            request.Headers.Add("$accountKey", accountKey);
            request.Headers.Add("$uniqueUserID", uniqueUserId);
            // Get the response
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            // Write the status of the response to the Console
            Console.WriteLine(response.StatusDescription);
            // Wait for input from the user
            Console.ReadLine();
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            // save as file
            const int BUFFER_SIZE = 1024 * 1024;
            using (FileStream f = new FileStream(@"C:\one.png", FileMode.OpenOrCreate))
            {
                    var bytes = new byte[BUFFER_SIZE];
                    while (true)
                    {
                        var n = dataStream.Read(bytes, 0, BUFFER_SIZE);
                        if (n == 0)
                        {
                            break;
                        }
                        f.Write(bytes, 0, n);
                    }
                    f.Flush();
                    f.Close();
                }


            // Cleanup the streams and the response.
            response.Close();

Keine Kommentare:

Kommentar veröffentlichen