Partager via


FederatedResultsDatasource Class

Represents the data source control used to retrieve the search results for the Federated Results Web Part.

Inheritance Hierarchy

System.Object
  System.Web.UI.Control
    System.Web.UI.DataSourceControl
      Microsoft.Office.Server.Search.WebControls.SearchResultsBaseDatasource
        Microsoft.Office.Server.Search.WebControls.FederatedResultsDatasource

Namespace:  Microsoft.Office.Server.Search.WebControls
Assembly:  Microsoft.Office.Server.Search (in Microsoft.Office.Server.Search.dll)

Syntax

'Declaration
<AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
<SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel := True)> _
<AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
<SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel := True)> _
Public Class FederatedResultsDatasource _
    Inherits SearchResultsBaseDatasource
'Usage
Dim instance As FederatedResultsDatasource
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel = true)]
[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel = true)]
public class FederatedResultsDatasource : SearchResultsBaseDatasource

Remarks

This is the data source that the FederatedResultsWebPart class uses to gather data. It is the intermediary between the consuming FederatedResultsWebPart object and the FederatedResultsDataSourceView object. It contains similar properties to the FederatedResultsWebPart class and passes these configuration values to FederatedResultsDataSourceView class.

Examples

The following code example shows how to set the user credentials on the Federated Results Web Part data source for a custom Federated Results Web Part. You must set user credentials in this way for federated locations that are configured to use any of the per-user authentication types, with the exception of the Kerberos protocol.

Note

This code example is a simplified version of a custom Federated Results Web Part; it does not include the full code needed to prompt the user for their credentials.

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using Microsoft.Office.Server.Search.WebControls;
using Microsoft.Office.Server.Search.Administration;
using Microsoft.Office.Server.Search.Query;
using System.Security;
using System.Web.UI.HtmlControls;
using Microsoft.SharePoint;
using System.Xml.Serialization;
using System.Xml.XPath;

namespace CustomFedSearchSample
{
    [XmlRoot(Namespace = "CustomFederatedResultsWebPart")]
    public class SampleFederatedResultsWebPart : FederatedResultsWebPart, IPostBackEventHandler
    {
        protected override void OnLoad(EventArgs e)
        {
            try
            {
                this.ShowMessages = false;
                base.OnLoad(e);
            }
            catch (Exception ex)
            {
                string x = ex.Message.ToString();
            }
        }

        protected override void ConfigureDataSourceProperties()
        {
            ICredentials userCredentials = null;
            base.ConfigureDataSourceProperties();
            FederatedResultsDatasource fedResultsDS = this.DataSource as FederatedResultsDatasource;
            LocationConfiguration locationConfig = null;

            if (fedResultsDS.Location != null)
            {
                string locationName = fedResultsDS.Location;
                long lastupdate;
                bool crawl;
                SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
                LocationConfiguration[] locationConfigs = proxy.GetLocationConfigurations(out lastupdate, out crawl);
                foreach (LocationConfiguration locConfig in locationConfigs)
                {
                    if (locConfig.InternalName.Equals(locationName))
                    {
                        locationConfig = locConfig;
                        break;
                    }
                } 

                switch (locationConfig.AuthInfo.AuthenticationType)
                {
                    case FederationAuthType.PerUserFormsAuthentication:
                        //Replace FormsLogonURL with the URL to the Forms logon page.
                        string logonURL = "http://FormsLogonURL";
                        //Replace FormMethod with post or get.
                        string logonMethod = "FormMethod";
                        Dictionary<string, string> logonInput = new Dictionary<string, string>();
                        /*
                         *Code to compute logon input names and values for forms
                         *logon page, and add them to the Dictionary object goes here.
                         */ 
                        Dictionary<string, SecureString> logonSecureInput = new Dictionary<string, SecureString>();
                        /*
                         *Code to compute logon input names and System.Security.SecureString values
                         *for forms logon page and add them to the Dictionary object goes here.
                         */ 
                        CookieCollection formsLogonCookies = new CookieCollection();
                        userCredentials = new FormsCredentials(logonURL, logonURL, logonInput, logonSecureInput, logonMethod, formsLogonCookies);
                        break;

                    case FederationAuthType.PerUserCookie:
                        CookieCollection logonCookies = new CookieCollection();
                        /*
                         *Code to compute logon cookies and add them
                         *to the cookie collection goes here.
                         */
                        userCredentials = new CookieCredentials(logonCookies);
                        break;

                    case FederationAuthType.PerUserNTLM:
                    case FederationAuthType.PerUserBasicAuth:
                    case FederationAuthType.PerUserDigest:
                        /*
                         *Replace username with the Windows account.
                         *Replace domain with the Windows domain name.
                         *Replace password with the password for the User account.
                         */
                        string user = "username";
                        string domain = "domain";
                        string password = "password";
                        userCredentials = new NetworkCredential(user, password, domain);
                        break;

                    default:
                        break;
                }
                if (fedResultsDS.UserCredentials.ContainsKey(locationName))
                {
                    fedResultsDS.UserCredentials.Remove(locationName);
                }

                if (userCredentials != null)
                {
                    fedResultsDS.UserCredentials.Add(locationName, userCredentials);
                }
            }
        }

        protected override XPathNavigator GetXPathNavigator(string viewPath)
        {
            XPathNavigator federatedResults;
            federatedResults = base.GetXPathNavigator(viewPath);

            if (federatedResults == null)
            {
                ShowLogonControls();
            }
            else
            {
                ShowLogoutControls();
            }

            return federatedResults;
        }

        private void ShowLogonControls()
        {
            //Code to display logon controls goes here.
        }

        private void ShowLogoutControls()
        {
        //Code to display logout controls
        }
    }
}

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also

Reference

FederatedResultsDatasource Members

Microsoft.Office.Server.Search.WebControls Namespace

FederatedResultsWebPart

FederatedResultsDatasourceView

SearchResultsBaseDatasource

TopFederatedResultsDatasource