如何:配置客户端应用程序服务

更新:2007 年 11 月

本主题描述如何使用 Visual Studio“项目设计器”来启用和配置客户端应用程序服务。可以使用客户端应用程序服务来验证用户,并从现有的 ASP.NET AJAX 应用程序服务中检索用户角色和设置。配置之后,可以按照客户端应用程序服务概述中的介绍,在应用程序代码中访问启用的服务。有关 ASP.NET AJAX 应用程序服务的更多信息,请参见 ASP.NET 应用程序服务概述

在“项目设计器”的“服务”页上,可以启用和配置客户端应用程序服务。“服务”页会更新项目的 App.config 文件中的值。若要访问“项目设计器”,请使用“项目”菜单上的“属性”命令。有关“服务”页的更多信息,请参见“项目设计器”->“服务”页。有关“项目设计器”的更多信息,请参见项目设计器介绍

下面的过程描述如何为客户端应用程序服务执行基本配置。高级配置选项将在后面的节中介绍。

配置客户端应用程序服务

  1. 在“解决方案资源管理器”中选择一个项目节点,然后在“项目”菜单上单击“属性”。

    将显示项目设计器。

  2. 单击“服务”选项卡。将出现“服务”页,如下面的插图中所示。

    项目设计器中的“服务”选项卡

  3. 在“服务”页上,选择“启用客户端应用程序服务”。

  4. 如果计划提供自己的登录控件或对话框,则选择“使用 Forms 身份验证”,或选择“使用 Windows 身份验证”以使用由操作系统提供的标识。有关更多信息,请参见客户端应用程序服务概述

    说明:

    如果选择“使用 Windows 身份验证”,则客户端应用程序服务将自动配置为使用 SQL Server Compact Edition 3.5 版 数据库。“服务的高级设置”对话框中将会指示这一点,如在下节中所述。如果接下来选择“使用 Forms 身份验证”,则将不会自动清除“使用自定义连接字符串”设置。如果已经生成 SQL Server Compact 3.5 数据库以用于 Windows 身份验证,这将会导致错误。若要修复这些错误,请在“服务的高级安全设置”对话框中清除“使用自定义连接字符串”设置。

  5. 如果选择“使用 Forms 身份验证”,请在“身份验证服务位置”框中指定服务主机的 URL(不包括文件名)。当设计器将此值写入到配置文件中时,将自动追加标准文件名 (Authentication_JSON_AppService.axd)。

  6. 或者,如果选择“使用 Forms 身份验证”,则可以在“凭据提供程序”框中指定一个值。凭据提供程序必须实现 IClientFormsAuthenticationCredentialsProvider 接口。通过使用凭据提供程序,可以将登录用户界面与其他应用程序代码分隔开。这使您可以创建可用于多个应用程序的单个登录对话框。有关更多信息,请参见如何:使用客户端应用程序服务来实现用户登录和注销

    如果指定一个凭据提供程序,则必须将其作为程序集限定类型名称进行指定。有关更多信息,请参见 Type.AssemblyQualifiedName程序集名称。最简单的程序集限定类型名称的形式与以下示例类似:

    MyNamespace.MyLoginClass, MyAssembly
    
  7. 在“角色服务位置”和“Web 设置服务位置”文本框中,指定每一个服务的服务位置(不包括文件名)。当设计器将值写入到配置文件中时,将自动追加标准文件名(Role_JSON_AppService.axd 和 Profile_JSON_AppService.axd)。

  8. 或者,单击“高级”以修改高级设置,例如本地缓存行为。有关更多信息,请参见下面的过程。

高级配置

下面的过程描述如何针对不太常见的方案配置客户端应用程序服务。例如,可以对部属在公共位置的应用程序使用这些配置选项,或使用加密的 SQL Server Compact Edition 3.5 版 数据库作为本地数据缓存。

配置客户端应用程序服务的高级设置

  1. 在“项目设计器”的“服务”页上,单击“高级”。

    将出现“服务的高级设置”对话框,如下图中所示。有关此对话框的更多信息,请参见“高级服务设置”对话框

    “高级服务设置”对话框

  2. 选择或清除“将密码哈希保存在本地以实现脱机登录”。若选择此选项,将在本地缓存加密形式的用户密码。这对于实现应用程序的脱机模式很有用。通过选择此选项,即使当 IsOffline 属性设置为 true 时,也可以验证用户。有关脱机模式的更多信息,请参见如何:脱机使用客户端应用程序服务

  3. 选择或清除“每次服务器 Cookie 到期时要求用户重新登录”。将在远程服务器上配置身份验证 Cookie,并指示用户的登录保持活动的时间。有关如何配置 Cookie 的更多信息,请参见 authentication 的 forms 元素(ASP.NET 设置架构)中的 timeout 属性。

    选择此选项之后,若在身份验证 Cookie 过期之后尝试访问远程角色或 Web 设置服务,则将引发 WebException。可以处理此异常并显示登录对话框以重新验证用户。有关此行为的示例,请参见演练:使用客户端应用程序服务。此选项对部署在公共位置的应用程序而言是很有用处的,它可以确保离开前忘记关闭应用程序的用户不会无限期地保持已验证状态。

    如果清除此选项,并在身份验证 Cookie 过期之后尝试访问远程服务,则会自动对用户进行重新验证。

  4. 指定“角色服务缓存超时”的值。可在频繁更新角色时将此时间间隔设置为较小的值,在不频繁更新角色时将其设置为较大的值。如果要实现脱机模式,则将时间间隔设置为较大的值,以防止应用程序处于脱机状态时角色信息过期。

    调用 IsInRole 方法时,角色提供程序将访问缓存的角色值或角色服务。若要以编程方式重置缓存并强制此方法以访问远程服务,请调用 ResetCache 方法。

  5. 选择或清除“使用自定义连接字符串”。有关更多信息,请参见下面的过程。

配置客户端应用程序服务以使用数据库来进行本地缓存

  1. 在“项目设计器”的“服务”页上,单击“高级”。

    将出现“服务的高级设置”对话框。

  2. 选择“使用自定义连接字符串”。

    Data Source = |SQL/CE| 的默认值出现在文本框中。

  3. 若要生成并使用 SQL Server Compact Edition 3.5 版 数据库,请保持默认的连接字符串值。Visual Studio 将生成一个数据库文件,并将该文件放入到由 Application.UserAppDataPath 属性指示的目录中。

  4. 若要生成并使用一个加密的 SQL Server Compact 3.5 数据库,请将 password 和 encrypt database 值添加到连接字符串,如下面的示例所示。

    说明:

    确保指定一个强密码。您不能在生成数据库后更改密码。

    Data Source = |SQL/CE|;password=<password>;encrypt database=true
    
  5. 若要使用您自己的 SQL Server 数据库,请指定您自己的连接字符串。有关有效的连接字符串格式的信息,请参见 SQL Server 文档。此数据库不会自动生成。连接字符串必须引用现有的数据库,该数据库可以使用下面的 SQL 方法进行创建。

    CREATE TABLE ApplicationProperties (PropertyName nvarchar(256),
        PropertyValue nvarchar(256))
    CREATE TABLE UserProperties (PropertyName nvarchar(256),
        PropertyValue nvarchar(256))
    CREATE TABLE Roles (UserName nvarchar(256), 
        RoleName nvarchar(256))
    CREATE TABLE Settings (PropertyName nvarchar(256), 
        PropertyStoredAs nvarchar(1), PropertyValue nvarchar(2048))
    

使用自定义提供程序

默认情况下,客户端应用程序服务功能使用 System.Web.ClientServices.Providers 命名空间中的提供程序。当通过使用“项目设计器”的“服务”页配置应用程序时,将在 App.config 文件中添加对这些提供程序的引用。这些默认的提供程序将访问服务器上对应的提供程序。Web 服务通常配置为通过提供程序(例如 SqlMembershipProviderSqlRoleProvider)访问用户数据。

如果您想要使用自定义服务提供程序,通常的做法是更改服务器端的提供程序,以便这些提供程序可以影响访问服务器的所有客户端应用程序。但是,您也可以选择在客户端上使用非默认的提供程序。可以在项目的 App.config 文件中指定自定义身份验证或角色提供程序,如下面的过程所示。有关如何创建自定义身份验证或角色提供程序的信息,请参见实现成员资格提供程序实现角色提供程序。也可以通过修改项目的 Settings 类(在 C# 中作为 Properties.Settings.Default 访问,而在 Visual Basic 中作为 My.Settings 访问),使用自定义设置提供程序。有关更多信息,请参见应用程序设置结构

配置客户端应用程序服务以使用非默认提供程序

  1. 若要使用非默认的身份验证或角色服务提供程序,请首先通过使用“服务”页完成所有其他配置设置。

  2. 关闭“项目设计器”。这是必需的,因为即使您没有修改任何设置,“服务”页也会自动更新 App.config 文件。如果您按照本过程中的介绍手动修改 App.config 文件并返回到“服务”页,则将重置修改。

  3. 在“解决方案资源管理器”中双击 App.config。

    在文本编辑器中打开应用程序配置文件。

  4. 在 <membership> 或 <roleManager> 元素内找到 <providers> 元素。这些元素必须是 <system.web> 元素的子元素。<membership> 元素用于指定身份验证提供程序,而 <roleManager> 元素用于指定角色提供程序。

  5. 添加一个 <add> 元素,将其作为 <providers> 元素的子级。必须指定 name 和 type 属性,如下面的示例所示。type 属性值必须是程序集限定的类型名称。有关更多信息,请参见 Type.AssemblyQualifiedName程序集名称

    <add name="MyCustomRoleProvider" type="MyNamespace.MyRoleProvider, MyAssembly" />
    
  6. 修改 <membership> 或 <roleManager> 元素的 defaultProvider 属性,以指定在前一步骤中添加的 <add> 元素中的名称值。

    <roleManager enabled="true" defaultProvider="MyCustomRoleProvider">
    

请参见

任务

如何:使用客户端应用程序服务来实现用户登录和注销

如何:脱机使用客户端应用程序服务

演练:使用客户端应用程序服务

概念

客户端应用程序服务概述

项目设计器介绍

实现成员资格提供程序

实现角色提供程序

应用程序设置结构

参考

“项目设计器”->“服务”页

“高级服务设置”对话框

其他资源

客户端应用程序服务

为 SQL Server 创建和配置应用程序服务数据库