longkai / lab

广西大学 - 雨无声实验室开放平台
4 stars 6 forks source link

半结构化数据集成是新兴Web 2.0 API集合所面临的主要挑战 #9

Open neemo14-15 opened 10 years ago

neemo14-15 commented 10 years ago

在 Visual Studio 中创建一个控制台应用程序,并将对基于示例 Northwind 开放式数据协议 (OData) 服务的引用添加到此新建的应用程序中,然后使用生成的客户端数据服务类和 WCF 数据服务 客户端库从此应用程序访问 OData 源。

在控制台应用程序中使用示例 Northwind OData 服务 在“解决方案资源管理器”中,右击解决方案,单击“添加”,然后单击“新建项目”。

在“项目类型”中,单击“Windows”,然后在“模板”窗格中选择“控制台应用程序”。

neemo14-15 commented 10 years ago

输入 NorthwindConsole 作为项目名称,然后单击“确定”。

右击新建的 NorthwindConsole 项目,单击“添加服务引用”,在“地址”字段中输入示例 Northwind 数据服务的 URI,如下所示:

复制代码 http://services.odata.org/Northwind/Northwind.svc/ 在“命名空间”文本框中,键入 Northwind,然后单击“确定”。

这会将引用添加到所需的 WCF 数据服务 程序集。

neemo14-15 commented 10 years ago

在项目中添加一个新的代码文件,其中包含用于作为对象访问数据服务资源并与其交互的数据类。 这些数据类是在命名空间 NorthwindConsole.Northwind 中创建的。

打开控制台应用程序的程序文件,并添加以下 using 语句(在 Visual Basic 中为 Imports):

Visual Basic 复制代码 Imports System.Data.Services.Client Imports NorthwindConsole.NorthwindC# 复制代码 using System.Data.Services.Client; using Northwind;

neemo14-15 commented 10 years ago

在程序文件中,将以下代码添加到 Main 方法:

Visual Basic 复制代码 ' Define the URI of the public Northwind OData service. Dim northwindUri As Uri = New Uri("http://services.odata.org/Northwind/Northwind.svc/", UriKind.Absolute)

' Define a customer for filtering. Const customer As String = "ALFKI"

' Create a new instance of the typed DataServiceContext. Dim context As NorthwindEntities = _ New NorthwindEntities(northwindUri)

' Create a LINQ query to get the orders, including line items, ' for the selected customer. Dim query = From order In context.Orders.Expand("OrderDetails") Where order.CustomerID = customer _ Select order Try
Console.WriteLine("Writing order ID and line item information...")

' Enumerating returned orders sends the query request to the service.
neemo14-15 commented 10 years ago

For Each o As Order In query

    Console.WriteLine("Order ID: {0}", o.OrderID)

    For Each item As Order_Detail In o.Order_Details

        Console.WriteLine(vbTab & "Product ID: {0} -- Quantity: {1}", _
            item.ProductID, item.Quantity)
    Next                
Next

Catch ex As DataServiceQueryException
Console.WriteLine(ex.Message) End Try

neemo14-15 commented 10 years ago

向 Northwind 数据服务查询属于客户 ALFKI 的订单和相关行项目

在“解决方案资源管理器”中,右击“NorthwindConsole”项目,然后选择“设为启动项目”。

按 F5 键启动该应用程序。

这将生成解决方案并启动客户端应用程序。 将从服务请求数据并将其显示在控制台中。

后续步骤 您已成功创建了用于访问 Northwind OData 示例源的简单客户端应用程序。 接下来,要将 ASP.NET 项目添加到解决方案中。 此项目将承载在本地计算机上运行的 Northwind 示例 OData 服务的可写版本。

neemo14-15 commented 10 years ago

http://technet.microsoft.com/zh-cn/magazine/dd672591(VS.103).aspx

neemo14-15 commented 10 years ago

创建在 IIS 上运行的 ASP.NET Web 应用程序 在 Visual Studio 中的“文件”菜单上,选择“新建”,然后选择“项目”。

在“新建项目”对话框中,选择“Visual Basic”或“Visual C#”作为编程语言。

在“模板”窗格中,选择“ASP.NET Web 应用程序”。 注意:如果使用的是 Visual Studio Web Developer,则必须创建新的网站,而不是新的 Web 应用程序。

neemo14-15 commented 10 years ago

键入 NorthwindService 作为项目的名称。

单击“确定”。

在“项目”菜单上,选择“NorthwindService 属性”。

选择“Web”选项卡,然后选择“使用本地 IIS Web 服务器”。

单击“创建虚拟目录”,然后单击“确定”。

从具有管理员权限的命令提示符中,根据操作系统,执行以下命令之一:

32 位系统:

复制代码 "%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i

neemo14-15 commented 10 years ago

64 位系统:

复制代码 "%windir%\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i 这样将确保在计算机上注册 Windows Communication Foundation (WCF)。

从具有管理员权限的命令提示符中,根据操作系统,执行以下命令之一:

32 位系统:

复制代码 "%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe" -i -enable 64 位系统:

复制代码 "%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe" -i -enable 这将确保在计算机上安装了 WCF 之后,IIS 能够正常运行。 您可能必须重启 IIS。

neemo14-15 commented 10 years ago

当 ASP.NET 应用程序在 IIS7 上运行时,您还必须执行以下操作:

打开 IIS 管理器并导航到“默认网站”下的 PhotoService 应用程序。

在“功能视图”中双击“身份验证”。

在“身份验证”页,选择“匿名身份验证”。

在“操作”窗格,单击“编辑”,以在匿名用户将要连接到的网站下设置安全主体。

在“编辑匿名身份验证凭据”对话框中,选择“应用程序池标识”。

重要提示 使用 Network Service 帐户时,您必须授予匿名用户与该账户关联的所有内部网络访问权限。

neemo14-15 commented 10 years ago

通过在 Visual Studio 中使用 SQL Server Management Studio、sqlcmd.exe 实用工具或 Transact-SQL Editor,针对附加有 Northwind 数据库的 SQL Server 实例执行下面的 Transact-SQL 命令:

SQL 复制代码 CREATE LOGIN [NT AUTHORITY\NETWORK SERVICE] FROM WINDOWS; GO 这将在 SQL Server 实例中为用于运行 IIS 的 Windows 帐户创建一个登录名。 这样,IIS 即可连接到 SQL Server 实例。

附加 Northwind 数据库后,执行下面的 Transact-SQL 命令:

SQL 复制代码 USE Northwind GO CREATE USER [NT AUTHORITY\NETWORK SERVICE] FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] WITH DEFAULT_SCHEMA=[dbo]; GO ALTER LOGIN [NT AUTHORITY\NETWORK SERVICE] WITH DEFAULT_DATABASE=[Northwind]; GO EXEC sp_addrolemember 'db_datareader', 'NT AUTHORITY\NETWORK SERVICE' GO EXEC sp_addrolemember 'db_datawriter', 'NT AUTHORITY\NETWORK SERVICE' GO 这将为新登录名授予相应权限,使得 IIS 能够在 Northwind 数据库中读出和写入数据。

neemo14-15 commented 10 years ago

定义数据模型 在“解决方案资源管理器”中,右击 ASP.NET 项目的名称,然后单击“添加新项”。

在“添加新项”对话框中,选择“ADO.NET 实体数据模型”。

键入 Northwind.edmx 作为数据模型的名称。

在实体数据模型向导中,选择“从数据库生成”,然后单击“下一步”。

通过执行下列步骤之一,将数据模型连接到数据库,然后单击“下一步”:

如果尚未配置数据库连接,请单击“新建连接”并创建一个新连接。 有关更多信息,请参见如何:创建到 SQL Server 数据库的连接(可能为英文网页)。 此 SQL Server 实例必须附加了 Northwind 示例数据库。

如果已配置一个连接到 Northwind 数据库的数据库连接,请从连接列表中选择该连接。

neemo14-15 commented 10 years ago

在向导的最后一页上,选中数据库中所有表对应的复选框,并清除视图和存储过程对应的复选框。

单击“完成”关闭向导。

注意 此生成的数据模型将在实体类型上公开外键属性。 使用 Visual Studio 2008 创建的数据模型不包括这些外键属性。 因此,在尝试访问使用 Visual Studio 2008 创建的 Northwind 数据服务之前,必须更新已创建的任何客户端应用程序的客户端数据服务类才能访问这一版本的 Northwind 数据服务。

创建数据服务 在“解决方案资源管理器”中,右击 ASP.NET 项目的名称,然后单击“添加新项”。

在“添加新项”对话框中,选择“WCF 数据服务”。

键入 Northwind 作为服务的名称。

neemo14-15 commented 10 years ago

为新服务创建 XML 标记和代码文件。 默认情况下,代码编辑器窗口将打开。 在“解决方案资源管理器”中,该服务的名称为 Northwind 并带有扩展名 .svc.cs 或 .svc.vb。

在数据服务的代码中,用数据模型的实体容器的类型(在此示例中为 NorthwindEntities )替换定义数据服务的类定义中的注释 /* TODO: put your data source class name here */ 。 该类定义应如下所示:

Visual Basic 复制代码 Public Class Northwind Inherits DataService(Of NorthwindEntities)C# 复制代码 public class Northwind : DataService 请参阅 概念 将数据作为 OData 服务公开 (WCF Data Services)

neemo14-15 commented 10 years ago

http://technet.microsoft.com/zh-cn/magazine/dd728280(VS.103).aspx

neemo14-15 commented 10 years ago

http://technet.microsoft.com/zh-cn/magazine/cc668794(VS.103).aspx

neemo14-15 commented 10 years ago

http://www.doc88.com/p-613723931581.html

neemo14-15 commented 10 years ago

在 Microsoft,我们的许多产品通过开放数据协议公开和使用数据服务。例如,SharePoint 公开其所有数据列表为 OData 服务。同样,使用Reporting Services所创建的报告可以通过 OData 公开。 PowerPivot 是Excel2010中的一个插件,它允许你使用数据服务,并对它们执行复杂的数据分析的。因此让以数据为中心的LightSwitch也通过 OData使用数据服务,是非常有意义的。今天很多企业使用 OData 作为系统,伙伴之间交换数据的方式,同时也提供了一种访问其数据存储区的简单方式。

neemo14-15 commented 10 years ago

推荐一篇真正好的文章,Chris Sells的 -开放数据协议的示例.

在这篇文章中,我要向你展示如何在 LightSwitch 应用程序中使用 OData。对于本示例,我们将使用Azure DataMarket 中的一些数据。在我的下一篇文章中,我将展示如何使用LightSwitch在像 Excel的其他客户端中公开了的 OData 服务。

Azure DataMarket

Azure DataMarket 是生产者承载其数据集,然后人们订阅它们来提高其客户端应用程序的地方。你可以订阅各种各样的数据集,有的是免费,有的是付费的。有天气、 交通、 美国国家航空航天局、 联合国和各种你可以使用的其他类型数据。(测试版 注:目前并不是所有的数据集都与 LightSwitch 兼容,但我们正在努力让更多的数据集与最终版本相兼容。)

neemo14-15 commented 10 years ago

导航到http://datamarket.azure.com/来注册帐户。一旦你注册时,你将有一个客户 ID 和一个帐户密码。现在,你可以浏览很多类别为你提供的大量数据集。让我们从 Data.gov 订阅一个免费的数据集。在页面右上角的搜索框中,搜索“Crime”,你将在结果中看到 Data.gov数据集。

neemo14-15 commented 10 years ago

选择 Data.Gov数据集,然后单击右侧的注册按钮来激活订阅。然后单击"浏览此数据集"链接来浏览数据。页面的顶部,你将看到服务源的 URL。这是服务所处的位置,我们将在LightSwitch 应用程序使用它。在本例中,它是https://api.datamarket.azure.com/data.gov/Crimes/

使用Crime数据来增强 Contoso 建设

我将变更一下我前段时间所创建的示例,这是一个应用程序的示例,它可用于构建业务。此应用程序的功能之一是它显示了建设项目位置的地图屏幕。从项目屏幕中,用户可以单击显示地图按钮来打开地图屏幕,它使用了一个Bing地图控件扩展(包含在示例中)来显示位置。

neemo14-15 commented 10 years ago

我们想做的是向用户显示犯罪数据,那样他们可以看到在该市工作通常是否安全。这是我们从Azure DataMarket中所订阅的数据集中可以获取的免费信息。

连接LightSwitch到 OData 服务 你可向 LightSwitch 应用程序中添加一个 OData 服务,就像你向其添加任何其他外部数据源一样。右键单击解决方案资源管理器中的数据源节点,然后选择"添加数据源"以打开连接数据源向导。现在,你将看到 OData Service 是一种可用的选项。

neemo14-15 commented 10 years ago

使用计算属性来计算暴力犯罪的百分比。单击数据设计器顶部的"计算属性"按钮,称之为 ViolentCrimeRatio,并将其设为字符串。在属性窗口上单击"编辑方法",并提供以下结果。

1: Private Sub ViolentCrimeRatio_Compute(ByRef result As String) 2: ' Set result to the desired field value 3: If Me.ViolentCrime > 0 Then 4: result = String.Format("1 in {0}", Me.Population \ Me.ViolentCrime) 5: End If 6: End Sub我们想要为实体设置一个摘要属性,来使其在屏幕上很好地显示。添加另一个称为Summary的计算字符串属性,并编写下面的代码:

1: Private Sub Summary_Compute(ByRef result As String) 2: ' Set result to the desired field value 3: result = Me.City & ", " & Me.State & ": " & Me.Year 4: End Sub然后选择 CityCrime 实体,并在属性窗口的底部将Summary属性设置为Summary字段。此时我们也可以通过添加一个快速搜索屏幕,选择 CrimeData.CityCrimes 屏幕数据来测试数据集。

neemo14-15 commented 10 years ago

针对 OData 服务编写查询 现在,我们已经连接到OData 服务,我们想编写一个查询来为特定的城市和州提取数据。针对 OData服务编写查询与在 LightSwitch 中的任何其他数据源是相同的体验。

偌要添加一个新的 LightSwitch 查询,右击解决方案资源管理器中的CityCrimes 实体,并选择"添加查询"以打开查询设计器。将此查询命名为 CrimesByCityState。然后添加两个筛选器的条件 ;1-州等于称为State的新参数, 2 —市等于称为City的新参数。我们亦会按年以降序方式对结果进行排序。

neemo14-15 commented 10 years ago

为了快速测试此查询,添加另一个搜索屏幕,这次选择 CrimesByCityState 查询。当你运行此屏幕时,LightSwitch 会询问国家和城市的参数。因为它们两者都是必需的,一旦你输入了它们两个, LightSwitch 将自动执行查询。你可以选择在查询设计器的属性窗口中将参数设为可选的。

neemo14-15 commented 10 years ago

使用Crime数据来增强地图屏幕 我们不想在地图屏幕中的单独屏幕上显示此信息。打开 MapScreen ,单击屏幕设计器顶部的"添加数据项目",然后选择 CrimesByCityState 查询。下一步,再次点击添加数据项目,这次选择本地字符串类型的属性来添加两个本地属性,一个用于城市,另一个用于国家。

neemo14-15 commented 10 years ago

将这些本地属性绑定到查询参数。在屏幕设计器中,选择查询参数州,然后在属性窗口中设置参数绑定为"州"。通过选择城市查询参数,设置参数绑定到"市"。从查询参数到本地属性之间有一个灰色箭头时,你就做对了。最后,选择这两个本地属性,并在属性窗口中为它们两个勾选"是参数"。这将使我们从项目屏幕传递城市和国家。

neemo14-15 commented 10 years ago

从左边的内容目录上拖动 CrimesByCityState到你想要的位置。我会将它添加到屏幕的顶部,我现在只想要显示两个计算属性,摘要和 ViolentCrimeRatio。此外,由于我们现在正在筛选数据,只会返回几行结果,所以我可以关闭分页和排序来在屏幕上节约一些空间。选择 CrimesByCityState 查询,并在属性窗口中取消选择"支持分页"和"支持搜索"。因为此数据是只读的,我将从数据网格行命令栏删除所有的命令。

neemo14-15 commented 10 years ago

将屏幕的可视属性调整为我们想要的之后,最后我们要做的是将城市和州以及地址传递到地图屏幕中。从 ProjectDetail 屏幕中选择显示地图按钮,右键单击并选择"编辑执行代码",然后调整代码,如下所示:

1: Private Sub ShowMap_Execute() 2: 'Show a map of the customer address as well as crime data 3: Me.Application.ShowMapScreen(Me.Project.Customer.FullAddress, 4: Me.Project.Customer.City, 5: Me.Project.Customer.State) 6: End Sub 7: 现在当我们运行应用程序时,打开项目详细信息屏幕,单击显示地图按钮,它将显示Azure DataMarket 上OData 服务的犯罪数据。

neemo14-15 commented 10 years ago

这篇文章为你展示了如何在 LightSwitch 应用程序内部使用来自 OData 服务的数据。请记住,并不是所有的服务都提供了对数据 (例如犯罪数据是只读的) 的所有操作,那样使用随机 的OData 源可能与LightSwitch 不兼容,如果他们不支持查询、 排序或筛选。我们正在研究好的 LightSwitch 体验必须要有什么操作,我们正在与伙伴合作来准备它们,随着我们从测试版 移到最后的发布。

我已更新了在 Visual Studio 11测试版中构建Contoso LightSwitch应用程序,所以看一看它吧。那里我利用了很多新功能,不仅仅只是犯罪数据 OData 服务。

在下一篇文章中,你将看到如何 在LightSwitch 中从你定义的数据源中创建OData 服务,如何可以编写外部的客户端来获取数据,包括商务规则和用户访问控制。在 Visual Studio 11 测试版中,LightSwitch 是为桌面和云创建商务应用程序和数据服务的最简单的方法。