65.9K
CodeProject 正在变化。 阅读更多。
Home

InfoPath 2010 与 SharePoint 2010 集成(使用自定义 WCF 服务): 第一部分(共 2 部分)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (2投票s)

2013 年 5 月 5 日

CPOL

4分钟阅读

viewsIcon

28697

downloadIcon

479

创建 SharePoint 列表和自定义 WCF 应用程序, 使用客户端对象模型读取 SharePoint 列表信息

引言

在本教程中,我们将学习如何设计 InfoPath 表单。我们将使用自定义 WCF 服务从 SharePoint 列表检索数据并在 InfoPath 表单上显示。同样的服务也将用于将数据保存到 SharePoint 列表。本教程的第 1 部分将重点关注创建 SharePoint 列表和开发一个 WCF 服务来从 SharePoint 列表读取数据。

SharePoint 列表

首先,我创建了一个名为 Projects 的 SharePoint 列表。字段如下:

  1. Title - 单行文本
  2. ClientName - 单行文本
  3. PrimaryTechnology - 单行文本
  4. SecondaryTechnology - 单行文本
  5. Database - 单行文本
  6. ProjectManager - 单行文本
  7. ProjectType - 选择
  8. ProjectStartDate - 日期和时间
  9. Duration – 数字
  10. ProjectEndDate - 单行文本
  11. CreatedBy - 人员或组
  12. ModifiedBy - 人员或组

WCF 实现 – 读取数据

现在,我们需要一个 WCF 服务来从 SharePoint 列表读取数据。我们将把 ID 从 InfoPath 表单传递给服务,服务将使用对象模型通过该 ID 从列表中获取数据。如果您是 SharePoint 开发人员,这应该相当直接。

  1. 在 Visual Studio 2010 中,创建一个空白的 SharePoint 项目;我将其命名为 ProjectManagementService。为解决方案文件使用不同的名称是一个好主意。我将其命名为 ProjectManagementApplication。添加对 Microsoft.SharePoint.Client.ServerRuntime 程序集的引用。此程序集是必需的,因为它包含 Service Host Factory 类。
  2. 右键单击项目,然后添加 SharePoint 映射文件夹,如下图所示:

  3. 这将打开一个弹出窗口,选择 ISAPI 并单击确定。这将在项目中添加 ISAPI 映射文件夹。服务将部署在这里。将服务部署在其独立的文件夹中是一个好习惯。在 ISAPI 文件夹内添加一个文件夹,SVC 文件将驻留在此处。我为我的 svc 文件创建了一个名为 PM Service 的文件夹。

  4. 要添加服务文件(.svc),请右键单击新添加的文件夹,然后添加一个新文本文件。重命名文件并添加扩展名 .svc。此文件将在 IIS 中托管,并包含有关程序集信息和代码隐藏文件的详细信息。
    <%@ ServiceHost Language="C#" Debug="true"
    	Service="Tutorial.SP2010.ProjectManagementApplication.ProjectManagementService.PMService,
    	$SharePoint.Project.AssemblyFullName$" CodeBehind="PMService.cs" %>
  5. 我们需要一个用于服务合同的接口和一个实现服务合同的类。在项目中添加 2 个文件夹。我将我的文件夹命名为 ServiceContractService
  6. 首先,在 ServiceContract 文件夹中添加一个接口。我添加了一个名为 IPMService.cs 的文件。我们需要一个 Data Contract 来保存与项目相关的信息。然后,我们为获取和设置项目相关信息添加 Operation Contract。Setter 方法将接受一个 string(来自 InfoPath 的整个 XML 内容)作为参数。Getter 方法将接受 ProjectId 作为参数。
  7. 现在,添加一个名为 PMService 的类并实现 IPMService
  8. 向在 ISAPI 文件夹中创建的服务文件夹添加一个 Config 文件,并将其命名为 Web.config。此文件将包含与绑定和终结点相关的信息。您可以使用以下配置设置来配置绑定和终结点:
    <services>
    	<service behaviorConfiguration="PMServiceBehaviour"
    	name="Tutorial.SP2010.ProjectManagementApplication.
    	ProjectManagementService.PMService">
    		<endpoint address="" name="PMServiceEndPoint"
    		binding="basicHttpBinding" bindingConfiguration="BasicHttpEndpointBinding"
    			contract="Tutorial.SP2010.ProjectManagementApplication.
    			ProjectManagementService.IPMService">
    			<identity>
    				<dns value="localhost" />
    			</identity>
    		</endpoint>
    		<endpoint address="mex" name="PMServiceEndPointMex"
    		binding="mexHttpBinding" contract="IMetadataExchange" />
    		<host>
    			<baseAddresses>
    				<add baseAddress="https:///Design_Time_Addresses/
    				Tutorial.SP2010.ProjectManagementApplication.
    				ProjectManagementService/PMService/" />
    			</baseAddresses>
    		</host>
    	</service>
    </services>
    
    <bindings>
    	<basicHttpBinding>
    		<binding name="BasicHttpEndpointBinding"
    					maxReceivedMessageSize="2147483647"
    					maxBufferSize="2147483647"
    					closeTimeout="03:00:00">
    			<readerQuotas maxDepth="2147483647"
    				maxStringContentLength="2147483647"
    				maxArrayLength="2147483647"
    				maxBytesPerRead="2147483647"
    				maxNameTableCharCount="2147483647"/>
    		</binding>
    	</basicHttpBinding>
    </bindings>
  9. 我们完成了设置服务的初始任务。下面是添加所有文件后解决方案资源管理器中的解决方案外观。您还可以使用 CKS Development Tool,它安装了一个 Visual Studio 模板来为 SharePoint 创建 WCF 服务。

  10. 在 Service Contract 中,我有 2 个操作合同(通过 WCF 公开的方法),一个用于从 SharePoint 列表获取数据,一个用于将数据设置到 SharePoint 列表。get 方法名为 GetProjectDetailsById。在开始之前,您需要添加对 System.ServiceModel.Activation 的引用,并启用 AspNetCompatibilityRequirements。通过将以下属性添加到服务类来实现此目的:
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
  11. 实现 GetProjectDetailsById 方法。我使用了 SharePoint 对象模型,通过 SPList 对象的 GetItemById 方法读取 ListItem。项 ID 将作为参数从 InfoPath 表单传递。
  12. 部署 WCF 服务。我们不需要 InfoPath 表单来测试 WCF 服务。Visual Studio 为我们提供了一个客户端应用程序来测试 WCF 服务。启动 Visual Studio 命令提示符并执行“WCFTestClient”命令来运行 WCF 客户端应用程序。添加服务 URL 并将参数传递给 GetMethod。在进行客户端测试之前,不要忘记向列表中添加虚拟数据。
© . All rights reserved.