65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在云中大规模运行基于 Grid 的 Web 应用程序和数据库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (7投票s)

2013年9月16日

CPOL

15分钟阅读

viewsIcon

21111

本文将涵盖从政府网站下载数据、将其加载到本地 SQL Server 数据库、将此本地 SQL Server 数据库迁移到 Windows Azure 中的 SQL 数据库的整个过程。

云托管、基于网格的应用程序

在云中运行基于网格的 Web 应用程序是一个日益增长的趋势。本文旨在介绍一种根据需要托管和扩展基于网格的应用程序的能力,这是一种非常常见的用例场景。

DevExpress 提供了当今最强大的网格之一。我使用它多年,适用于 Web 和桌面应用程序。它们现在也支持许多其他平台。


afanqkbi

本文将涵盖从政府网站下载数据、将其加载到本地 SQL Server 数据库、将此本地 SQL Server 数据库迁移到 Windows Azure 中的 SQL 数据库的整个过程。接下来,我们将添加强大的 DevExpress ASP.NET Data Grid,它将从云中的 SQL 数据库读取数据。之后,我们将继续使用 Express Grid,它将从云中的 SQL 数据库读取数据。作为最后的练习,我们将把整个 Web 应用程序迁移到云中,以便提供所需的扩展。

我的学习心得

我已经帮助了几位开发人员克服了困难,今天我想和您分享我的学习心得。

DevExpress 和 Windows Azure 可以用来创建支持几乎无限用户数量的解决方案。

购买还是自建?

作为开发人员,能够为最终用户提供功能丰富的基于网格的用户界面至关重要。理想情况下,这个网格应该像 Excel 一样工作,因为电子表格是地球上最容易理解的用户界面之一。只需少量培训即可使用,并且效率很高。

并非易事

在浏览器中提供基于网格的功能非常具有挑战性。编写自己的网格没有任何意义。它会变得非常复杂。首先,支持多浏览器本身就是一项技术挑战。即使是单个浏览器,也有许多不同的版本需要支持。其次,支持基本的 CRUD 操作也并非易事,因为网格现在必须支持插入、更新和删除数据。第三,在性能和快速滚动方面也存在挑战。想象一下一个拥有数十万条记录的数据存储,需要高效地滚动。您打算如何低效地实现分页?第四,网格能够支持移动设备上的触摸操作也很重要。
 

 

巨大的挑战
您打算如何支持列的移动?
您打算如何支持排序和分组?
您的网格能否根据最终用户对网格的操作动态生成 SQL 查询?
缓存呢?如何最大程度地减少服务器和客户端之间的往返?
您是否打算使用精灵图(将所有图像放在单个 PNG 文件中,然后代码从中提取适当的图像,以最小化网络通信)?
如何处理自定义 HTTP 处理程序来处理回调错误?
您打算压缩 JavaScript 吗?
您打算支持主题,例如 Office 2013 主题吗?
您是否打算同时支持 Web Forms 和 MVC?
WPF 和 Windows 8 呢?更不用说 HTML 5 和 JavaScript 了?

简单的演练

让我们来演练一个简单的端到端示例。

从数据开始

我下载了旧金山的电影拍摄地点数据作为示例。

 

hyperlink2 SF Gov Data - SF 电影拍摄地点


选择 CSV 格式。

image001

数据是逗号分隔格式。

image003

在将其导入 SQL Server 表之前,我们需要添加一个代表聚集索引主键的列。否则,批量插入命令将失败。我们将在 A 列的左侧插入一列。只需在 Microsoft Excel 中右键单击 A 列即可。

image005

在 A1 单元格中,我简单地输入了一些文本,表明这将是假的 ID。我们可以将所有行留空。

image007

我们将覆盖原始文件。请注意文件夹,因为在批量插入命令中会用到它。

image009

 

DevExpress 工具

我的假设是您已下载并安装了最新的 DevExpress 产品。

 

 

 

hyperlink2 DevExpress 下载

 

 

访问数据库

既然我们将在云中运行它,那么将这些数据导入 SQL 数据库是有意义的,SQL 数据库是 Microsoft 在众多全球数据中心之一中运行关系数据库的解决方案。

从本地数据库开始

入门最简单的方法之一是使用本地、本地 SQL Server 版本创建数据库和相应的表。然后,我们可以使用 SQL Server Management Studio 中的一些工具将数据库迁移到云中。所以,请启动 SQL Server Management Studio。

image011

开始创建新数据库。右键单击“数据库”。

image013

我们将此数据库命名为 SFMovies。

image015

打开一个查询窗口,以便我们可以发出 CREATE TABLE 语句。

image017

以下是创建名为 Movies 的表的查询。
 

Create table [dbo].[Movies]
(
   MovieRowId [int] IDENTITY(1,1) NOT NULL,
   Title [char] (255) NULL,
   Release_Year [char] (255) NULL,
   Locations [char] (255) NULL,
   Fun_Facts [char] (255) NULL,
   Production_Company [char] (255) NULL,
   Distributor [char] (255) NULL,
   Director [char] (255) NULL,
   Writer [char] (255) NULL,
   Actor_1 [char] (255) NULL,
   Actor_2 [char] (255) NULL,
   Actor_3 [char] (255) NULL
    CONSTRAINT [PK_Movies] PRIMARY KEY CLUSTERED
(
    MovieRowId ASC
)   WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
          ALLOW_PAGE_LOCKS = ON)
)


关于此批量插入命令有几点需要注意。首先,我们可以在 SQL Server Management Studio 的查询中发出此命令。另请注意,first row 属性已设置为 true,因为我们要跳过列标题。由于这是一个逗号分隔文件,您需要在此处指定,此外还需要指定换行符,换行符用作每行的终止符。

BULK INSERT SFMovies.dbo.Movies  FROM 'C:\Users\Bruno\Downloads\Film_Locations_in_San_Francisco.csv ' 
WITH (FIRSTROW = 2,FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n');

image021

非关系型

需要注意的是,数据结构不良。实际上,数据包含一对多关系,但存储在 SQL Server 中作为一个大表。将数据规范化为多个表留给读者作为练习。由于数据未正确规范化,这将阻碍底层数据网格的最佳性能。

image023

在云中预配数据库

在将本地数据库导出到云之前,我们需要建立一个服务器。一个服务器可以服务多个数据库。您可以根据需要预配更多服务器。

Windows Azure 门户允许您预配服务器。请注意,在下图中,我们可以列出所有数据库。但我们要列出服务,因为我们要将数据库迁移到服务器。您无需通过下方门户预配单独的数据库。相反,工具将使用本地数据库为您预配。

 

 

您可以在下方看到服务器的名称。在将数据库迁移到云时,您将需要服务器名称。您还需要一个登录 ID 和在首次预配服务器时输入的密码。
 

image027

您可以预配新服务器,如门户底部所示。只需单击下面的“添加”按钮。

image029

让我们将注意力转回 SQL Server Management Studio。在对象资源管理器中,我们可以右键单击要迁移的数据库,然后选择“任务”,然后选择“部署数据库到 SQL Azure”。它不再是 SQL Azure,已被重新命名为“SQL 数据库”,因此下面的菜单选择是错误的。但它能完成我们需要的任务。
 

image031

 

现在,我们将通过 SQL Server Management Studio 中的一个向导来完成部署。您将被要求连接到我们 earlier 步骤中在门户中记录的服务器。

正如您在下图中看到的,您确实需要登录信息才能连接到您的服务器。稍后,当 Web 应用程序需要创建数据库连接时,也将需要相同的信息。
 

image033

部署完成后,您应该会看到下面的确认屏幕。

image035

关于数据库服务器机器,您需要考虑的一件事是,您需要配置“允许的 IP 地址”。您可能不想像下面那样操作,因为它允许 Microsoft 数据中心的所有连接。

在此示例中,最好的做法是允许任何 IP 地址直接连接到 SQL Server。这是因为我们将把 Web 应用程序部署到云中,并且只允许基于云的 Web 应用程序访问数据库。这就是下面图中“允许的服务”部分的目的。但是,如果您希望使用 SQL Server Management Studio 连接到云中的数据库,则需要指定运行 SQL Server Management Studio 的计算机的 IP 地址。

选择“是”将允许该 Web 应用程序访问服务器和底层数据库。


image037


您可以直接从 Windows Azure 门户获取到云托管数据库的所需连接信息。在“快速启动”仪表板部分,您会看到一个名为“显示连接字符串”的选项。

如果您从门户的仪表板部分单击 SFMovies 数据库,您将能够获得所需的连接字符串。

image039


image041

创建 Web 应用程序

现在我们可以创建 Web 应用程序了。假设您已经安装了 DevExpress 工具,它会嵌入到 Visual Studio 的“新建项目”对话框中。因此,此时剩下的任务是创建一个利用 DevExpress 网格的 Web 应用程序,该网格将连接到我们刚刚在 Microsoft 数据中心创建的数据库。本文的最后一步是将此 Web 应用程序迁移到云中。届时,数据库和 Web 应用程序都将托管在 Microsoft 数据中心。此外,如果需要,还可以利用更多的扩展。

在 Visual Studio 中,创建一个 DevExpress 模板库。
 

image043
 

我们选择“Web Forms”作为模板。如果您愿意,也可以选择 MVC。在下面的对话框的右下角,单击“创建项目”。

image045

项目将被创建,并包含所有必要的引用。接下来,我们需要添加一个空白窗体,然后使用工具箱将一个网格控件拖到空白窗体上。从那里,我们将连接到数据库并开始设置网格的一些属性以满足我们的功能需求。
 


image047
 

为我们刚添加的新 Web 窗体命名。

image049

在解决方案资源管理器中,您可以看到新平台。目前它是空的,我们现在将使用工具箱向其添加一个 DevExpress 网格。

image051

当您第一次执行此操作并选择工具箱时,您可能需要等待片刻,因为工具箱正在更新,您将看到下面的对话框。

image053

您可以从中选择一套非常丰富的控件。我们感兴趣的是 GridView 控件。将 GridView 控件拖到您的窗体上。

image055

现在 GridView 控件已在窗体上,我们将需要将其连接到云中的数据库,并设置我们希望包含的其他功能。

“选择数据源”选项将允许我们连接到数据库。在组合框中,选择“新建”。

image057

数据源类型是数据库。我们将为其指定一个 ID,DataSourceMovies。

image059

由于这是新连接,请单击“新建连接”按钮。

image061

您需要连接到 Microsoft 数据中心中运行的服务器的连接信息。您需要四样东西:
 

服务器名称,前面是 TCP
用户名
密码
该服务器上的数据库


image063

单击“下一步”以“保存连接”。

image065

为了简单起见,我们将设置一个具有最少要求的网格。有很多选项和功能,在本例中我们不会利用它们。我们将指定我们感兴趣的列以及数据本身的排序顺序。我们将按发行年份和电影标题对数据进行排序。

您可以看到向导将为您构建 SQL 语句。

image067
 

单击“下一步”,然后单击“完成”。

现在您可以运行应用程序了。但是这个 Web 应用程序在开发计算机上本地运行。最终,我们想将其迁移到 Microsoft 数据中心。首先,让我们验证它是否在本地运行。

指定启动页。


image069


编译应用程序。

image071
 

开始调试。

image073
 

验证其是否正常工作。请注意,它运行在 localhost 的 37553 端口上。


image075
 

需要注意的是,我们在此示例中并未利用大量功能。本文已经很长了,如需了解其他功能,请访问 DevExpress 网站。

下面的对话框提供了一些关于所有这些功能的指示。

image077
 

将应用程序迁移到云

现在我们可以将这个本地部署的网格应用程序迁移到 Windows Azure。世界各地有许多数据中心可供您部署此 Web 应用程序。将其部署到与数据库相同的数据中心非常有意义,这样可以最大程度地减少延迟并最大化性能。

要实现这一点,您需要为现有的 GridView 项目添加一个 Windows Azure 云服务项目。这可以通过简单的右键单击来实现。


image079
 

现在可以看到解决方案中有两个项目。第一个项目是我们认为包含 GridView 控件的项目。您可以将第二个项目视为配置和部署项目。

image081
 

虽然我们不会更改实例计数,但这是您可以扩展应用程序的方式。如果您在实例计数字段中输入 10,则意味着 10 个 Web 应用程序副本将在 10 台独立的 IIS 运行的虚拟机上运行(所有 10 个都将进行负载均衡)。此外,它们将位于独立的故障域和更新域之后。这意味着云服务可以在不使其中任何一个发生停机的情况下更新它们。这也意味着,如果其中 10 个出现故障,其他 9 个将在独立的机架上,通过单独的路由器,以最大程度地减少停机风险。


image083
 

在实际发布到 Microsoft 数据中心之前,您可以运行应用程序的 Windows Azure 模拟器。通过编译和运行此应用程序,您可以看到地址包含 127.0.0.1,端口为 81。模拟器的优点在于,您可以在部署到云并进行测试之前在本地测试您的云应用程序。


image085
 

在发布之前,最后一步是为每个引用设置“复制本地”属性为 true。这意味着实际的 DevExpress 程序集将与我们项目的其余部分一起被复制,一旦我们部署。

image087

现在我们可以部署应用程序了。右键单击部署项目并选择“发布”。设置发布功能非常容易。

您可以在此处阅读更多相关信息。
 

hyperlink2

如何将 Web 应用发布到云

 


image089

此时将出现一个发布向导,让您逐步完成发布过程。

image091

您可以部署或发布到现有虚拟机,也可以创建新的虚拟机。这里还有其他选项。例如,您可以选择启用远程桌面,这使您能够实际远程连接到虚拟机并查看确切的配置和设置。

image093

Windows Azure 云产品不是平台即服务产品。这意味着您不受限于单个虚拟机名称。相反,您是为一个完整的服务,并且单个虚拟机​​的概念已被服务抽象掉了。

我在这里写过关于平台即服务的内容。

 

 

 

hyperlink2 为什么平台即服务将统治世界

 


image095

选择“发布”。

image097


image099

所以,这就是最终结果。数据库和 Web 应用程序本身都运行在 Microsoft 的一个大型数据中心中。我们的 SQL Server 数据被三倍复制,并且我们还能够扩展 Web 应用程序以满足几乎任何需求。Windows Azure 平台还包含许多我们可以在本文中利用的其他功能,而这些功能并未涵盖在内。DevExpress 工具还可以进行大量的自定义。

image101

再做一些工作,您就可以让您的应用程序看起来像这样。

image103

 

 

 

结论

所以,本文涵盖了一些强大的概念。首先,我们讨论了利用强大的 GridView 技术,并确定购买比自建更有意义。我们讨论了从本地数据库和 Web 应用程序开始,然后将两者迁移到云中。我们讨论了扩展代码数据以及 Web 应用程序的能力。最终,这一切都归结为一个问题:如何在最大化性能和正常运行时间的同时,提供功能丰富的 Web 应用程序以满足任何级别的需求?

1xfsiuab

 

 
© . All rights reserved.