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






4.33/5 (2投票s)
创建 SharePoint 列表和自定义 WCF 应用程序,
- 第 1 部分:使用客户端对象模型创建 SharePoint 列表和自定义 WCF 应用程序以读取 SharePoint 列表信息
- 第 2 部分:设计 InfoPath 表单以从 WCF 应用程序读取值。发布和部署 InfoPath 表单并设置站点页面以使用 InfoPath Web 部件显示表单
引言
在本教程中,我们将学习如何设计 InfoPath 表单。我们将使用自定义 WCF 服务从 SharePoint 列表检索数据并在 InfoPath 表单上显示。同样的服务也将用于将数据保存到 SharePoint 列表。本教程的第 1 部分将重点关注创建 SharePoint 列表和开发一个 WCF 服务来从 SharePoint 列表读取数据。
SharePoint 列表
首先,我创建了一个名为 Projects 的 SharePoint 列表。字段如下:
Title
- 单行文本ClientName
- 单行文本PrimaryTechnology
- 单行文本SecondaryTechnology
- 单行文本Database
- 单行文本ProjectManager
- 单行文本ProjectType
- 选择ProjectStartDate
- 日期和时间Duration
– 数字ProjectEndDate
- 单行文本CreatedBy
- 人员或组ModifiedBy
- 人员或组
WCF 实现 – 读取数据
现在,我们需要一个 WCF 服务来从 SharePoint 列表读取数据。我们将把 ID 从 InfoPath 表单传递给服务,服务将使用对象模型通过该 ID 从列表中获取数据。如果您是 SharePoint 开发人员,这应该相当直接。
- 在 Visual Studio 2010 中,创建一个空白的 SharePoint 项目;我将其命名为
ProjectManagementService
。为解决方案文件使用不同的名称是一个好主意。我将其命名为ProjectManagementApplication
。添加对Microsoft.SharePoint.Client.ServerRuntime
程序集的引用。此程序集是必需的,因为它包含 Service Host Factory 类。 - 右键单击项目,然后添加 SharePoint 映射文件夹,如下图所示:
- 这将打开一个弹出窗口,选择 ISAPI 并单击确定。这将在项目中添加 ISAPI 映射文件夹。服务将部署在这里。将服务部署在其独立的文件夹中是一个好习惯。在 ISAPI 文件夹内添加一个文件夹,SVC 文件将驻留在此处。我为我的 svc 文件创建了一个名为 PM Service 的文件夹。
- 要添加服务文件(.svc),请右键单击新添加的文件夹,然后添加一个新文本文件。重命名文件并添加扩展名 .svc。此文件将在 IIS 中托管,并包含有关程序集信息和代码隐藏文件的详细信息。
<%@ ServiceHost Language="C#" Debug="true" Service="Tutorial.SP2010.ProjectManagementApplication.ProjectManagementService.PMService, $SharePoint.Project.AssemblyFullName$" CodeBehind="PMService.cs" %>
- 我们需要一个用于服务合同的接口和一个实现服务合同的类。在项目中添加 2 个文件夹。我将我的文件夹命名为 ServiceContract 和 Service。
- 首先,在 ServiceContract 文件夹中添加一个接口。我添加了一个名为 IPMService.cs 的文件。我们需要一个 Data Contract 来保存与项目相关的信息。然后,我们为获取和设置项目相关信息添加 Operation Contract。Setter 方法将接受一个
string
(来自 InfoPath 的整个 XML 内容)作为参数。Getter 方法将接受ProjectId
作为参数。 - 现在,添加一个名为
PMService
的类并实现IPMService
。 - 向在 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>
- 我们完成了设置服务的初始任务。下面是添加所有文件后解决方案资源管理器中的解决方案外观。您还可以使用 CKS Development Tool,它安装了一个 Visual Studio 模板来为 SharePoint 创建 WCF 服务。
- 在 Service Contract 中,我有 2 个操作合同(通过 WCF 公开的方法),一个用于从 SharePoint 列表获取数据,一个用于将数据设置到 SharePoint 列表。
get
方法名为GetProjectDetailsById
。在开始之前,您需要添加对System.ServiceModel.Activation
的引用,并启用AspNetCompatibilityRequirements
。通过将以下属性添加到服务类来实现此目的:[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
- 实现
GetProjectDetailsById
方法。我使用了 SharePoint 对象模型,通过SPList
对象的GetItemById
方法读取ListItem
。项 ID 将作为参数从 InfoPath 表单传递。 - 部署 WCF 服务。我们不需要 InfoPath 表单来测试 WCF 服务。Visual Studio 为我们提供了一个客户端应用程序来测试 WCF 服务。启动 Visual Studio 命令提示符并执行“
WCFTestClient
”命令来运行 WCF 客户端应用程序。添加服务 URL 并将参数传递给GetMethod
。在进行客户端测试之前,不要忘记向列表中添加虚拟数据。