Silverlight 对 Web 应用程序的请求的生命周期

上次修改时间: 2010年4月7日

适用范围: SharePoint Foundation 2010

本文内容
情景示例
事件序列
请求生命周期图形外观

本主题概述 Silverlight 应用程序访问 SharePoint Foundation Web 应用程序的数据时发生的主要事件和操作。Silverlight 应用程序与 SharePoint Foundation Web 应用程序位于不同的域,但在 Web 部件中向 SharePoint Foundation 用户公开。由于 Silverlight 应用程序是外部应用程序,本主题还提供了 Silverlight 跨域数据访问工作示例。

情景示例

我们将通过下面的具体示例讨论对 SharePoint Foundation 的 Silverlight 请求的生命周期。

SharePoint Foundation 服务器场位于 //www.contoso.com/Internal/Sites/ 中。在该服务器场中,/Personnel/default.aspx 是 Personnel 部门的主页。此页包含一个 Silverlight Web 部件 (SilverlightWebPart)。已为包含 Web 应用程序的 Web 服务启用了外部应用程序提供程序 (EAP)。这样,就可以使用外部应用程序 XML 来注册 Silverlight Web 部件了。此 XML 除了提供其他功能外,还将 Silverlight 应用程序指定为 http://www.fabrikam.com/Applications/PeopleBrowser.xap 文件,这表示 Silverlight 应用程序与 SharePoint Foundation Web 应用程序位于不同的域中。用户可以使用 Silverlight 应用程序来查找和显示 Web 应用程序中包含的网站上 SharePoint Foundation 列表中的员工信息。Silverlight 应用程序中的代码通过调用托管客户端对象模型的特殊版本来查询 SharePoint Foundation 数据。(另请参阅使用 Silverlight 对象模型。)

由于 .xap 文件所在的服务器位于要查询其数据的 Web 应用程序的外部,此方案通常需要授予外部 Fabrikam 服务器对 Contoso SharePoint Foundation 服务器的完全访问权限。但是,Silverlight 跨域数据访问 (Silverlight CDA) 提供了一种方法,可将这些调用转变为对 SharePoint Foundation 服务器对象模型的权限约束调用。

事件序列

这些事件是数据的 Web 部件和 Silverlight 请求的生命周期中的主要事件。

  1. 用户导航到 //www.contoso.com/Internal/Sites/Personnel/default.aspx 时,该页将在浏览器中打开。

  2. Silverlight Web 部件加载、读取其 ApplicationXml 属性以查找 Silverlight 应用程序的 URL,并向 http://www.fabrikam.com/Applications/PeopleBrowser.xap 发出请求。该请求直接从用户计算机发向 www.fabrikam.com 服务器,不经过 SharePoint Foundation 前端 Web 服务器。

  3. 外部应用程序 XML 的某些信息通过 Web 部件传递到 Silverlight 应用程序。最重要的信息项包括:

    • 应用程序主体的用户名。在 SharePoint Foundation Web 应用程序中,应用程序主体是具有某些属性集的 SPUser 对象,以便它可以表示应用程序而不是真正的人员。同任何其他用户一样,应用程序主体被授予了一组权限。Silverlight 应用程序只能在导航到该网页的真正用户 应用程序主体的权限范围内访问数据和执行操作。有关应用程序主体的详细信息,请参阅如何:创建应用程序主体用户

    • www.fabrikam.com 域上的 URL 是一种特殊类型的 HTTP 请求处理程序,称为请求转发器。有关创建这种处理程序的详细信息,请参阅如何:为外部应用程序创建 HTTP 请求转发器

    • 请求令牌。Silverlight 应用程序会将此令牌的副本包含在对 SharePoint Foundation Web 应用程序的所有请求中。Web 应用程序通过请求令牌中包含的信息(例如,导航到包含 Web 部件的网页的真正用户的 ID)可以确定应该允许 Silverlight 应用程序具有哪些有效权限。为了防止篡改,令牌将包含服务器哈希值,该值是在 Web 部件的 CreateChildControls 方法运行时创建的。哈希由两个输入值组成:即令牌前缀(该值中包括令牌中哈希值之前的所有内容)和秘密内部字节数组(用作哈希算法的"salt")。首次创建表示 Web 服务的 SPWebService 对象时会创建 salt,每次更新该对象时都会重新创建 salt。

      备注

      如果 Silverlight 应用程序所在的服务器还需要确保从 SharePoint Foundation Web 应用程序检索的结果不被篡改,还可以在请求令牌中包含往返传递的客户端哈希。有关详细信息,请参阅如何:创建自定义外部应用程序提供程序

  4. Silverlight 应用程序加载,其 Startup 事件处理程序调用 Init(IDictionary<String, String>) 并传递给它一些初始化信息,包括:

    • 请求转发器的 URL。

    • 请求令牌,该令牌将添加到 Silverlight 应用程序发出的每个请求的标头。

  5. 当用户在用于初始化 SharePoint Foundation 数据请求的 Silverlight UI 中执行操作时,Silverlight 应用程序中的查询构造代码会调用托管客户端对象模型的特殊 Silverlight 版本。此代码必须引用特殊的 Silverlight 客户端程序集 Microsoft.SharePoint.Client.Silverlight.dll 和 Microsoft.SharePoint.Client.Silverlight.Runtime.dll。有关 Silverlight 客户端对象模型的详细信息,请参阅使用 Silverlight 对象模型Silverlight 部署

  6. 查询代码的末尾是对 ExecuteQuery() 方法的调用。通常,此方法将查询传递到 SharePoint Foundation 前端 Web 服务器,但 Silverlight 不会发出直接的跨域请求。由于在启动时使用请求转发器的 URL 对 Silverlight 应用程序进行了初始化,因此 Silverlight 应用程序会将查询和 SharePoint Foundation Web 应用程序的 URL 一起提交给请求转发器。

  7. 请求转发器随后会将查询作为服务器代码发送给前端 Web 服务器,还包括应用程序主体的用户凭证和包括服务器哈希的请求令牌。

  8. SharePoint Foundation 前端 Web 服务器会验证服务器哈希,并验证应用程序主体和导航到 Web 部件页的真正用户都有权执行查询代码可以执行的所有操作。

  9. 如果服务器哈希和权限通过验证,前端 Web 服务器将执行代码并将数据返回 Silverlight 应用程序。

请求生命周期图形外观

图 1 显示来自 Silverlight 应用程序的请求的生命周期中的主要事件。

图 1:Silverlight 请求的生命周期

事件的 Silverlight 请求生命周期链