部署 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。
警告: |
---|
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>
提示: |
---|
您仅需保留用于部署应用程序的 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 应用程序
在 Visual Studio 2010 中打开您的 RIA Services 应用程序。您需要管理员权限才能发布,因此,请确保在**“开始”菜单中右击 Visual Studio 2010,然后在打开应用程序时选择“以管理员身份运行”**。
在**“解决方案资源管理器”中选择该 Web 项目,右击并选择“发布”**。
选择**“Web 部署”作为“发布”方法,指定 localhost(在本地发布时指定 localhost;如果是远程发布,则指定远程服务器名称)作为“服务 URL”,在“站点/应用程序”框中指定“默认网站”**(如果服务器为本地则再次指定)作为站点,并且在该框中指定您的应用程序的名称作为应用程序。例如,若要在本地发布名为 RIAApp1 的 RIA Services 应用程序,则要输入 Default Web Site/RIAApp1。
选中**“在目标上标记为 IIS 应用程序”和“保留目标上的多余文件(不删除)”**框。
单击**“发布”**按钮。
打开 Internet Information Services (IIS) 管理器,导航到在“连接”窗格中包含的“默认网站”列表中刚发布的 Web 应用程序,选择窗口底部附近的“内容视图”选项卡。
若要打开针对您的站点的测试页,请选择“ASP.NET 服务器”页,右击并选择**“浏览”**。
提示: |
---|
如果您已将 RIA Services 应用程序所需的程序集部署在 bin 文件夹中,则可以在 IIS 管理器的 bin 文件夹中找到这些程序集。该文件夹也将包含该 Web 应用程序的程序集。 |
警告: |
---|
如果该应用程序未能在测试页上出现,则 ASP.NET 或 Silverlight 存在问题。有关 Silverlight 部署的其他信息,请参见部署和本地化。 |
在 IIS 管理器中指定身份验证模式
在 IIS 管理器的**“连接”**窗格中选择您的 Web 应用程序。
在**“功能”视图的 IIS 组中双击“身份验证”**。
请确保启用了**“Windows 身份验证”(或者您选择采用的任何身份验证模式)。IIS 默认情况下仅支持匿名身份验证,因此通常要求此过程以更改此默认设置。ASP.NET 允许启用多个身份验证模式并且 IIS 管理器允许此类设置。RIA Services 允许窗体身份验证与匿名身份验证一起使用(以便用户可以访问登录页),但它本身仅允许 Windows 身份验证。右击任何“名称”,根据需要选择“启用”或“禁用”**以便将启用的身份验证限制为一个模式。
警告: |
---|
如果您在匿名身份验证之外未看到 Windows 身份验证或其他模式,则需要安装缺少的 IIS 组件。有关这些过程的更多信息,请参见 IIS 7 安装和部署。 |
如果您在让测试页正确显示上存在问题,请参考针对 RIA Services 解决方案的部署的疑难解答主题以便获得帮助。