SharePoint Foundation 2010 中的 WCF 服务

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

适用范围: SharePoint Foundation 2010

Microsoft SharePoint Foundation 2010 中的新 REST 接口和新客户端对象模型提供对 SharePoint Foundation 网站的常用功能(但不是它们的所有功能)的访问。如果要开发 Microsoft SharePoint Server 2010 的自定义应用程序,可能有默认的 Windows Communication Foundation (WCF) Web 服务公开您需要使用的特定功能。但是,如果没有 Web 服务提供所需的访问,您可以创建使用服务器对象模型访问数据的自定义 Web 服务。SharePoint Foundation 2010 支持创建 Microsoft ASP.NET 和 WCF 自定义 Web 服务,它们可用于开发 SOAP 式或 RESTful Web 服务。

为 SharePoint Foundation 创建的 ASP.NET Web 服务将继续在 SharePoint Foundation 2010 中工作,无需进行修改,但为了向前发展,我们建议您创建自定义 WCF Web 服务。尽管 ASP.NET Web 服务的配置要求更简单,但 WCF 服务提供更为灵活、强大的绑定,这对高级应用程序很重要。通过在 SharePoint Foundation 中承载 WCF Web 服务,可以降低配置要求。如果为先前的版本创建 WCF Web 服务,您可能必须执行解决方案使其生效,并在独立的 Web 应用程序内承载该服务。在 SharePoint Foundation 2010 中,无需执行解决方案,因为默认情况下支持 WCF 服务。

开发自定义 ASP.NET Web 服务的方式与先前版本中相同。如 演练:创建自定义 ASP.NET Web 服务 中所述,您可以将自定义 ASP.NET Web 服务部署到 SharePoint Foundation,并添加 .wsdl 和 .disco 文件以使 Web 服务的架构可被 Microsoft Visual Studio 发现。 WCF Web 服务可能更复杂,因为其体系结构需要您指定 WCF 服务端点的完整配置。这些配置信息包括端点地址、服务协定以及绑定配置(包含关于 Web 服务运行环境的特定信息)。但是,SharePoint Foundation 开发者通常没有关于 Web 服务运行环境的信息;场管理员确定 Web 应用程序的配置并部署 Web 服务。该管理员可以从 SharePoint Foundation 支持的多个验证方案中进行选择,或者可以启用多个验证方案并为 Microsoft Internet Information Services (IIS) Web 应用程序分配多个地址。在这些情况下,对于每个验证方案和地址,WCF 服务需要一个单独的端点。因为此类配置信息无法在静态表单中提供,所以无法使用 web.config 型配置。该解决方案是动态配置,或者在 WCF 术语中,称为编程式配置。

WCF 动态配置

SharePoint Foundation 中的 WCF 动态配置以自定义服务工厂的形式提供。当您开发 WCF 服务时,必须指定 SharePoint Foundation 提供的服务工厂,指定之后,不再需要 web.config 中的配置项。运行时,SharePoint Foundation 服务工厂自动为您的服务配置适当端点。通过服务类上的专用属性,您还可以指示 SharePoint Foundation 服务工厂为您的自定义服务自动创建一个元数据交换端点。当 SharePoint Foundation 服务工厂在服务类上检测到该属性时,它会为您的自定义服务自动创建元数据交换端点。WCF Web 服务开发的最后一步是在 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI 文件夹或 Web 应用程序中部署该服务。

下表列出了服务类型和 SharePoint Foundation 提供的服务工厂。

服务类型

服务工厂

说明

SOAP 服务

MultipleBaseAddressBasicHttpBindingServiceHostFactory

必须使用基本 HTTP 绑定,其根据基本 HTTP 绑定为服务创建端点。

REST 服务

MultipleBaseAddressWebServiceHostFactory

服务工厂通过 Web 绑定创建端点。

ADO.NET 数据服务

MultipleBaseAddressDataServiceHostFactory

可使用的数据服务宿主工厂。

您可以将以下属性应用到服务类以达到相应目的:

  • [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] — 以与 ASP.NET 兼容。

  • [BasicHttpBindingServiceMetadataExchangeEndpoint] — 以启用数据交换 (MEX) 端点。

使用 SPWebServiceWcfServiceSettings 属性可指定配置类,用于自定义 SharePoint Foundation 服务工厂生成的端点的参数。如果此配置类的功能不满足您的需要,您还可以开发自己的自定义服务工厂,该工厂可为您的 Web 服务动态创建端点。

WCF 服务配置

在 SharePoint Foundation 中承载并使用动态配置的 WCF 服务依靠 SharePoint Foundation 服务工厂配置其端点。启动时,该服务工厂从 IIS 读取配置信息并针对每个为可用应用程序指定的验证方案和地址创建适当的端点。但是,对于每个端点,WCF 需要唯一的地址。如果为一个 Web 应用程序启用了多个验证方案,则多个端点会映射到同一个地址。为了解决此问题,SharePoint Foundation 会为每个验证方案创建一个唯一的地址。该地址通过将服务的基 URL 与验证方案的名称连接形成,如下所示:

  • https://server/_vti_bin/Service.svc/negotiate

  • https://server/_vti_bin/Service.svc/ntlm

  • https://server/_vti_bin/Service.svc/anonymous

在应用程序中添加自定义 WCF Web 服务的服务引用时,您无需指定验证方案后缀,但可以通过 Web 服务的原始 URL(例如 https://server/_vti_bin/Service.svc)访问该服务。这可以通过 HTTP 模块实现,因为该模块是 SharePoint Foundation 基础结构的标准组成部分,预处理由 SharePoint Foundation 处理的所有请求。HTTP 模块识别 WCF 服务配置约定,在出现使用动态配置的 WCF 服务的请求时,该模块基于请求的验证将请求重新传送到适当的端点。此重新传送机制以透明方式工作,工作对象是仅识别位于可通过多个验证方案访问的原始名称处的单个 WCF 服务的客户端应用程序。

请参阅

概念

在 SharePoint Foundation 中创建自定义 WCF 服务

其他资源

Windows Communication Foundation

Configuring Windows Communication Foundation Services