部署 RIA Services 解决方案指南

本主题介绍在将您的 WCF RIA Services 应用程序部署到 Web 服务器时要执行的任务。部署到 Web 服务器要求该服务器安装有 .NET Framework 4 以及 Internet Information Server (IIS) 6 或 7 以便承载应用程序。RIA Services 也必须在 Web 服务器上提供,但不可能只在 Web 服务器上安装该程序,因此将论述其他部署选项。为成功进行部署,必须正确配置 ASP.NET Web 应用程序,因此概述了 Web.config 中所需的设置。最后,介绍了发布过程。

在部署 RIA Services 应用程序时可能出现的问题以及如何解决这些问题的建议将在针对 RIA Services 解决方案的部署的疑难解答主题中予以介绍。

确认 .NET Framework 4 安装在 Web 服务器上

.NET Framework 4 必须安装在 Web 服务器上,RIA Services 应用程序才能正常运行。有关更多信息,请参见安装 .NET Framework

确认 IIS 安装在 Web 服务器上

Internet Information Server (IIS) 6 或 7 必须安装在 Web 服务器上,RIA Services 应用程序才能正常运行。有关更多信息,请参见 IIS 7 安装和部署安装 IIS 6.0

在 Web 服务器上安装 RIA Services

RIA Services 程序集必须在 Web 服务器上提供。建议将 RIA Services 安装在将承载您的应用程序的 Web 服务器上。如果由于权限不足或其他某个问题而无法选择这样做,您还可以通过在发布项目时在项目的 bin 文件夹中包括这些程序集或将这些程序集安装在全局程序集缓存 (GAC) 中,在 Web 服务器上提供这些程序集。

  • Bin 部署

    在部署您的应用程序时,一个选项就是在您的项目的 bin 文件夹中包括 RIA Services 程序集。若要在 Visual Studio 中这样做,您必须在**“解决方案资源管理器”中选择必须包括的每个 Web 项目程序集引用,并且在“属性”窗口中将“Copy Local”属性设置为“True”**。必须始终包括的两个程序集是

    • System.ServiceModel.DomainServices.Server.dll

    • System.ServiceModel.DomainServices.Hosting.dll

    将这些属性值设置为**“True”**将导致下次在您生成解决方案时这些程序集复制到 bin 文件夹中。在程序集复制到 bin 文件夹中后,它们将在发布站点时复制到 Web 服务器上。

  • 如果您在使用实体框架访问数据库,还将需要添加对 System.ServiceModel.DomainServices.EntityFramework.dll 程序集的引用。

  • 如果您在使用 LINQ to SQL 访问数据,将需要添加对 Microsoft.ServiceModel.DomainServices.LinqToSql.dll 程序集的引用。

  • GAC 部署

    您可以将这些程序集安装到 GAC 中,而不是将 RIA Services 程序集复制到使用它们的每个项目的 Bin 文件夹中。GAC 中的任何程序集都可用于服务器上的每个应用程序。此方法易于维护,因为程序集仅需在 GAC 中更新,而无需在每个 Bin 文件夹中都更新。

    若要在 Web 服务器上的 GAC 中安装 RIA Services 程序集,请运行以下命令。

    msiexec /i RiaServices.msi SERVER=TRUE
    

配置 Web 服务器

在 Web 服务器上部署 RIA Services 应用程序要求其 Web.config 文件包含正确配置的元素和特性。该 Web.config 文件管理 ASP.NET 应用程序的配置,并且当您在**“新建 Silverlight 应用程序”向导上选择使用 ASP.NET Web 项目承载 Silverlight 应用程序时自动创建。此 Web.config 文件最初仅指定目标框架是 <compilation> 元素中的 .NET Framework 4.0。在您使用“添加新的域服务类”**向导向 RIA Services 应用程序的 Web 项目添加服务域时,部署所需的实际值默认在 Web.config 文件中设置。

该 Web.config 文件中的几个部分对于部署而言至关重要。这些部分配置 ASP.NET 承载模式、IIS 和身份验证模式。本节论述这些部分中部署 RIA Services 应用程序所需的配置元素值。该向导默认设置这些值,但在尝试发布前这些值可由不同的过程进行更改。因此,知道正确值并且确认这些值按预期设置将很有用。本节还介绍了若干过程,这些过程使用 Internet Information Service (IIS) 向导以便确保 IIS 在配置上与在 Web.config 文件中指定的值一致。

RIA Services 域服务是 Windows Communication Foundation (WCF) 服务,并且在与 ASP.NET 一起承载时需要承载在 ASP.NET 兼容模式下。此要求不能在代码中设置并且必须在 Web.config 文件中指定。通过在 <system.serviceModel> 部分的 <ServiceHostingEnvironment> 元素中将 aspNetCompatibilityEnabled 属性设置为 true,启用 ASP.NET 兼容模式:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>

默认情况下设置 true 值。该兼容模式启用域 WCF 服务,以便使用 ASP.NET Web 应用程序平台的所有功能。对于具有 HTTP 协议的服务,将 multipleSiteBindingsEnabled 特性设置为 true 将为每个站点启用多个 IIS 绑定。有关启用这些功能的后果的更多信息,请参见 WCF 服务和 ASP.NET

Warning 警告:
WCF 服务在 IIS 之外还有许多承载选项。这些选项可以是在托管应用程序中自承载、在托管 Windows 服务中承载或者由 Windows 进程激活服务 (WAS) 承载。因此,WCF 服务必须选择使用 ASP.NET 兼容模式。但是,RIA Services 域服务只能是在 IIS 中承载的,因此限制为使用 HTTP 传输。

**“添加新的域服务类”**向导在 IIS 6 所要求的 system.web 部分内添加 <httpModules> 元素的 <add> 元素。请确认 .NET Framework 4.0 已针对此部分的 <compilation> 元素,并且域服务模块已使用以下值添加:

<system.web>
  <httpModules>
    <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </httpModules>
  <compilation targetFramework="4.0" />
</system.web>

**“添加新的域服务类”**向导在 IIS 7 所要求的 <system.webserver> 部分中添加 <modules> 元素。确认该元素包含下列值:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="DomainServiceModule" preCondition="managedHandler"
        type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </modules>
</system.webServer>
Tip提示:
您仅需保留用于部署应用程序的 IIS 版本所需的配置元素。例如,如果您在使用 IIS7 进行部署,则用于配置 IIS6 的元素应删除。但如果保留这两组承载元素,也不会造成损害。

在使用 RIA Services 解决方案时,只能启用一种身份验证方案。Web.config 文件中的 <authentication> 元素为 ASP.NET 应用程序配置 ASP.NET 身份验证方案。身份验证方案确定如何识别要查看 ASP.NET 应用程序的用户。该模式特性指定身份验证方案。检查您的 Web.config 文件以及层次结构中其他配置文件的 <authentication> 元素,以便确保未启用多个方案(Windows、Forms、Passport、None)。在为 RIA Services 应用程序创建域服务时,默认情况下不显式创建该部分。在未显式指定该元素时使用的默认值为 <authentication mode = “Windows”>。在发布 Web 应用程序后,我们需要检查 IIS 是否仅启用了 Windows 身份验证(如果您在使用该选项),下面将介绍这个过程。

有关 Web.config 设置的更多信息,请参见 ASP.NET 配置

部署 RIA 应用程序

在 IIS 上发布 Web 应用程序

  1. 在 Visual Studio 2010 中打开您的 RIA Services 应用程序。您需要管理员权限才能发布,因此,请确保在**“开始”菜单中右击 Visual Studio 2010,然后在打开应用程序时选择“以管理员身份运行”**。

  2. 在**“解决方案资源管理器”中选择该 Web 项目,右击并选择“发布”**。

  3. 选择**“Web 部署”作为“发布”方法,指定 localhost(在本地发布时指定 localhost;如果是远程发布,则指定远程服务器名称)作为“服务 URL”,在“站点/应用程序”框中指定“默认网站”**(如果服务器为本地则再次指定)作为站点,并且在该框中指定您的应用程序的名称作为应用程序。例如,若要在本地发布名为 RIAApp1 的 RIA Services 应用程序,则要输入 Default Web Site/RIAApp1

  4. 选中**“在目标上标记为 IIS 应用程序”“保留目标上的多余文件(不删除)”**框。

  5. 单击**“发布”**按钮。

  6. 打开 Internet Information Services (IIS) 管理器,导航到在“连接”窗格中包含的“默认网站”列表中刚发布的 Web 应用程序,选择窗口底部附近的“内容视图”选项卡。

  7. 若要打开针对您的站点的测试页,请选择“ASP.NET 服务器”页,右击并选择**“浏览”**。

Tip提示:
如果您已将 RIA Services 应用程序所需的程序集部署在 bin 文件夹中,则可以在 IIS 管理器的 bin 文件夹中找到这些程序集。该文件夹也将包含该 Web 应用程序的程序集。
Warning 警告:
如果该应用程序未能在测试页上出现,则 ASP.NET 或 Silverlight 存在问题。有关 Silverlight 部署的其他信息,请参见部署和本地化

在 IIS 管理器中指定身份验证模式

  1. 在 IIS 管理器的**“连接”**窗格中选择您的 Web 应用程序。

  2. 在**“功能”视图的 IIS 组中双击“身份验证”**。

  3. 请确保启用了**“Windows 身份验证”(或者您选择采用的任何身份验证模式)。IIS 默认情况下仅支持匿名身份验证,因此通常要求此过程以更改此默认设置。ASP.NET 允许启用多个身份验证模式并且 IIS 管理器允许此类设置。RIA Services 允许窗体身份验证与匿名身份验证一起使用(以便用户可以访问登录页),但它本身仅允许 Windows 身份验证。右击任何“名称”,根据需要选择“启用”“禁用”**以便将启用的身份验证限制为一个模式。

Warning 警告:
如果您在匿名身份验证之外未看到 Windows 身份验证或其他模式,则需要安装缺少的 IIS 组件。有关这些过程的更多信息,请参见 IIS 7 安装和部署

如果您在让测试页正确显示上存在问题,请参考针对 RIA Services 解决方案的部署的疑难解答主题以便获得帮助。