示例:发布缓存服务和 Silverlight

上次修改时间: 2015年3月9日

适用范围: SharePoint Server 2010

本文内容
PublishingCacheRESTServer
SilverlightNavigationControl
SilverlightContentQuery
生成并运行示例

在 C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples 文件夹中,PublishingCacheServicesAndSilverlightControls.zip 文件中的示例包含多个相关的示例项目。每个项目都是名为 PublishingCacheServiceAndSilverlightControls 的 Microsoft Visual Studio 2010 解决方案中的独立项目。这些项目如表 1 中所述。

表 1. 发布缓存服务和 Silverlight 控件项目

项目

说明

PublishingCacheRESTService

作为 Microsoft SharePoint Server 2010 项目实现的 Windows Communication Foundation (WCF) 服务,其中包含多个用于查询服务器的跨列表查询缓存中数据的 REST 方法。跨列表查询缓存就是内容查询 Web 部件 (CQWP)、服务器的全局导航提供程序、服务器的当前导航提供程序和服务器的组合导航提供程序(均由默认导航功能使用)所使用的缓存数据存储。

所有这些数据存储都缓存在 SharePoint Server 2010 前端服务器上的内存中。在用户经常或始终读取的情况下,他们可有效地获取导航数据和网站内容。

SilverlightNavigationControl

Silverlight 应用程序,呈现 PublishingCacheRESTService 返回到导航控件中的导航数据。

SilverlightContentQuery

Silverlight 应用程序,它显示一个表,其中以表格格式显示基于 PublishingCacheRESTService 返回的 SharePoint Server 2010 跨列表查询的结果列表。

PublishingCacheRESTServer

此项目是作为包含多个操作的单个 WCF 服务实现的。

GetGlobalNav、GetCurrentNav 和 GetCombinedNav 方法

GetGlobalNav、GetCurrentNav 和 GetCombinedNav 由名为 getNav 的单个帮助程序方法实现。getNav 接受默认情况下在 SharePoint Server 2010 中提供的相应 PortalSiteMapProvider 对象作为输入。

getNav 方法循环访问从当前 URL 到提供程序中其所有子代的 PortalSiteMapNode 对象,然后将其序列化为 XML 片段。XML 片段包括每个 PortalSiteMapNode 对象的标题、说明和 URL。

GetDefaultContentQuery 和 doCustomContentQuery

GetDefaultContentQuery 方法和 doCustomContentQuery 方法由同一基础方法 (doCustomContentQuery) 实现。doCustomContentQuery 方法将用于通过 CrossListQuery 类调用缓存跨列表查询的所有参数作为输入,并返回表示缓存查询结果的 XML 片段。

getDefaultContentQuery 方法不采用任何参数,仅执行并返回包含一组硬编码参数的跨列表查询。它主要用作用于创建其他硬编码的查询服务的模板。

部署和使用 WCF 服务

此项目通过服务器场范围内的 SharePoint Server 2010 功能部署 WCF 服务,通过将 SharePoint Server 2010 与 Visual Studio 2010 集成可实现此功能。

此服务部署到 SharePoint Server 2010 的"ISAPI"文件夹中,可通过"_vti_bin"虚拟文件夹 URL 访问它。因此,指向此服务的 URL 格式是 http://<server>/<webUrl>/_vti_bin/PublishingCache.svc。

完成该服务部署后,使用表 2 中所示的 URL 和参数访问其方法。

表 2. WCF 服务的 URL 和参数

服务

端点相对 URL

HTTP 方法

标头

getGlobalNav

/GlobalNav

GET

不适用。

getCurrentNav

/CurrentNav

GET

不适用。

getCombinedNav

/CombinedNav

GET

不适用。

getDefaultContentQuery

/ContentQuery

GET

不适用。

doCustomContentQuery 方法采用表 3 中列出的参数。

表 3. doCustomContentQuery 参数值

参数

端点相对 URL

/ContentQuery

HTTP 方法

POST

标头

所有标头都是可选的。

  1. ViewFields:要显示的以分号分隔的字段列表。(默认值:Title;FileRef)

  2. RowLimit:要返回的行数。(默认值:50)

  3. Web:查询的范围。(默认值:递归)

  4. 列表:要包含在查询中的列表的列表模板值。(默认值:850)

  5. WebUrl:查询的网站集相对 URL。(默认值:"/")

请求正文

要执行的查询的 协作应用程序标记语言 (CAML)。即,用作 CrossListQueryInfo 对象中查询值的值。

正文内容类型

文本/纯文本。

SilverlightNavigationControl

此 Silverlight 应用程序通过 PublishingCacheRESTService 从 NavigationProvider 对象中提取数据,并采用两层导航显示呈现该数据。顶层指示当前的位置及其直接子代,并显示每个网站的标题(每个网站的说明显示为工具提示)。当用户鼠标滑过顶层中的任何节点时,将用鼠标滑过的节点的子级填充最底层节点。

单击顶层或底层中的任何节点,可将浏览器导航到选定节点的 URL。

部署和使用 SilverlightNavigationControl

构建项目并将成的 .xap 文件部署到运行 SharePoint Server 2010 的服务器上的位置。可以采用两种标准方法使用应用程序:使用 Silverlight Web 部件或手动将 <object> 标记包含在 SharePoint Server 2010 页面的 HTML 标记中。最常见的情况是,SilverlightNavigationControl 将应用程序包含在 SharePoint Server 2010 网站的母版页中,使其显示在使用该母版页的所有页面的同一位置中。

表 4. cacheServiceUri 参数值

参数名称

是否必需

cacheServiceUri

NavigationProvider 对象返回请求数据的 PublishingCacheRESTService 的 URL

对于显示相对于当前页的网站层次结构的导航提供程序,应将 URL 指定为相对 URL(如 _vti_bin/PublishingCache.svc)。

对于显示绝对层次结构的导航提供程序(为使导航提供程序始终显示相对于特定位置的层次结构),应将 URL 指定为绝对 URL(如 https://server/_vti_bin/PublishingCache.svc)或相对于服务器的 URL(如 /_vti_bin/PublishingCache.svc)。

SilverlightContentQuery

此应用程序显示跨列表查询数据,并使用 Microsoft Translator HTTP 服务将查询数据结果转换为用户特定的数据。

部署和使用 SilverlightContentQuery

基于表 5 中显示的启动参数,此应用程序使用 PublishingCacheRESTService 的 doCustomContentQuery 方法执行缓存跨列表查询,然后以表格格式显示查询结果。每个结果行的第一列为可单击的超链接 — 每行的 URL 是每个项目的列值(在启动参数中指定)。

通过使用 Microsoft Translator 服务,此应用程序将显示的数据转换为"转换为"下拉列表中可用的任何语言。可基于 Microsoft Translator 支持的语言列表动态填充该列表。

可以采用两种标准方法使用此应用程序:使用 Silverlight Web 部件或手动将 <object> 标记包含在 SharePoint Server 2010 页的 HTML 标记中。

表 5. SilverlightContentQuery 启动参数

参数名称

是否必需

用法

默认值(仅限于非必需参数)

TranslatorAppId

Microsoft Translator 服务的 AppId。若要获取 AppId,请参阅 MSDN 文章 Getting Started with Microsoft Translator[https://msdn.microsoft.com/zh-cn/library/dd575235.aspx]。

不适用。

cacheServiceUri

指向 PublishingCacheRESTService 的 doCustomContentQuery 方法的 URL(如 https://server/PublishingCache.svc/ContentQuery)

将 URL 指定为相对的、相对于服务器的或绝对的。

不适用。

Query

要执行的查询的 协作应用程序标记语言 (CAML)。请参阅表 3 中关于 doCustomContentQuery 的 Request Body 参数的说明。

不适用

ViewFields

要显示的以分号分隔的字段列表。请参阅表 3 中关于 doCustomContentQuery 方法的参数说明。

不适用。

UrlField

该字段包含用户单击显示的结果表中的行时应导航到的字段。

URL

RowLimit

要返回的行数。请参阅表 3 中 doCustomContentQuery 参数的说明。

不适用。如果未指定值,则此服务提供默认值。

Webs

查询范围。

不适用。如果未指定值,则此服务提供默认值。

Lists

要包含在查询中的列表的列表模板值。

不适用。如果未指定值,则此服务提供默认值。

WebUrl

用于查询的 Web 的网站集相对 URL。

不适用。如果未指定值,则此服务提供默认值。

ShowHeaderRow

如果设置为 TRUE,则 ViewFields 列名称显示为结果表中的标题行;否则为 false。

TRUE

备注

有关许多参数的说明,请参阅 doCustomContentQuery 方法一节中的说明。

生成并运行示例

在开发或测试网站上,可采用下列步骤测试此项目。

生成示例

本节中的信息可用于使用 WCF REST 服务的任何项目。运行示例要求首先通过 SharePoint Server 2010 与 WCF 和 Visual Studio 2010 的集成,使 WCF REST 服务主机可供 SharePoint Server 2010 部署。

设置 WCF REST 服务,使其在 SharePoint Server 中是主机可部署的

  1. 在空白 SharePoint 项目类型的项目中创建 WCF 服务。此项目使服务能够自动打包并作为解决方案部署到 SharePoint Server 2010 中。

    在您的项目中,添加对 Microsoft.SharePoint.Client.ServerRunTime.dll 文件的引用。

  2. 通过浏览到该文件,手动添加文件引用。在 Visual Studio 2010 中,打开"添加引用"对话框,单击"浏览"选项卡,然后浏览到 C:\Windows\assembly\GAC_MSIL\Microsoft.SharePoint.Client.ServerRuntime\ 文件夹。

  3. **编辑 .svc 文件。**将服务的 Factory 属性更改为承载 WCF 服务的新 SharePoint 因子:Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"。

  4. 在 Visual Studio 2010 中,打开 *.sln 文件。在 Visual Studio 2010 的"属性"窗格中,将网站 URL 值更改为开发测试网站的绝对地址。例如,http://MyDevServer/。确保包含结束左斜线。

    更改服务属性以包含对项目程序集的引用,而不是创建单独的程序集引用。在 SharePoint Server 2010 中,该引用将填写何时部署解决方案。具体而言,就是包含 $SharePoint.Project.AssemblyFullName$ 引用。

    如果 .svc 文件已包含程序集元素,则删除程序集元素。

  5. 将"ISAPI"映射文件夹添加到您的项目中,并将文件移动到该文件夹中。在 Visual Studio 2010 中,右键单击该项目,然后单击"添加"。单击"SharePoint 映射文件夹",然后选择"ISAPI"文件夹。

    将 .svc 文件和 .cs 代码隐藏文件移动到 项目中的 ISAPI 映射文件夹。

  6. **更新 .csproj 文件。**单击 .csproj 文件,当出现提示时,选择记事本并将其打开。

    将 <TokenReplacementFileExtensions>svc</TokenReplacementFileExtensions> 添加到 PropertyGroup 元素中。

运行示例

在构建和部署该解决方案后,WCF REST 服务从运行 SharePoint Server 2010 的服务器的跨列表查询缓存中查询数据。然后,它在 Silverlight 导航控件中呈现查询结果,并将结果显示在基于 PublishingCacheRESTService 返回的跨列表查询结果的表中。

请参阅

概念

企业内容管理示例

对象缓存

如何:自定义导航

自定义导航控件和提供程序