SharePoint 2010 ECM Code Sample: Publishing Cache Services and Silverlight
Use this SharePoint 2010 code sample to learn about the publishing cache services and Silverlight controls.
Applies to: SharePoint Server 2010
In this article
PublishingCacheRESTService Project
The Role of the SilverlightNavigationControl in SharePoint Publishing Cache Services
The Role of SilverlightContentQuery in SharePoint Publishing Cache Services
Building and Running the Publishing Cache Services and Silverlight Sample
The Publishing Cache Services and Silverlight sample in the PublishingCacheServicesAndSilverlightControls.zip file in the path C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples folder includes several interrelated sample projects. Each one is a separate project in the Microsoft Visual Studio 2010 solution named PublishingCacheServiceAndSilverlightControls. The projects are described in Table 1.
Download the SharePoint 2010 sample code described in this topic from Code Gallery.
Table 1. Publishing cache service and Silverlight controls projects
Project |
Description |
---|---|
PublishingCacheRESTService |
A Windows Communication Foundation (WCF) service that is implemented as a Microsoft SharePoint Server 2010 project that includes several REST methods for querying for data from the server’s cross-list query cache. The cross-list query cache is the same cached data store used by the Content By Query Web Part (CQWP), the server’s Global Navigation Provider, the server’s Current Navigation Provider, and the server’s Combined Navigation Provider (which are all used by the default navigation features). All of these data stores are cached in memory on SharePoint Server 2010 front-end servers. In situations where users are mostly or always reading, they efficiently get navigation data and site content. |
SilverlightNavigationControl |
A Silverlight application that renders navigation data returned by the PublishingCacheRESTService into a navigation control. |
SilverlightContentQuery |
A Silverlight application that displays a table that shows a list of results based on a SharePoint Server 2010 cross-list query returned by the PublishingCacheRESTService in table format. |
PublishingCacheRESTService Project
This project is implemented as a single WCF service that includes several operations.
GetGlobalNav, GetCurrentNav, and GetCombinedNav Methods
The GetGlobalNav, GetCurrentNav, and GetCombinedNav methods are implemented by a single helper method, called getNav. getNav takes as input the appropriate PortalSiteMapProvider object delivered by default in SharePoint Server 2010.
The getNav method iterates through all of the PortalSiteMapNode objects from the current URL to all of its descendents in the provider, then serializes them into an XML fragment. The XML fragment includes the Title, Description, and URL for each PortalSiteMapNode object.
GetDefaultContentQuery and doCustomContentQuery Methods
The GetDefaultContentQuery method and the doCustomContentQuery method are implemented by the same underlying method: doCustomContentQuery. The doCustomContentQuery method takes as inputs all of the parameters used to invoke a cached cross-list query by way of the CrossListQuery class, and returns an XML fragment representing the results of the cached query.
The getDefaultContentQuery method takes no parameters, and simply performs and returns a cross list query with a hard-coded set of parameters. It is mainly intended to be used as a template for creating other hard-coded query services.
Deploying and Using the WCF Service by Way of a SharePoint Farm-Scoped Feature
This project deploys the WCF service by way of a farm-scoped SharePoint Server 2010 feature, which is a capability made possible by SharePoint Server 2010 integration with Visual Studio 2010.
The service is deployed into the ISAPI folder in SharePoint Server 2010, which is accessed by way of the _vti_bin virtual folder URL. Therefore, the format of the URL to the service is http://<server>/<webUrl>/_vti_bin/PublishingCache.svc.
After the service is deployed, access its methods with the URLs and parameters as shown in Table 2.
Table 2. WCF service URLs and parameters
Service |
Endpoint-Relative URL |
HTTP Method |
Header |
---|---|---|---|
getGlobalNav |
/GlobalNav |
GET |
Not applicable. |
getCurrentNav |
/CurrentNav |
GET |
Not applicable. |
getCombinedNav |
/CombinedNav |
GET |
Not applicable. |
getDefaultContentQuery |
/ContentQuery |
GET |
Not applicable. |
The doCustomContentQuery method takes the parameters listed in Table 3.
Table 3. doCustomContentQuery parameter values
Parameter |
Value |
---|---|
Endpoint-Relative URL |
/ContentQuery |
HTTP Method |
POST |
Headers |
All headers are optional.
|
Request Body |
The Collaborative Application Markup Language (CAML) for the query to execute. That is, the value used as the Query value in the CrossListQueryInfo object. |
Body Content Type |
Text/plain. |
The Role of the SilverlightNavigationControl in SharePoint Publishing Cache Services
This Silverlight application fetches data from the NavigationProvider object by using the PublishingCacheRESTService, and renders it into a two-level navigation display. The top level shows the current location and its direct descendants, displaying the Title for each site (and the Description of each site is shown as a tooltip). When the user mouses over any of the nodes in the top level, the bottom level is populated with the nodes for the children of the moused-over node.
Clicking any node in the top level or the bottom level causes the browser to navigate to the URL of the selected node.
Deploying and Using the SilverlightNavigationControl
Build the project and deploy the resulting .xap file to a location on the server running SharePoint Server 2010. You can use the application in two standard ways: by using the Silverlight Web Part, or by manually including an <object> tag in the HTML markup of a SharePoint Server 2010 page. Most commonly, the SilverlightNavigationControl includes the application in the master page for a SharePoint Server 2010 site so that it appears in a consistent location for all pages that use that master page.
Table 4. cacheServiceUri parameter values
Parameter Name |
Required |
Value |
---|---|---|
cacheServiceUri |
Yes |
The URL to the PublishingCacheRESTService that returns the requested data from the NavigationProvider object For the navigation provider to display site hierarchy relative to the current page, the URL should be specified as a relative URL (for example, _vti_bin/PublishingCache.svc). For the navigation provider to display absolute hierarchy (for the navigation provider to always display the hierarchy relative to a specific loction), the URL should be specified as an absolute URL (for example, https://server/_vti_bin/PublishingCache.svc) or a server-relative URL (for example, /_vti_bin/PublishingCache.svc). |
The Role of SilverlightContentQuery in SharePoint Publishing Cache Services
This application displays cross-list query data and translates query data results into user-specific data with Microsoft Translator HTTP services.
Deploying and Using the SilverlightContentQuery
Based on its initiation parameters as shown in Table 5, this application uses the doCustomContentQuery method of the PublishingCacheRESTService to execute a cached cross-list query, and then displays the results in a table format. The first column in each result row is a clickable hyperlink—the URL for each row is a column value for each item, as specified in the initiation parameters.
By using the Microsoft Translator services, the application translates the displayed data to any of the languages available in the Translate into drop-down list. The list is dynamically populated based on the list of languages supported by Microsoft Translator.
You can use the application two standard ways: by using the Silverlight Web Part, or by manually including an <object> tag in the HTML markup of a SharePoint Server 2010 page.
Table 5. SilverlightContentQuery initiation parameters
Parameter Name |
Required |
Usage |
Default Values (Non-Required Parameters Only) |
---|---|---|---|
TranslatorAppId |
Yes |
An AppId for the Microsoft Translator service. To obtain an AppId, see the MSDN article Getting Started with Microsoft Translator [https://msdn.microsoft.com/en-us/library/dd575235.aspx]. |
Not applicable. |
cacheServiceUri |
Yes |
The URL to the doCustomContentQuery method of the PublishingCacheRESTService (for example, https://server/PublishingCache.svc/ContentQuery) Specify the URL as relative, server-relative, or absolute. |
Not applicable. |
Query |
Yes |
The Collaborative Application Markup Language (CAML) for the query to execute. See the description of the Request Body parameter of doCustomContentQuery, in Table 3. |
Not applicable |
ViewFields |
Yes |
A semicolon–separated list of fields to display. See the parameter descriptions of the doCustomContentQuery method, in Table 3. |
Not applicable. |
UrlField |
No |
The field containing the URL that should be navigated to when the user clicks the row in the displayed results table. |
URL |
RowLimit |
No |
The number of rows to return. See the description of the doCustomContentQuery parameters, in Table 3. |
Not applicable. The service provides a default value, if value is not specified. |
Webs |
No |
The scope of the query. |
Not applicable. The service provides a default value, if value is not specified. |
Lists |
No |
The List Template value of the lists to include in the query. |
Not applicable. The service provides a default value, if value is not specified. |
WebUrl |
No |
The site-collection––relative URL of the Web that is used for the query. |
Not applicable. The service provides a default value, if value is not specified. |
ShowHeaderRow |
No |
If set to true, then show the column names of ViewFields as a header row in the results table; otherwise, false. |
true |
Note
For descriptions of many parameters, see their descriptions in the doCustomContentQuery method section.
Building and Running the Publishing Cache Services and Silverlight Sample
You can test this project on your development or test site by taking the following steps.
Building the Sample
The information in this section can be used with any project that uses a WCF REST service. Running the sample requires that you first make the WCF REST service host deployable to SharePoint Server 2010 by using the SharePoint Server 2010 integration with WCF and Visual Studio 2010.
To set up the WCF REST service to be host-deployable in SharePoint Server
Create your WCF Service in a project of type Empty SharePoint Project. This project enables your service to be automatically packaged and deployed to SharePoint Server 2010 as a solution.
In your project, add a reference to the Microsoft.SharePoint.Client.ServerRunTime.dll file.
Manually add the file reference by browsing to the file. In Visual Studio 2010, open the Add Reference dialog box, click the Browse tab, and then browse to the C:\Windows\assembly\GAC_MSIL\Microsoft.SharePoint.Client.ServerRuntime\ folder.
Edit the .svc file. Change the Factory attribute for your service to the new SharePoint factor for hosting WCF services: Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c".
In Visual Studio 2010, open the *.sln file. In the Properties pane of Visual Studio 2010, change the Site URL value to be the absolute address of your development test site. For example, http://MyDevServer/. Ensure that you include the closing forward slash.
Instead of creating a separate assembly reference, change the Service attribute to include a reference to the project assembly. In SharePoint Server 2010, the reference will fill in when the solution is deployed. Specifically, include the $SharePoint.Project.AssemblyFullName$ reference.
Remove the Assembly element, if the .svc file already contains an Assembly element.
Add the ISAPI-mapped folder to your project and move files into it. In Visual Studio 2010, right-click the project, and then click Add. Click SharePoint Mapped Folder, and then select the ISAPI folder.
Move the .svc file and the .cs code-behind file to the ISAPI-mapped folder in the project.
Update the .csproj file. Click the .csproj file and, when prompted, select a text editor such as Notepad to open it.
Add <TokenReplacementFileExtensions>svc</TokenReplacementFileExtensions> to the PropertyGroup element.
Running the Sample
After the solution is built and deployed, the WCF REST service queries data from the cross-list query cache of the server running SharePoint Server 2010. It then renders the results in a Silverlight navigation control, and can display the results in a table based on the results of a cross-list query returned by the PublishingCacheRESTService.
See Also
Concepts
Enterprise Content Management (ECM) Code Samples for SharePoint Server 2010
Object Caching in SharePoint Server 2010 (ECM)
How to: Customize Navigation in SharePoint Server 2010 (ECM)
Customizing Navigation Controls and Providers in SharePoint Server 2010 (ECM)