创建一个带有凭据 UI 的自定义联合搜索 Web 部件

备注

本主题介绍 Infrastructure Update for Microsoft Office Servers中的功能。若要下载此更新,请参阅 SharePoint Server 2007 基础结构更新说明:2008 年 7 月 15 日

通过使用 Microsoft Office SharePoint Server 2007 企业级搜索来创建联合位置,您可以包括未由搜索服务器的爬网程序编制索引的内容库中的项。在创建联合位置时,您还必须指定其身份验证类型。

指定身份验证类型

您创建的联合位置的身份验证类型可能是以下类型之一:

  • **匿名   **无需凭据即可连接到联合位置。

  • 公用   每个连接使用一组相同的凭据来连接到联合位置。

  • **每用户   **使用提交搜索查询的用户的凭据来连接到联合位置。

对于公用和每用户身份验证类型,您必须同时指定以下身份验证协议之一:

  • 基本

  • 摘要式

  • NTLM 应用程序池标识(仅限公用身份验证类型)

  • NTLM

  • Kerberos(仅限每用户身份验证类型)

  • 表单

  • Cookie

使用联合搜索 Web 部件来访问用户凭据

在联合位置是 OpenSearch 位置并且针对每用户身份验证配置了该位置的方案中,如果使用的是 Kerberos 身份验证,将会自动传递用户的凭据。但是,将不会为其他身份验证协议自动传递凭据。若要使身份验证在这些方案中工作,您必须创建自定义版本的联合搜索 Web 部件来请求用户的凭据,以便能够在请求中将凭据传递到联合位置。

本主题论述了为企业级搜索创建包含凭据用户界面 (UI) 的自定义联合搜索 Web 部件的要求,并提供了有关该操作的一些指导。

首先,我们检查企业级搜索中新的联合搜索 Web 部件(联合结果 Web 部件和顶部联合结果 Web 部件),以及 Microsoft.Office.Server.Search.WebControls 命名空间中与这些 Web 部件相关的类。

备注

企业级搜索查询对象模型(位于 Microsoft.Office.Server.Search.Query 命名空间中)未提供对联合搜索结果的访问。若要自定义联合搜索 UI,您必须实现一个从其中一个新联合搜索 Web 部件继承的类。

联合结果 Web 部件

联合结果 Web 部件显示来自指定联合位置的结果。您只能在联合结果 Web 部件中指定一个联合位置。默认情况下,企业级搜索提供两个联合结果 Web 部件,其中一个显示来自 Windows Live Search 的相关搜索,另一个显示 Windows Live Search 结果。

您在 Microsoft.Office.Server.Search.WebControls.FederatedResultsWebPart 类中实现联合结果 Web 部件。

顶部联合结果 Web 部件

顶部联合结果 Web 部件显示第一个返回搜索结果的联合位置中的结果。您可以按优先级顺序为该 Web 部件配置多个位置。默认情况下,没有为此 Web 部件配置位置。

您在 Microsoft.Office.Server.Search.WebControls.TopFederatedResultsWebPart 类中实现顶部联合结果 Web 部件。

SearchResultsBaseWebPart 基类

FederatedResultsWebPart 类和 TopFederatedResultsWebPart 类均继承自同一个基类:Microsoft.Office.Server.Search.WebControls.SearchResultsBaseWebPart。

创建 Web 部件项目

可以使用 Microsoft Office SharePoint Designer 2007 将 Web 部件导入到网页,但不能创建新的 Web 部件。若要开发自定义 Web 部件程序集,您必须使用开发工具(例如 Microsoft Visual Studio 2005)。

有关使用 Visual Studio 2005 来创建自定义 Web 部件的其他信息,请参阅以下链接:

添加项目引用

您还可以通过使用类库或 Web 控件库项目模板在 Visual Studio 2005 中创建项目来着手开发自定义 Web 部件解决方案。创建了项目后,您必须向项目中添加以下引用:

  • Microsoft Search 组件 (Microsoft.Office.Server.Search.dll)

  • Windows SharePoint Services (Microsoft.SharePoint.dll)

添加 Web 部件类

您必须向 Web 部件项目中添加一个类,并指定该类从其中一个联合搜索 Web 部件类继承。下面是自定义 Web 部件的类声明示例。

代码列表 1. 从 SearchResultsBaseWebPart 类继承

public class CustomFederatedSearchWebPart : Microsoft.Office.Server.Search.WebControls.SearchResultsBaseWebPart 

代码列表 2. 从 FederatedResultsWebPart 类继承

public class CustomFederatedSearchWebPart : Microsoft.Office.Server.Search.WebControls.FederatedResultsWebPart

代码列表 3. 从 TopFederatedResultsWebPart 类继承

public class CustomFederatedSearchWebPart : Microsoft.Office.Server.Search.WebControls.TopFederatedResultsWebPart 

实现自定义 Web 部件类

若要实现自定义 Web 部件来支持联合位置位于远程服务器上的每用户身份验证方案,请执行以下三步:

  1. 向用户请求凭据。

  2. 用该用户的凭据创建一个 ICredentials 对象。

  3. 将 ICredentials 对象传递到发送到联合位置的搜索请求。

安全注意事项

在向用户收集凭据时,我们强烈建议您使用安全连接。

向用户请求凭据

您的自定义 Web 部件解决方案 UI 必须为用户提供输入凭据的方式。只有当 Web 部件没有用户的凭据时,才会显示此 UI。

您可以重写以下方法之一来显示凭据 UI:

  • Render

  • CreateChildControls

在任何一种方法中,您都应包括代码,用于检查是否已经有用户凭据,并在已有用户凭据时不呈现凭据 UI。您还必须在代码后面调用 base.Render() 或 base.CreateChildControls() 以显示凭据 UI。

备注

将自定义 Web 部件添加到搜索结果页面后,您必须在工具窗格中为该 Web 部件配置一个联合位置,然后该 Web 部件才会显示在页面中。

创建 ICredentials 对象

您创建 ICredentials 对象来传递用户输入的用户凭据。

如果要为此解决方案创建一个 Web 部件(以使凭据 UI 显示在自定义联合搜索结果所在的 Web 部件中),则您可以重写 Web 部件的 OnLoad 方法来捕获凭据。您可以检查是否回发了该页面来确定是否应检查用户输入的凭据,如以下代码示例中所示。

protected override void OnLoad(EventArgs e)
{
   if (this.Page.IsPostBack)
   {
/*
uCredentials is a class level variable for an ICredentials object.
domainName is a string variable containing the domain
userName and passWord are examples of text box controls added in the previous step.
*/
      uCredentials = new NetworkCredential(userName.Text, passWord.Text, domainName);
   }
   base.OnLoad(e);
}

如果凭据 UI 未包含在联合搜索结果所在的 Web 部件中,您应改为重写 Web 部件的 Init 方法。

将凭据传递到联合位置

从用户处获得凭据后,您可以将凭据首先传递到搜索请求,然后再传递到联合位置。您通过设置与 Web 部件关联的数据源对象的 UserCredentials 属性来执行此操作。

每个联合搜索 Web 部件类都有一个关联的数据源类,如下表中所列。

Web 部件类

数据源类

SearchResultsBaseWebPart

SearchResultsBaseDatasource

FederatedResultsWebPart

FederatedResultsDatasource

TopFederatedResultsWebPart

TopFederatedResultsDatasource

若要配置 Web 部件的联合位置数据源属性,您必须重写 ConfigureDataSourceProperties 方法并调用数据源的 UserCredentials.Add 方法,如以下示例中所示。

protected override void ConfigureDataSourceProperties()
{
    base.ConfigureDataSourceProperties();
    SearchResultsBaseDatasource ds = this.DataSource as SearchResultsBaseDatasource;
    ds.UserCredentials.Add("LocationInternalName", uCredentials);
}

See Also

参考

WebControls

SearchResultsBaseWebPart

SearchResultsBaseDatasource

SearchResultsBaseDatasourceView

FederatedResultsWebPart

FederatedResultsDatasource

FederatedResultsDatasourceView

TopFederatedResultsWebPart

TopFederatedResultsDatasource

概念

联合搜索概述

自定义联合搜索 Web 部件示例