Windows Azure Marketplace 数据市场

数据市场简介

Elisa Flasko

Windows Azure Marketplace 数据市场最早在 PDC09 期间推出,当时的 Microsoft 项目代码是“Dallas”。这一产品改变了信息的交换方式,因为它可以在一个市场中为用户提供范围广泛的内容,这些内容由权威的商用和公共信息来源发布。这使您能够更方便地查找和购买所需的数据,增强您的应用程序和分析能力。

如果我要开发一款应用程序,用来标识和安排某次旅程中的停留点,那么我将需要众多数据,数据来源也是五花八门。该应用程序可能会先要求用户输入最终目的地,以及要在沿途停留的站点。它可能会检索当前的 GPS 位置或要求用户输入起点,然后使用这些位置为旅程绘制出最佳路线。应用程序绘制路线之后,它会连接到 Facebook,找出我可能想拜访的且在该路线沿途居住的朋友。它会获取标识为停留点的城市的天气预报,以及当地的关注点、加油站和餐馆,这些地方都可能成为旅程中的停留地。

在数据市场推出之前,我必须首先查找各种数据来源,才能满足应用程序对不同类型数据的需求。查找期间,我需要访问很多家公司的网站,以便确定他们是否提供我需要的数据、是否打包销售这些数据并且价格符合我的预期。然后,我必须分别从各家公司直接购买这些数据。例如,我需要直接联系一家公司(如 Infogroup),购买可让我标识沿途关注点、加油站和餐馆的数据;联系另一家公司(如 NavTeq),购买实时交通路况信息;再联系另一家公司(如 Weather Central),购买天气预报信息。而这些公司很有可能通过不同的格式来提供各自的数据,有些公司给我送来 DVD,有些则通过网络服务、Excel 电子表格等等方式。

而今,利用数据市场,这款应用程序的开发将变得极其简单。通过数据市场,我在一个位置(即数据的市场)就能搜索、浏览、试用和购买开发应用程序所需的全部数据。而且它通过统一的接口、标准的格式(OData,请参见 OData.org 获取更多信息)为我提供数据。数据市场提供 OData 格式的数据,因此确保我能够在任何平台上(最低程度而言,我拥有 HTTP 堆栈即可)以及很多支持 OData 的应用程序中访问数据,包括 Microsoft PowerPivot for Excel 2010(该程序本身就支持 OData)等应用程序。

对于各家内容提供商来说,数据市场也成为他们通过多种不同产品销售数据的单一市场(每种产品都可以提供不同的数据子集或视图,或者为提供的数据制定不同的使用条款)。内容提供商可以指定数据产品的详细信息,包括约束购买行为的使用条款、价格模式(在版本 1 中,数据产品采用每月订阅的方式提供)和价格。

数据市场入门

首先,我使用我的 Windows Live ID 在数据市场进行注册并登录该网站。在这里,我可以搜索目前网站中提供的数据集,查看数据集的详细信息(说明、定价、可视化、使用条款等等),以确定哪家发布商能够提供我需要的数据类型,哪种数据产品最符合我的需求。

尽管我要查找的数据集应该符合应用程序的技术要求,但确认我的应用程序使用数据的方式符合发布商的使用条款同样重要。各种数据集、各家发布商的使用条款各不相同。我可以在数据产品的详细信息中查看具体数据集的使用条款。

经过一番浏览和比较,我发现 Infogroup Business Database 服务可能适合我的旅程应用程序。通过查看数据的可视化视图(表格形式的数据示例;其他可视化视图可能是地图或图表中的数据),我了解到这一服务能为我提供沿途的关注点信息,包括宾馆、餐馆和加油站,应该符合我的要求。确定哪个数据集符合我的需求之后,我可以选择采取每月订阅的方式购买该服务,即每个月对服务进行不限次数的查询,而订阅费用可以通过信用卡支付。购买服务之后,我可以在 Marketplace 的“Account”部分管理我的帐户,查看我当前的所有订阅。“Account”部分还可用于创建和管理帐户密钥,该密钥用于访问我的订阅。当从应用程序(例如 PowerPivot)访问数据时,我需要提供帐户密钥。同样,在开发应用程序时,也将使用帐户密钥进行身份验证。

购买数据产品之后,我可以利用数据市场中的 Service Explorer(如图 1 所示),通过创建查询并预览查询结果来了解数据集,从而更有效地掌握每个数据集提供的数据和架构。

图 1 数据市场 Service Explorer

如果我在 Service Explorer 中打开 Infogroup Business Database 服务,就可以创建查询,按照城市、州和邮政编码进行过滤,找出计划好的路线沿途的地点。例如,我指定城市“Seattle”和州“WA”,然后单击“Execute query”,我将得到一份预览,包含了来自该服务的前 100 条结果。在这份预览中,我看到 Seattle 的 Westin Hotel,我的应用程序将把这家酒店放入停留点列表中。默认情况下,当我单击“Preview”时,结果会显示在 Service Explorer 的右侧,采用基本的表格格式,便于查阅。但我也可以在 Service Explorer 中查看将在应用程序中使用的 OData Atom 格式,或者以 Infogroup 最初提供的格式查看原始数据。

如果我不是开发人员,或者我的目标不是使用这些数据构建应用程序,而是将这些数据放入支持 OData 的现有工具中(例如 PowerPivot for Excel 2010),我也可以通过登录、打开当前的订阅列表并单击数据产品,从数据市场直接实现我的目标。网站中将提供选项,让我在我选择的应用程序中打开数据产品。(有关将数据市场与 PowerPivot 结合使用的详细信息,包括分步教程,请查阅数据市场团队的博客 blogs.msdn.com/b/dallas。)

使用 OData

您以前是否构建过应用程序来使用 OData 服务提供的数据?如果您构建过,则您已经做好准备,可以在应用程序中使用来自数据市场的数据,因为大部分数据市场服务都采用 OData。我将简要介绍一下使用 OData 的基本知识。

无论我是向现有的应用程序中添加利用数据市场中数据的新功能,还是从头开始创建新的应用程序,从数据市场服务中获取数据的第一步都是定义类,以便在应用程序中展示数据。为此,我可以编写自己的 Plain Old C# Object (POCO) 类,或者使用 Visual Studio 中的“添加服务引用向导”生成必要的类。

正如前文所述,发布商(数据的所有者)除了指定每个数据集的数据如何显示以外,还会指定使用条款,规定如何在购买后使用数据。这其中包括指定如何创建针对数据集的专门查询;以及如果用户创建专门查询,用户可以查询哪些字段以检索数据,查询将返回哪些字段。在某些情况下,发布商可能指定用户无法创建专门查询,必须使用固定的 Web 方法从服务请求数据。作为开发人员,在开始编写应用程序之前,我需要查看特定产品的 Atom Service 文档,以确定该产品是否提供查询实体集。为此,我可以将浏览器指向产品的根 URI。如果服务文档不包含任何集合,则产品不提供查询实体集,我需要使用固定的 Web 方法访问数据集。例如,让我们看看两个独立数据集的 Atom Service 文档,一个提供了查询实体集 (Data.Gov Crime Data),另一个根本不允许查询 (AP Data)。请注意以下代码示例,AP 产品的服务文档中没有 <collection> 节点(代表提供的实体集)。

这里是 Data.gov Crime 数据产品的 Atom Service 文档,它提供了查询实体集。这个产品提供了一个实体集 CityCrime:

 

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes"  
  xmlns:atom=
  "http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
   <collection href="CityCrime">
     <atom:title>CityCrime</atom:title> 
   </collection>
 </workspace>
</service>

这里是 AP 产品的 Atom Service 文档,它不允许专门查询:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes" 
  xmlns:atom="http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
 </workspace>
</service>

如果我使用的数据集提供查询实体集,我可以使用 Visual Studio 中的“添加服务引用”,就像处理 Windows Communication Foundation (WCF) 服务一样。只需右键单击项目,然后选择“添加服务引用”。在“添加服务引用”对话框中,输入服务接入点的 URI(可以在数据市场的 Service Explorer 页面中找到)作为“地址”,然后单击“确定”。

但如果我使用的数据集不允许专门查询,我将无法使用“添加服务引用”。在这种情况下,我可以编写自己的 POCO 类,表示从我调用的固定 Web 方法返回的实体(或对象)。数据市场使用基本身份验证,传递 Windows Live ID 作为用户名,并将相关的数据市场帐户密钥传递到密码字段。为了演示控制台应用程序示例(参见图 2),我使用了 Visual Studio 中的“添加服务引用”来生成类。Visual Studio 将访问服务,根据数据服务定义生成相关的类,并将它们添加到项目中。生成类之后,我继续开发应用程序,就像所有使用 OData 服务的应用程序一样,使用基本身份验证或使用“审核收集服务”对该服务进行身份验证。图 2 中的示例设置了一个使用基本身份验证的简单控制台应用程序。

图 2 访问数据服务并打印结果的简单控制台应用程序

 

public class Program
  {
       
    static void Main(string[] args)
    {
        GetCityCrime X = new GetCityCrime();
        IList<CityCrime> stats = X.getStats();
        foreach (CityCrime c in stats)
        {
            Console.WriteLine(c.City + " : " + c.AggravatedAssault);
        }
        Console.ReadLine();
    }               
  }
  public class GetCityCrime
  {
    Uri serviceUri;
    datagovCrimesContainer context;
    public GetCityCrime()
    {
      serviceUri = 
        new Uri("https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes");
      context = new datagovCrimesContainer(serviceUri);
      context.Credentials = new NetworkCredential(" ", "
        <my account key as copied from DataMarket>");
    }
    public IList<CityCrime> getStats()
    {
      IEnumerable<CityCrime> query; 
       query = from c in context.CityCrime
             where c.State == "Alaska"
             select c;
       return query.ToList();
    }
  }

 

注意:如果要运行图 2中的代码示例,您需要注册成为数据市场的用户,并订阅 Data.Gov Crime Statistics 产品。另外还要注意,此示例中使用的 URI 指向该服务的预生产发布版本。您可以通过登录数据市场,转至“My Datasets”并访问您对 Data.gov Crime Statistics 产品的订阅来获得正确的 URI。

有关编写使用数据服务的应用程序的详细信息,请参见“Visual Studio 2010 中的实体框架 4.0 和 WCF 数据服务 4.0”(msdn.microsoft.com/magazine/ee336128) 和“在 Web 服务领域公开和使用数据”(msdn.microsoft.com/magazine/cc748663)。

在数据市场中销售数据

很多主流的应用程序和网站会生成、存储和使用大量宝贵的数据。但一般来说,这些数据仅在创建它们的应用程序中得到利用。随着 WCF 数据服务和 OData 的推出,我们为开发人员找到了一个简单的方法,让数据有了更广泛的用途。通过提供一个数据服务平台,让数据不但能更方便地在最初的应用程序中使用,也能更方便地在第三方应用程序中使用。现在,利用数据市场,开发人员不仅有机会在自己构建的应用程序中提供数据,还有机会将存储和维护的数据拿出来销售,获得收益。

数据市场构建在 Windows Azure 和 SQL Azure 上,允许发布商为其托管在 SQL Azure 中的数据创建数据集。如果我的数据已经存储在 SQL Azure 中,则随时可以在数据市场中销售数据。若要了解如何成为数据市场中的发布商,请参见 blogs.msdn.com/b/dallas

Elisa Flasko 是 Microsoft 的 Windows Azure Marketplace 数据市场团队的一名项目经理。您可以通过 blogs.msdn.com/elisaj 与她取得联系。

衷心感谢以下技术专家对本文的审阅:Rene Bouw、Moe KhosravyAdam Wilson