LightSwitch 和 Windows Azure

将 LightSwitch 应用程序部署到 Windows Azure

Mike Wade

 

新的 Microsoft Visual Studio LightSwitch 旨在简化传统的业务线 (LOB) 数据转移窗体的应用程序的创建。 LightSwitch 可减少生成这些应用程序通过执行大量的举重创建连接到数据库 (数据存储层)、 显示专业的用户界面 (表示层) 和实现业务逻辑代码 (逻辑层) 的开销。

要进一步简化您的生活,可以承载 Windows Azure,Microsoft 数据中心上承载 Internet 规模云服务平台上的此类应用程序。 该平台包括 Windows Azure、 云服务操作系统和 SQL Azure,群中承载数据库服务。 承载 Windows Azure 平台上的 LightSwitch 应用程序无需将资源专用于基础结构管理,如 Web 服务器和数据服务器: Windows Azure 可以为您处理的所有。

在本文中我将看一看如何部署到 Windows Azure LightSwitch 应用程序使用设想诊所示例应用程序,这是可供下载,在 bit.ly/LightSwitchSamples。 设想诊所是一个简单的 LOB 应用程序设计为 optometrist 的办公室。 应用程序可以用于管理患者和约会,以及在诊所病人可能需要的产品。 它使用两个数据库: 固有的应用数据库,它管理患者和自己的约会,并调用 PrescriptionContoso,用于管理产品可供销售就诊附加的数据库。 原始浏览演示如何部署该应用程序作为双层桌面应用程序: 在应用程序运行完全在客户端用户的计算机上,但应用程序的数据位于其他位置。 在完成本文中的步骤后您可以发布您的应用程序在 Windows Azure 上。

将附加到 SQL Azure 的数据源

浏览示例的外部数据库的使用 — PrescriptionContoso 数据库,它可以从 msdn 网站下载并安装到本地开发计算机中。 由于 PrescriptionContoso 数据库附加的数据源,您必须创建和填充数据库自己。 当完成的应用程序部署到 Windows Azure 时,它将使用附加的数据源和群中承载的内部数据源。 让我们首先开困难的部分: 在 SQL Azure 中创建该连接的数据源。

通过在登录到您在 windows.azure.com 的 Windows Azure 帐户启动。 如果您还没有帐户,您可以注册一个在同一站点。 一旦您已经登录到 Windows Azure Platform 管理门户,在左侧的导航窗格中选择数据库节点和中央的项目列表中查看您的订阅的数据库信息。 (请参阅 bit.ly/pcwCLX 有关布局门户的说明。)如果您的帐户还没有数据库的预订,在导航面板中,选择您的订购和横跨顶部选择创建从功能区 (请参阅图 1)。 这将启动一个服务器创建向导,允许您选择承载地区和您的管理员登录名和密码,您 SQL Server,并创建防火墙规则 (请参阅图 2)。 您将需要添加为您的服务器至少两个防火墙规则:

  1. 选择该复选框可允许其他 Windows Azure 服务来访问此服务器。 这样的应用远景诊所程序,最终将驻留在 Windows Azure,访问该数据库。
  2. 添加也能够访问服务器范围内的 IP 地址。 这些是可以通过 Windows Azure Platform 管理门户数据库来管理的计算机的 IP 地址。 例如,我的 PC 的 IP 地址是 131.107.xxx.yyy,因此添加 131.107.0.0 处开始和结束位置为 131.107.0.255 的地址范围。 不要忘记: 您仍需要您 Windows Azure 订阅的登录信息管理数据库中的通过了门户,但设置该防火墙规则允许访问数据库,在开发过程中的 Visual Studio。 一旦您已经创建并部署应用程序,您可以删除此防火墙规则,以防止任何外部计算机访问该数据库。

Windows Azure Platform Management Portal: Creating a Database Server
图 1 Windows Azure Platform 管理门户: 创建数据库服务器

Using the Wizard to Create a Database Server
图 2 使用向导创建的数据库服务器

与创建数据库服务器,您现在可以查看其属性。 在导航窗格中 (我被称为"pq96r63lrm") 中选择数据库服务器。 项目列表包括所有的防火墙规则创建的以及默认的"主"数据库。

您需要创建新的数据库的 PrescriptionContoso 信息。 请确保在导航窗格中,选择您的数据库服务器,然后单击创建按钮,从 Windows Azure Platform 管理门户中的功能区。 为您的数据库名称,键入"PrescriptionContoso"并保留版和最大大小的默认设置 (请参阅图 3)。

Creating the PrescriptionContoso Database
图 3 创建 PrescriptionContoso 数据库

现在就可以将表添加到 PrescriptionContoso 数据库。 在左侧导览面板中选择新的数据库,然后单击管理按钮。 这将打开新的 Web 页,允许您管理 PrescriptionContoso 数据库。 在新页上,选择新建表。 这将打开表编辑器页 (请参阅图 4)。 命名为"产品"表,然后输入中显示的信息图 5 的架构。

Adding the Product Table to the PrescriptionContoso Database
图 4 将产品表添加到 PrescriptionContoso 数据库

图 5 的产品表的架构

类型 默认值 是标识吗? 是必需的吗? 在主键?
ProductID Int  
产品名称 nvarchar(50)      
MSRP Money      
说明 nvarchar(max)        
ProductImage varbinary(max)        
类别 nvarchar(max)        

创建另一个新表,命名此一个"ProductRebate,",然后输入中的信息图 6 的架构。 为使用所有附加的数据源,LightSwitch 与 PrescriptionContoso 数据库进行交互时所使用的连接字符串会存储在 web.config 文件中生成作为项目输出。 三层应用程序存储在 IIS 服务器上的 web.config 文件,它不能由应用程序的用户看到。

图 6 ProductRebate 表的架构

类型 默认值 是标识吗? 是必需的吗? 在主键?
ProductRebateID Int  
ProductID Int      
RebateStart 转换        
RebateEnd 转换        
退款 Money        

但是,与两层应用程序,安装该应用程序的所有用户可以都查看 web.config 文件。 因此,请务必在运行时创建非管理员身份登录并使用的 PrescriptionContoso 数据库的用户。 此用户将不会完全数据库服务器管理员,并将能够执行仅创建、 读取、 更新、 删除 (CRUD) 操作,在 PrescriptionContoso 数据库上。 通过打开到主数据库的连接并执行以下命令在 SQL Server 管理 Studio Express 或使用 sqlcmd 创建新的数据库的登录名 (请参阅 bit.ly/ok2Mdh 的详细信息):

CREATE LOGIN <user> WITH password='<password>';

务必用新的 <user> 和 <password>。 您提供的密码必须是强 (请参阅 bit.ly/p4BEwU)。

现在连接到与您 SQL Azure 的管理员帐户 PrescriptionContoso 数据库,并创建用户:

CREATE USER <user> FROM LOGIN <user>;

已创建数据库架构,但表不包含任何数据。 您可以将数据添加到 Windows Azure Platform 管理门户上或通过将数据迁移到 Windows Azure 数据库示例中包含 PrescriptionContoso.mdf 文件中使用数据设计器在表中。 您还可以使用附带了 Microsoft SQL Server 2008年和 Microsoft SQL Server 2008 Express bcp 实用工具 (bit.ly/bhH7Ub)。 尚未另一个选项是添加到运行的应用程序的数据。 很可能有两层应用程序,将附加到驻留在 SQL Azure 上的数据源,因此,让我们通过发布,并作为两层应用程序运行的远景诊所示例填充数据库。

与 Windows Azure 上的位置,为附加的数据源中的模式,就可以发布应用程序。 您应该能够按照设想诊所考察中的部署步骤 (bit.ly/py9yna) 直到第 8 步。 在其他连接信息页上输入刚创建的数据库的连接字符串。 通过在导航窗格中选择数据库并达到在属性窗格中的连接字符串按钮,您将发现 Windows Azure Platform 管理门户中的连接字符串。 复制 ADO。Net 连接字符串 (请参阅图 7) 和粘贴到 LightSwitch 中的 PrescriptionContoso 文本框发布向导。 打开连接属性对话框,并确保您键入的用户名和密码,您创建的新用户。 若要确保您能够连接到 SQL Azure 数据库中使用测试连接按钮。

Getting the Connection String for the PrescriptionContoso Database
图 7 PrescriptionContoso 数据库中获取连接字符串

您输入附加的数据源的连接字符串之后,您可以完成发布向导并等待您要发布的应用程序。 一旦发布,可以查看生成的 web.config 文件中的发布输出并查看您的 Windows Azure 数据库的连接字符串现在已就绪。 因为应用程序仍然两级,最终用户将需要 Microsoft。NET 框架 4 安装在他们的计算机,但应用程序可以立即读取和写入数据到 PrescriptionContoso 数据库在 SQL Azure 上。

承载 Windows Azure 上的应用程序

接下来,让我们看一看承载应用程序完全在 Windows Azure 上的。 Windows Azure 运行 IIS,因为它是可以驻留在您的企业中的 IIS 服务器上作为 Windows Azure 上具有相同类型的应用程序。 应用程序用户只需要具有运行该应用程序,而不是完整的 Microsoft Silverlight 4 或更高版本。NET 框架 4,极大地简化了客户端部署。 您将修改构想诊所示例以发布到 Windows Azure 的应用程序。 仍将需要的服务层。NET 框架 4,但 Windows Azure 将自动调配,为您。

您可以将远景诊所发布到 Windows Azure 之前,没有需要向您的订购完成一些其他准备工作。 您将需要预先创建 Windows Azure Platform 管理门户中的托管的服务。 此服务是什么将运行已部署的应用程序的服务器端代码。 您还需要创建存储帐户,它将用于存储应用程序二进制文件,而部署应用程序。 将 SQL Azure 数据库中存储的应用程序数据。

导航回门户,并在导航窗格中选择主页按钮 (请参阅图 8)。 在功能区中,您应该看到一个按钮标记为新的托管服务。 单击此按钮将显示一个新窗口,在其中创建您的托管服务。 为您的应用程序中输入服务名称、 URL 前缀和区域。 部署选项,请选择"不部署"; LightSwitch 发布向导将部署应用程序。 以类似的方式创建该存储帐户: 单击功能区上的新存储帐户按钮并填写出现的弹出窗口中的字段。 现在,您应该能够定位到的托管服务和 Windows Azure Platform 管理门户中的存储。 其余的配置可以通过 LightSwitch Windows Azure 发布向导。

Creating a Hosted Service in the Windows Azure Platform Management Portal
图 8 中的 Windows Azure Platform 管理门户创建托管的服务

让我们设想诊所示例在 LightSwitch IDE 中进行某些更新。 因为正在群中承载的应用程序,最好确保您的 LightSwitch 应用程序使用表单身份验证的安全。 (详细信息,请参阅文章,应用"保护访问到 LightSwitch 程序",在这一期中。)这 VisionClinic 应用程序的应用程序属性的访问控制选项卡中配置 (请参阅图 9)。 现在,请导航到应用程序类型选项卡。 应用程序将保持桌面应用程序,因为您希望应用程序能够与最终用户的计算机 (例如,到 Microsoft Excel 导出数据) 上安装其他应用程序进行交互。 对于应用程序服务器配置中,选择 Windows Azure (请参阅图 10)。 单击要开始发布过程的设计器中的 Publish… 按钮上。

Using Forms Authentication
图 9 使用窗体身份验证

Choosing to Host Application Services on Windows Azure
图 10 选择 Windows Azure 上的主机应用程序服务

命中两次才能连接到 Windows Azure 页到向导中的下一步。 此页要求两条信息 (请参阅图 11):

  1. 您的帐户订购的 ID
  2. 管理证书指纹

Connecting to Windows Azure in the LightSwitch Publish Wizard
图 11 连接到 Windows Azure LightSwitch 在发布向导

从承载服务 Windows Azure Platform 管理门户中的属性窗格中获取订阅 ID。 如果这是您要发布到 Windows Azure 的第一个时间,还必须创建新的证书将用于在发布过程中确认您的 Windows Azure 服务的身份,因为在发布过程中有无登录名。 在下拉列表中,选择 < 创建新的自签名的厎 > 选项。 执行此操作将新证书添加到您的计算机的证书存储区。 现在,您需要将证书信息上载到您的 Windows Azure 帐户。 选择发布向导中的副本路径然后回到门户并在导航窗格中选择管理证书 
node。 从功能区中选择添加证书,然后从随后打开的对话框中选择浏览 … 按钮 (请参阅图 12)。 从发布向导中复制的路径中粘贴 — 现在应添加您的证书。

Adding a Management Certificate to Windows Azure
将管理证书添加到 Windows Azure 的图 12

Azure 服务配置页 (请参阅图 13) 在向导允许您指定通过 Windows Azure Platform 管理门户创建托管服务和存储帐户的名称。 这些下拉列表应自动填充由向导,一旦已在前一页上输入一个有效的订购 ID 和管理证书。 您还可以选择将应用程序部署到哪些环境: 生产或转移。 对于此示例中,选择生产。

Setting Windows Azure Service and Storage Information While Publishing
图 13 设置 Windows Azure 服务和存储信息,同时发布

接下来,您需要指定应用程序的安全设置: 将用于建立 SSL 连接的部署的应用程序的证书。 与 Windows Azure 通过 HTTPS 通信保护业务数据时,将使用窗体身份验证信息,客户端和服务器,以及用户名称和密码之间交换。 向导使您可以选择从已经上载到 Windows Azure 的现有证书或上载新的证书,如中所示图 14。 下拉列表中,可以创建一个新的自签名的证书,可以上载到 Windows Azure。 Silverlight 出的浏览器启动程序工具桌面应用程序使用该 LightSwitch 要求在运行时通过 HTTPS 服务器上受信任的证书。 如果证书不受信任的应用程序将不会正确运行。 最好的方法是使用由受信任的证书颁发机构签名的证书。 不太安全的另一种方法是预安装在客户端的证书存储区中新的自签名的证书 (请参阅 bit.ly/ra3CKG 的详细信息)。 在浏览器中运行的 LightSwitch 客户端可以使用自签名证书,但浏览器将显示警告,Silverlight 应用程序在加载之前。

Setting the Certificate to Use for an HTTPS Connection
图 14 将证书设置为使用 HTTPS 连接

下一步的发布向导中输入是信息的固有的数据源的数据库连接设置。 这一次,LightSwitch 将自动创建数据库并将该架构发布到 SQL Azure。 您可以首先的创建 master 数据库的连接字符串自动为您在 SQL Azure 上。 将此值粘贴到发布向导中的管理员连接字符串。 通过单击生成器按钮显示发布向导中的连接属性并输入新数据库名称来替换"母版"(例如,"VisionClinic") — 请参阅图 15。 更新 (所复制的连接字符串包含虚口令) 的用户密码。 此外应考虑将加密连接属性设置为 True,并将 TrustServerCertificate 连接属性设置为 False 的连接字符串的高级属性中。 这将确保该连接加密的不可能实现的人为干预攻击。 您不希望对其 CRUD 操作使用的管理连接字符串,因此通过单击创建数据库登录按钮,在发布向导中创建新的登录名为数据库服务器的应用程序。

Setting the Connection String for the Application Data
图 15 设置连接字符串的应用程序数据

接下来,您应为应用程序的初始安全管理员输入用户名和密码。 安全管理员可以访问正在运行的 LightSwitch 客户端应用程序中的安全管理屏幕。 这些屏幕允许安全管理员能够提供对其他用户运行该应用程序的初始访问。

您可以继续使用以前添加其他连接向导页的 PrescriptionContoso 连接字符串。 在指定证书向导页面中,您可以选择进行签名的客户端应用程序 (请参阅图 16)。 签署应用程序允许您发布 Windows Azure 的应用程序的较新版本时自动更新用户的计算机上的应用程序的 Silverlight 出的浏览器启动器 (bit.ly/iY6lFP)。

Specifying a Certificate to Sign the Client Application
图 16 指定使用客户端应用程序进行签名的证书

完成该向导后,应用程序被打包,并发送到 Windows Azure,安装。 当发布完成时,LightSwitch 将启动 Windows Azure Platform 管理门户。 LightSwitch 告诉 Windows Azure 启动托管的服务,但它可能需要几分钟才能完成的进程。 您可以在门户上跟踪导航窗格的托管服务选项卡中部署的进度。

部署完成后,选择托管服务的门户,导航窗格中,然后打开到达已完成的"Vision_Clinic"部署项目列表中的子节点 (请参阅图 17)。 属性窗口中应包含您已部署的应用程序 ; 有 DNS 名称 单击此链接将会自动打开您的应用程序,首先在 Web 页重定向应用程序以使用 HTTPS。 这是 URL 的客户端应运行该应用程序使用。 很可能 — — 但强烈建议您不要 — 通过将 Microsoft.LightSwitch.RequireEncryption 属性设置为"假"服务配置文件中 (下一节中所述) 关闭 HTTPS 重定向。

Viewing the Published Application in the Windows Azure Platform Management Portal
图 17 Windows Azure Platform 管理门户中查看已发布的应用程序

发布输出

让我们看一下在幕后。 有唯一可发布到 Windows Azure 的三个输出文件。 这些安全角色包括:

  • 设想 Clinic.cspkg
  • ServiceDefinition.csdef
  • ServiceConfiguration.cscfg

在生成输出目录中,您将看到一个.cspkg 文件。 此文件是一所有 Windows Azure 应用程序相关的文件: 应用程序二进制文件,以及服务定义和配置文件。 在发布过程中此文件传输到配置托管的服务的 Windows Azure。

ServiceDefinition.csdef (请参阅图 18) 是应用程序的云服务定义文件。 此 XML 文件规定了如何配置您应用程序的 Web 站点。 文件声明一个 WebRole,LightSwitchWebRole (WebRole 节点下),应启用 HTTP 和 HTTPS (站点和终结点节点)。 它指定 HTTPS 需要 Windows Azure 计算机 (证书节点) 上存储的证书和声明的可自定义的配置设置特定于此应用程序 (ConfigurationSettings 节点)。 这些设置包括诊断日志记录信息时是否将 HTTP 重定向到 HTTPS 调用。

图 18 ServiceDefinition.csdef 文件

<ServiceDefinition name="Vision_Clinic"
  xmlns="https://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="LightSwitchWebRole"
           vmsize="Small"
           enableNativeCodeExecution="true">
    <ConfigurationSettings>
      <Setting name="Microsoft.LightSwitch.Trace.Enabled" />
      <Setting name="Microsoft.LightSwitch.Trace.LocalOnly" />
      <Setting name="Microsoft.LightSwitch.Trace.Level" />
      <Setting name="Microsoft.LightSwitch.Trace.Sensitive" />
      <Setting name="Microsoft.LightSwitch.Trace.Categories" />
      <Setting name="Microsoft.LightSwitch.RequireEncryption" />
    </ConfigurationSettings>
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
          <Binding name="HttpsIn" endpointName="HttpsIn" />
        </Bindings>
      </Site>
    </Sites>  
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
      <InputEndpoint name="HttpsIn" protocol="https" port="443"
        certificate="SSLCertificate" />
    </Endpoints>
    <Certificates>
      <Certificate name="SSLCertificate" storeLocation="LocalMachine"
        storeName="My" />
    </Certificates>
  </WebRole>
</ServiceDefinition>

图 19 显示云服务配置文件 (ServiceConfiguration.cscfg) 中包含 Web 角色的实际配置设置。 如果您看一下生成输出目录中的 ServiceConfiguration.cscfg 文件,您将看到包含 SSL 证书指纹发布向导的"安全设置"页中指定的设置。

图 19 ServiceConfiguration.cscfg 文件

<ServiceConfiguration serviceName="Vision_Clinic"
  xmlns="https://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="LightSwitchWebRole">
    <Instances count="1" />
    <ConfigurationSettings>
      <!-- A value of true will enable diagnostic logging on the server -->
      <Setting name="Microsoft.LightSwitch.Trace.Enabled" value="false" />
      <!-- A value of true only lets local access to Trace.axd -->
      <Setting name="Microsoft.LightSwitch.Trace.LocalOnly" value="true" />
      <!-- The valid values for the trace level are: None, Error,
        Warning, Information, Verbose -->
      <Setting name="Microsoft.LightSwitch.Trace.Level"
        value="Information" />
      <!-- A value of true will indicate that logging sensitive
        information is okay -->
      <Setting name="Microsoft.LightSwitch.Trace.Sensitive" value="false" />
      <!-- The semi-colon separated list of categories that will be
        enabled at the specifed trace level -->
      <Setting name="Microsoft.LightSwitch.Trace.Categories"
        value="Microsoft.LightSwitch" />
      <!-- A value of true will indicate http requests should be
        re-directed to https -->
      <Setting name="Microsoft.LightSwitch.RequireEncryption"
        value="true" />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name="SSLCertificate"
        thumbprint="CD27FF4C85A2AD495A054D606E354BCAAD01B3D8"
        thumbprintAlgorithm="sha1" />
    </Certificates>
  </Role>
</ServiceConfiguration>

有两种方法可以更改 Web 角色的其他配置设置。 一种方法是编辑 LightSwitch 项目目录中包含的 ServiceConfiguration.cscfg 文件。 例如,若要启用诊断日志记录在服务器上,您将需要修改 Microsoft.LightSwitch.Trace.Enabled 属性中的,像下面这样:

<Setting name="Microsoft.LightSwitch.Trace.Enabled" value="true" />

在项目中的项目的云服务配置文件中设置的值将最终生成的云服务配置文件。

还有可能更改中 ServiceConfiguration.cscfg 部署后的值。 在 Windows Azure Platform 管理门户中,单击托管服务,存储帐户 & CDN,然后单击导航窗格的下半部分中的托管服务。 深化到项目列表中的 Vision_Clinic 部署项。 一旦存在,您应该看到功能区上的配置按钮。 单击此按钮允许您上传新的服务配置文件或编辑现有的文件。

使用附加的 Windows Azure 功能

虽然没有内置支持许多附加的 Windows Azure 功能,与项目的服务 Definition.csdef 和 ServiceConfiguration.cscfg 文件,进行一些简单的修改就可以利用其他的 Windows Azure 功能。 以下是几个示例。

虚拟机 (VM) 大小 Windows Azure 提供了几种规格的计算实例,听写的资源专用于每个服务实例的数量: VM 大小、 更昂贵是运行应用程序。 LightSwitch 为一个很小的应用程序默认计算大小,但您可以通过更新默认 WebRole 在 ServiceDefinition.csdef 文件中的"vmsize"属性更改的级别:

<WebRole name="LightSwitchWebRole"
         vmsize="ExtraSmall"
         enableNativeCodeExecution="true">

ExtraSmall (这是 beta 版中当前可用) 是 Windows Azure 上可用的最大量占用资源的服务。 所有 VM 规模的摘要,请访问 bit.ly/qdTFZp

Microsoft Windows Azure 连接 Windows Azure 连接 (bit.ly/nvTg6Z) 允许为 Windows Azure 和上场所资源之间的基于 IP 的网络连接。 Windows Azure 连接,CTP,在当前应用程序部署到 Windows Azure 上场所 SQL Server 数据库或 SharePoint 网站连接到提供一种方法。 您还可以让 Windows Azure 虚拟机加入本地的域中,使您的应用程序能够使用 Windows 身份验证。 就可以配置 LightSwitch 应用程序利用 Windows Azure 连接功能。 虽然执行这种配置是超出了本文的范围,请留意"部署"页上的 LightSwitch 开发人员中心 (bit.ly/pxmV5d)。

Mike Wade 是开发者处理 Visual Studio LightSwitch。他在团队中的焦点是部署和刀具功能的项目。

多亏到下面的技术专家审阅这篇文章: 贝斯 MassiJohn Rivard