客户端应用程序服务概述
更新:2007 年 11 月
客户端应用程序服务提供从 Windows 窗体和 Windows Presentation Foundation (WPF) 应用程序对 ASP.NET AJAX 登录、角色和配置文件服务的简化访问。ASP.NET AJAX 应用程序服务包含在随 Visual Studio 2008 和 .NET Framework 3.5 版 一起提供的 Microsoft ASP.NET 2.0 AJAX Extensions 中。这些服务可让多个基于 Web 和 Windows 的应用程序共享来自单个服务器的用户信息和用户管理功能。
客户端应用程序服务包含一些客户端服务提供程序,这些提供程序插入到 Web 服务扩展性模型中以为基于 Windows 应用程序启用下列功能:
简单的客户端配置。通过使用 Visual Studio 项目设计器或在项目的 App.config 文件中指定客户端服务应用程序,可以启用并且配置登录、角色和配置文件服务。有关更多信息,请参见如何:配置客户端应用程序服务。
简单的可编程技术。在已启用并配置客户端应用程序服务之后,可以通过现有的 .NET Framework 2.0 成员资格、角色和应用程序设置类间接访问服务提供程序。还可以直接访问实现客户端应用程序服务的 .NET Framework 3.5 版 Service Pack 1 类。但是,在大多数情况下,不必直接进行访问。有关客户端应用程序服务类的更多信息,请参见本主题的“客户端应用程序服务类”一节。
脱机支持。基于 Windows 的应用程序通常需要在偶尔连接的环境中操作。当应用程序联机时,客户端服务提供程序将缓存从服务器检索的值,以便在应用程序服务脱机时使用。有关更多信息,请参见如何:脱机使用客户端应用程序服务。
与 Visual Studio 应用程序设置设计器集成。将设置添加到 Visual Studio 中的项目时,可以指定要通过客户端设置服务提供程序访问的设置。
以下几节将更详细地介绍这些功能。有关 ASP.NET AJAX 应用程序服务的更多信息,请参见 ASP.NET 应用程序服务概述。
身份验证
可以通过现有的 ASP.NET AJAX 身份验证服务,使用客户端应用程序服务来验证用户。可以通过使用 Windows 或 Forms 身份验证对用户进行验证。Windows 身份验证意味着,当用户登录计算机或域时,用户标识是一个由操作系统提供的标识。通常将对部署在公司 Intranet 上的应用程序使用 Windows 身份验证。Forms 身份验证意味着,必须在应用程序中包含登录控件,并将获取的凭据传递给身份验证提供程序。通常将对部署在 Internet 上的应用程序使用 Forms 身份验证。
若要验证用户,请调用 static Membership.ValidateUser 方法。此方法将访问为应用程序配置的客户端服务提供程序,并且返回一个 Boolean 值,用于指示用户是否为有效用户。有关更多信息,请参见如何:使用客户端应用程序服务来实现用户登录和注销。
使用 Windows 身份验证时,必须传递空字符串或 null 作为 ValidateUser 方法的参数。使用 Windows 身份验证时,此方法调用将始终返回 true。
使用 Forms 身份验证,ValidateUser 方法将返回一个值,用于指示远程服务是否已对用户进行身份验证。如果验证成功,则在本地硬盘上存储一个身份验证 Cookie。当访问角色和设置服务时,将使用此 Cookie 来确认验证。
使用 Forms 身份验证时,可以将用户名和密码传递给 ValidateUser 方法。还可以传递空字符串或 null 作为参数,以使用凭据提供程序。凭据提供程序是您在应用程序配置中提供和指定的一个类。凭据提供程序类必须实现 IClientFormsAuthenticationCredentialsProvider 接口,此接口只有一个名为 GetCredentials 的方法。通过使用凭据提供程序,您可以在多个应用程序之间共享一个登录对话框。有关更多信息,请参见如何:配置客户端应用程序服务。
当配置应用程序以对 Forms 身份验证使用凭据提供程序时,必须传递空字符串或 null 作为 ValidateUser 方法的参数。该服务提供程序将调用 IClientFormsAuthenticationCredentialsProvider.GetCredentials 方法实现。通常,需要实现此方法以显示一个对话框并返回填充的 ClientFormsAuthenticationCredentials 对象。
有关身份验证的更多信息,请参见 ASP.NET 身份验证。有关如何设置 ASP.NET AJAX 身份验证服务的信息,请参见将 Forms 身份验证用于 ASP.NET AJAX。
角色
可以使用客户端应用程序服务从现有的 ASP.NET AJAX 角色服务中检索角色信息。若要确定当前已经过身份验证的用户是否属于某个特定的角色,请调用从 static Thread.CurrentPrincipal 属性中检索的 IPrincipal 引用的 IsInRole 方法。IsInRole 方法采用角色名称作为参数,并且返回一个 Boolean 值,用于指示当前用户是否属于指定的角色。如果用户未通过身份验证或者不属于指定的角色,则此方法返回 false。
有关更多信息,请参见如何:使用客户端应用程序服务访问用户角色。有关如何设置 ASP.NET AJAX 角色服务的信息,请参见通过 ASP.NET AJAX 使用角色信息。
设置
可以使用客户端应用程序服务从现有的 ASP.NET AJAX 配置文件服务中检索用户应用程序设置。客户端应用程序服务 Web 设置功能与 .NET Framework 2.0 中提供的应用程序设置功能集成在一起。若要检索 Web 设置,首先应使用 Visual Studio 项目设计器的“设置”选项卡为项目生成一个 Settings 类(在 C# 中作为 Properties.Settings.Default 进行访问,而在 Visual Basic 中作为 My.Settings 进行访问)。在“设置”选项卡上,可以使用“加载 Web 设置”按钮检索 Web 设置,并将这些设置添加到生成的 Settings 类中。可以使用配置为供所有已经过身份验证的用户或所有匿名用户使用的 Web 设置。
有关更多信息,请参见如何:使用客户端应用程序服务访问用户设置。有关应用程序设置的更多信息,请参见应用程序设置概述。有关如何实现您自己的设置类而不是在 Visual Studio 中生成一个设置类的信息,请参见如何:创建应用程序设置。有关如何设置 ASP.NET AJAX 配置文件服务的信息,请参见将配置文件信息与 ASP.NET AJAX 一起使用。
客户端应用程序服务类
下表描述了用于实现客户端应用程序服务功能的类。
仅使用主要身份验证、角色和设置功能的应用程序不必直接访问这些类。相反,通过使用前面几节介绍的应用程序配置和 API,这类应用程序将间接访问客户端应用程序服务提供程序。可直接访问这些类以实现其他功能,例如,用户的注销和脱机功能。
说明: |
---|
所有客户端应用程序服务 API 都是同步的。客户端应用程序服务不直接支持异步行为。 |
客户端应用程序服务提供程序可实现或扩展标准的 .NET Framework 2.0 类型,但不会实现由这些类型定义的每个成员和功能。例如,不能使用客户端应用程序服务提供程序来实现用于创建新用户和管理角色成员资格的用户管理应用程序。若要实现此功能,则当前必须使用 Web 应用程序和服务器端代码。若要确定未实现哪些成员,请参见可以从此表中的链接访问的参考文档。
类 |
说明 |
---|---|
此类管理用于 Forms 身份验证的用户标识和身份验证 Cookie。 直接访问此类的主要原因是为了调用 RevalidateUser 方法,此方法以无提示方式重新验证用户(例如,当从脱机模式切换到联机模式时)。 通过使用 Forms 身份验证对用户进行验证身份之后,可以通过从 static Thread.CurrentPrincipal 属性检索的 IPrincipal 引用的 Identity 属性检索此类的实例。 |
|
此类管理用户角色。 此类中不存在任何不能间接访问的成员。但是,在验证用户身份后,可以通过 static Thread.CurrentPrincipal 属性访问此类的实例。 |
|
此类提供可用于将应用程序切换到脱机模式的 static IsOffline 属性。有关更多信息,请参见如何:脱机使用客户端应用程序服务。 |
|
此类表示用户凭据。 当实现 IClientFormsAuthenticationCredentialsProvider 接口时,将仅使用此类作为 GetCredentials 方法的返回值类型。 |
|
此类管理对用于 Forms 身份验证的远程身份验证服务的访问。 直接访问此类的主要原因是为了使用其 Logout 和 UserValidated 成员,MembershipProvider 基类未实现这两个成员。还可以通过使用 ServiceUri 属性以编程方式设置服务位置。 可以通过 static Membership.Provider 属性检索此类的实例。 |
|
此类管理 Windows 身份验证。 直接访问此类的主要原因是为了调用其 Logout 方法。用户在注销之后,对于 Windows 仍将保持已经过身份验证状态,但不能访问远程应用程序服务。 可以通过 static Membership.Provider 属性检索此类的实例。 |
|
此类管理对远程角色服务的访问。 访问此类的主要原因是为了调用其 ResetCache 方法。如果应用程序配置为使用非零的角色服务缓存超时值,则此方法会有用。有关更多信息,请参见如何:配置客户端应用程序服务。还可以通过使用 ServiceUri 属性以编程方式设置服务位置。 可以通过 static Roles.Provider 属性检索此类的实例。 |
|
此类管理对远程 Web 设置服务的访问。 访问此类的主要原因是为了处理 SettingsSaved 事件。还可以通过使用 ServiceUri 属性以编程方式设置服务位置。 |
|
此接口为应用程序提供间接方式以获取用于验证的用户凭据,如本主题前面的“身份验证”一节中所述。有关更多信息,请参见如何:配置客户端应用程序服务。 |
|
此类提供了一个可在 ClientSettingsProvider.SettingsSaved 事件处理程序中使用的 FailedSettingsList 属性。 |
|
此类提供了一个可在 UserValidated 事件处理程序中使用的 UserName 属性。 |