当您编写一个 Web 应用程序在 F# 中,它是用于取决于 MVC 应用程序的部分使用的是 c#,因为框架特意支持 C#。 通过使用视图的 razor 引擎,您可以编写控件视图布局的 C# 代码。 razor 引擎与 Web 窗体引擎是可在新的 ASP.NET 两个呈现引擎和此引擎提供更大的灵活性。 此示例演示两种方法集成 F# C# Web 应用程序。 windows azure 云服务包含一个或多个角色。 此示例由 web 角色,提供网页组成 Web 应用程序和辅助角色,没有用户界面,但执行后台进程。 此示例使用 F# 辅助效果和一个 F# 库 C# web 角色的。
WordGrid 示例是用户可以调用在 Internet 上一个基于关闭的纵横填字谜游戏。 应用程序是一个使用 web 角色云服务 (编写在 c# 中) 显示游戏键盘为网页和 F# 库处理游戏逻辑。 F# 辅助角色提供字典查找服务。 使用 windows azure 队列,辅助角色和 web 角色通信,提供轻量消息传递机制在云服务中可以使用通信来改变之间。 web 角色使用 SimpleMembership 数据库管理用户,因此,同一数据库还包含游戏数据。 用户可以启动与其他用户的游戏同时执行多个游戏。 视图页提供游戏键盘布局和 UI 元素,并且,JavaScript 函数定义逻辑来改变期间,包括拖动的 HTML,计分和验证,并且平铺管理。
还将了解如何迁移本地 SQL Server 数据库到 windows azure 承载的数据库。 此迁移通常是获取运行在 windows 云服务的最复杂的部分 azure。
本演练依赖于以下系统必备组件:
-
Visual Studio 2012
-
windows azure tools,您可以下载 windows azure tools 下载页
-
使用 windows azure 的帐户
-
SQL Server SQL Server 的管理工作室 2012 中
-
WordGrid 示例应用程序,您可以下载 WordGrid CodePlex 示例
WordGrid 示例是编写游戏的一种常见类型的实现。 当游戏调用时,它与下图类似:
![WordGrid 示例 WordGrid 示例](http://i.msdn.microsoft.com/dynimg/IC639372.png)
下图显示 WordGrid 示例结构。
![WordGrid 应用程序体系结构 WordGrid 应用程序体系结构](http://i.msdn.microsoft.com/dynimg/IC639373.png)
MVC 应用程序包含管理员、视图和设计,但是,它还包含处理在客户端的浏览器的游戏效果和 CSS 样式表以确定布局的颜色、字体和详细信息的 JavaScript 代码。 应用程序还包括 MVC 基础结构,例如 App_Start 文件夹的内容。 这些文件从 MVC web 角色的 Internet 应用程序模板保持不变。 除非明确提到在本节中,文件从模板保持不变。
是最接近用户界面和 MVC 特定技术该 app 的部分用 c# 编写。 游戏逻辑层,WordGridGame,在 F# 编写和引用,从该 app 的 MVC 部分的库。 另一个 F# 库,FsAzureHelper,对于 windows azure API 提供 F# 友好的包装。
Controllers
控制器处理传入的 HTTP 请求,确定用户提交窗体的页显示和响应的 URL 参数和值。 在 WordGrid app,管理员分为三个文件:AccountController.cs、BoardController.cs 和 HomeController.cs。 管理员在 c# 编写。 将创建一个 web 角色然后选择 Internet 应用程序 模板时,AccountController.cs 和 HomeController.cs 包括在内。 对 WordGrid app 稍自定义。 BoardController.cs 包含发生的所有 WordGrid 特定逻辑和处理请求,而用户设置和玩游戏。
视图
视图控件网页的格式。 视图包含 HTML 和创建更多 HTML 根据应用程序的逻辑嵌入 C# 代码。 是在 WordGrid 游戏的内存的键盘用于生成 HTML 表。 可以找到在 Play.cshtml 视图的此代码。 在 shared 文件夹中,随处可见对多页共有的格式。 这些包含由更为具体的页填充的一部分。 这样,您可以确保您的页的一个常见标头和导航。
设计
模型表示是隐藏页的对象。 在 WordGrid 游戏,模型层在 C# 和窗体在 UI 和游戏逻辑之间的层在 F# WordGrid 项目。
客户端脚本
除了验证和计分效果外,客户端处理客户端行为的 JavaScript,例如平铺管理和位置。
游戏逻辑
WordGrid 的游戏逻辑。WordGrid 项目,在 WordGrid.fs 代码文件。 此代码使用类型提供程序与数据库进行交互。
资源和依赖项
当您要下载 WordGrid 示例时,它会在项目的 App_Data 文件夹中的 .mdf 文件使用一个 LocalDB 数据库中 web 角色。 此数据库的连接字符串出现在两 web.config 文件中:一个位于 WordGrid 项目和其他在 web 角色的项目。
默认情况下,因为该示例不包括字典,WordGrid 示例的单词验证代码被禁用。 若要调用 WordGrid 游戏和验证单词是否有效,在单独的行必须挂钩字典,可以是文本文件,并且每个活动的字符串列表。 您可以轻松找到各种此字典联机,与更改的授权限制。 如果已安装 Microsoft Office 安装,可在 Word 还可以配置 WordGrid 使用该拼写检查程序作为字典。 若要设置任何一个字典选项,请参见代码注释的命令文件中 WorkerRole.fs。
生成,测试,并部署在计算模拟器的示例
-
在 Visual Studio 中,打开 windows azure 解决方案,然后选择 F5 键。
或者,可以,在菜单栏上,选择 调试,启动调试。
解决方案在计算模拟器开始,因此,WordGrid 登录页在您的浏览器。
-
选择 注册 链接,然后输入用户名和密码。
若要测试该示例,您需要创建第二个用户的游戏。
-
选择 注销 指向记录第一个用户,然后重复步骤 2 以创建第二个玩家的用户名。
-
选择 新游戏 链接,从可能的匹配列表然后选择另一个玩家。
游戏在屏幕上启动并显示。
-
在委员会平铺进行有效的单词,然后选择 提交。 按钮。
如果您播放两个玩家,选择浏览器中 返回 按钮返回到登录页,然后注销并再次登录,而另一个用户继续效果。
-
若要监控您在计算模拟器的本地部署状态,请选择在任务栏的 windows azure 模拟器图标,然后选择 显示计算模拟器 UI。
-
在 服务部署下,展开 WordGrid 的节点,然后选择 MvcWebRole1 实例。
记录在每个实例的实时显示。 有关可在本地计算机的计算模拟器和其他工具的更多信息,请参见 Windows Azure SDK Tools。
设置存储帐户
-
登录到 windows azure 管理门户网站,然后选择 新建 按钮。
-
在出现的菜单中,选择 数据服务,存储,快速创建,然后输入一个名称存储帐户。
存储帐户的名称必须只包含小写字母数字字符,不用空格或特殊字符。 该帐户的 URL 是 mystorageaccountname.core.windows.net。
-
在区域或关联组列表中,选择最符合您的虚拟机或模板,然后选择以 启用 Geo 副本 复选框。
没有外加开销,此选项在多于一个存储您的数据在同一区域中的冗余物理位置。
-
选择 创建存储帐户 链接完成您的设置和创建存储帐户。
在 Visual Studio,那么,当您将项目部署到 azure 时,该窗口现在可以设置 WordGrid 项目使用新创建的存储帐户。
-
在 windows azure 项目中,打开 MvcWebRole1 的快捷菜单,然后选择 属性。
角色设计器显示。
-
选择 设置 页,然后,在 服务配置 列表中,选择 云。
如果选择云服务配置,可以对存储帐户使用连接字符串,当您部署到 windows azure 时,但仍使用计算模拟器,当您在运行和调试在本地计算机上。
-
在数据网格中的 StorageConnectionString 项旁边的下 … 按钮。
创建存储连接字符串 出现对话框。
-
在 连接方式下,选择 我的订阅 选项按钮。
-
如果您以前从未下载一个 .publishsettings 文件您的 windows azure 订阅上,选择 下载发布设置 链接,然后登录到管理门户网站。
.publishsettings 文件下载。 此文件包含您的订阅和存储帐户凭据,应出现在对话框。
-
在存储帐户列表中,选择要为 WordGrid 示例使用的虚拟机或模板,然后选择 确定 按钮。
数据库迁移到 windows azure
-
如果尚未创建一个数据库,请在 windows azure 管理门户网站选择 新建 按钮,然后,显示的菜单上,选择 数据库服务,SQL 数据库,快速创建。
数据库中创建,以便您可以连接到数据库服务器。 无法使用数据库,因为您将创建另一个,当您导入 WordGrid 数据。 如果您已具有一个数据库服务器,则可以跳过此步骤
-
创建用户名和密码如会进行提示。
在数据库连接字符串将使用此用户名和密码。
-
选择 允许在防火墙规则的连接 链接。
允许的 IP 地址 页。 在此页上,可以设置防火墙允许与数据库服务器的产生的连接。
-
执行以下步骤之一:
-
如果您的开发计算机使用动态 IP 地址,请查看您的计算机使用地址范围,然后输入这些值在 起始 IP 地址 和 结束 IP 地址 文本框。
如果您不知道您的 IP 地址范围,请与网络管理员联系。
-
如果您的开发计算机具有静态 IP 地址,输入在 起始 IP 地址 文本框和 结束 IP 地址 文本框。
-
-
在 允许的服务下,请确保 windows azure 服务 组件设置 是。
-
打开 SQL Server 管理工作室
必须调用该本地数据库。windows azure。 该本地数据库包括作为 .mdf 文件在该 MvcWebRole1 项目的 App_Data 子文件夹。
连接到 LocalDB 服务器为 Visual Studio 2012 中,(localdb)\v11.0。
-
打开本地 WordGrid 数据库。
其名称以“aspnet-MvcWebRole1 启动”。如果多个数据库具有类似的名称,请确保该数据库以与 WordGrid MvcWebRole1 项目的 .mdf 文件。
-
打开本地 WordGrid 数据库节点的快捷菜单上,选择 任务,选择 部署数据库 to SQL azure,然后选择 下一个。
-
在 部署设置 页上,选择 连接 按钮。
-
在 服务器名称 框中,输入您在第 1. 来创建数据库服务器的地址。
例如,输入 servername.database.windows.net。
-
输入您在第 1. 中创建的用户名和密码。
说明
如果创建了其他数据库用户,不要使用这些凭据此处,除非它们具有权限创建在服务器上的数据库。
-
在 新数据库名称 文本框中,输入 wordgrid 作为新数据库的名称,然后选择 下一个 按钮。
摘要建议的数据库部署的页。
-
验证所有信息是否正确,然后选择 完成 按钮。
数据库服务器上创建,当从本地数据库和复制数据的任何架构。
-
打开管理门户网站,选择 新建 按钮,然后,在出现的菜单上,选择 数据库服务,SQL 数据库,导入。
-
指定 wordgrid 为数据库名称,然后选择或创建服务器。
数据库中创建并添加到您的订阅可用的资源的列表。
-
在资源列表中,选择您创建的数据库。
该数据库的页。
-
(可选) windows azure SQL 数据库不支持 windows 身份验证。 因此,您必须使用 SQL Server 用户名和密码。 可以使用您在步骤 1 中创建,但是,用户也可以访问其他数据库的同一服务器的用户名和密码。 如果希望限制访问,则可以创建用户名和密码仅 wordgrid 数据库的。 这些凭据可以使用用户名和密码不同数据库服务器的。 若要创建具有受限制访问权限的凭据,请执行以下步骤:
-
选择 管理 按钮,然后输入用户名和密码在第 1. 中创建的数据库服务器的。
-
选择 选择数据库 按钮,从数据库列表然后选择 主机。
-
选择 新建查询 按钮,然后输入以下 SQL 代码,与新创建的用户名和密码:
Transact-SQLCREATE LOGIN loginname WITH PASSWORD='myPassword'
现在可以创建此登录的数据库用户可以授予对 wordgrid 数据库的权限。
-
选择显示数据库所连接的按钮 (当前 主机)。
-
在出现的选择,选择要导入的 wordgrid 数据库,选择 新建查询 按钮,然后输入以下代码:
Transact-SQLCREATE USER username FOR LOGIN loginname
-
选择 运行 按钮,然后关闭选项卡。
-
-
在 wordgrid 数据库的页上,选择 显示连接字符串 链接,然后复制 ADO.NET 连接字符串到剪贴板。
粘贴连接字符串到的 MVC 项目的顶级 web.config 文件,下面的代码显示。
<connectionStrings> <add name="DefaultConnection" connectionString="<Paste here>" providerName="System.Data.SqlClient" /> </connectionStrings>
在 WordGrid F# 项目中的 web.config 文件中将连接字符串保持不变。 该字符串用于 F# 类型提供程序只能在编译时。
-
选择 F5 键生成和调试该应用程序在计算模拟器,现在使用 windows azure SQL 数据库而不是您的 LocalDB 数据库。
有关 LocalDB 的更多信息,请参见 SQL Server 2012 Express LocalDB。 有关 windows azure 数据库的更多信息,请参见 Windows Azure SQL Database。
发布应用程序作为云服务
-
打开 windows azure 项目的快捷菜单,然后选择 发布。
发布 windows azure 应用程序出现向导。
-
如果尚未运行发布 windows azure 应用程序向导,在并且尚未下载 .publishsettings 文件之前,选择。登录 页的 下载登录凭据 链接,然后输入您的凭据。
.publishsettings 文件下载。
-
选择 导入 按钮填充排序内容。
-
在 您选择的订阅 列表中,选择订阅为此部署使用。
现在可以发布应用程序或修改任何设置为此部署。
-
选择“下一步”按钮。
设置页。
-
在 环境 列表中,选择 正在暂存。
-
在 生成配置 列表中,选择 调试。
临时环境是完全可访问 Internet 上部署位置,除此之外,而不是发布到公共 URL 云服务,该服务发布到包含一个计算机生成的字符串的 URL。 此环境进行测试和验证很有用在最终发布之前。 当您在临时环境中若要提升您云服务添加到公共 URL 时,可以交换生产环境的临时环境。
-
选择 高级设置 选项,并且,在 存储帐户 列表中,选择您创建的存储帐户。 另外,请确保 启用 IntelliTrace 复选框处于选中状态。
-
当您准备好部署应用程序作为云服务时,请选择 下一个,检查设置,然后选择 发布。
使用 Windows Azure 活动日志 Visual Studio 中的窗口来监视部署的进度。
有关如何发布云服务的更多信息,请参见 Publishing Cloud Services to Windows Azure from Visual Studio。
使用 IntelliTrace 记录调试应用程序
-
在 服务器资源管理器,打开 Windows Azure 计算 节点的快捷菜单,然后选择 添加部署环境…。
添加部署环境 出现对话框。
-
在 选择部署环境下,展开您的订阅的节点,展开 WordGrid 云服务的节点,选择 WordGrid -临时 部署环境。 然后选择 确定 按钮。
-
在 服务器资源管理器,展开 MvcWebRole1 角色,打开 0 的实例节点的快捷菜单,然后选择 视图 IntelliTrace 记录。
此操作进度显示 Windows Azure 活动日志 窗口。 在一段时间后,记录在 Visual Studio 中打开。 异常、线程、请求和其他信息列出有关此实例出现。 还可以重新生成线程的状态在 Visual Studio 调试器的。 请注意 IntelliTrace 调试会话相当有限的与调试比较局部,因此,该最优方法是执行尽可能多的计算在模拟器上调试,在部署应用程序。