WCF:为 SharePoint 2010 Business Connectivity Services 构建 WCF Web 服务(第 1 部分,共 4 部分)
转:http://msdn.microsoft.com/zh-cn/library/gg318615.aspx
摘要:通过此系列文章(共四部分)了解如何在 Microsoft SharePoint Foundation 2010 中对用户进行身份验证。创建可将其用作 Microsoft Business Connectivity Services (BCS) 中外部内容类型的 Windows Communication Foundation (WCF) Web 服务。
适用范围: Microsoft SharePoint Foundation 2010
供稿人: Eric White(该链接可能指向英文页面),Microsoft Corporation | Saji Varkey,Microsoft Corporation | Bin Zhang,Microsoft Corporation
目录
- 简介
- 先决条件
- 安装 Windows Communication Foundation (WCF) 和 Internet Information Services
- 注册服务模型
- 更新脚本映射
- 创建 Web 服务
- 验证 Web 服务
- 结论
- 其他资源
本文是介绍如何通过 Business Connectivity Services 创建和使用声明感知 Web 服务的系列文章的第一部分(共四部分)。查看该系列中的其他文章:
- WCF:为 SharePoint 2010 Business Connectivity Services 构建 WCF Web 服务(第 1 部分,共 4 部分)(本文)
- WCF:在 WCF Web 服务内确定调用方身份(第 2 部分,共 4 部分)
- WCF:在 WCF Web 服务和 SharePoint 2010 安全令牌服务之间建立信任关系(第 3 部分,共 4 部分)
- WCF:使用启用声明的 WCF Web 服务作为 SharePoint 2010 外部内容类型(第4 部分,共 4 部分)
简介
本文演示如何使用 WCF 创建非常简单的 Web 服务。我在本文中介绍的 Web 服务有一个特征:尽管它非常简单,但可以用作 Business Connectivity Services 中的外部内容类型。此外,本文中提供的过程还介绍如何使用 Internet Information Services (IIS) 承载该 Web 服务。
该 Web 服务只包含两种方法:查找工具 方法(用于检索项目集合)和特定查找工具 方法(用于检索单个项目)。集合背后的数据是一个初始化列表。这个小型数据库的架构非常简单。它是一个由两个字段组成的平面表:一个整型字段
CustomerID 和一个字符串字段 CustomerName。CustomerID 是唯一 ID。下面的代码段演示如何初始化包含由 Web 服务提供服务的数据的列表。
- return new List<Customer>()
- {
- new Customer
- {
- CustomerID = 1,
- CustomerName = "Bob",
- },
- new Customer
- {
- CustomerID = 2,
- CustomerName = "Bill",
- },
- new Customer
- {
- CustomerID = 3,
- CustomerName = "Cheryl",
- },
- };
在构建和配置该 Web 服务后,您可以使用 SharePoint Designer 2010 通过该服务创建外部内容类型,然后在 SharePoint 列表中查看数据。下图显示了 SharePoint 外部列表。
图 1. SharePoint 2010 外部列表
您可能已经知道,SharePoint Foundation 2010 和 SharePoint Server 2010 中的 Business Connectivity Services 是可读/写的。如果您提供其他方法来创建、更新和删除项目,则可以完全保留列表中的数据。我希望该 Web 服务尽可能简单。因此这是一个只读实现。我只关注安全性和身份标识问题。存储数据库的方式、存储数据库的位置或架构详细信息与本主题无关。
此处说明的过程针对 Windows Server 2008 R2 和 Windows Server 2008。您可以使用 Microsoft Visual Studio 2010 或 Visual Studio 2008 构建该 Web 服务。
您可以在运行 Internet Information Services 的任何开发计算机上构建、运行和测试本文介绍的 Web 服务。但是,如果您希望使用 Business Connectivity Services 作为外部内容类型连接到该 Web 服务,请在 SharePoint 2010 开发环境中生成此示例,以便 SharePoint Foundation 2010 或 SharePoint Server 2010 以及 Web 服务示例能够在同一台计算机上运行。可以将该 Web 服务置于其他服务器上,并将其用作外部内容类型。但在这种情况下,您必须取消安全设置,或者必须创建声明感知
Web 服务。
如前所述,我在此处介绍的过程演示如何在 IIS 下承载 Web 服务。这是此类 Web 服务的大多数实现者希望承载该服务的方式。作为 IIS 的服务承载它具有诸多好处,例如可以进行进程回收、监视进程运行状况以及基于消息的激活。
先决条件
此过程针对 Windows Server 2008 或 Windows Server 2008 R2。在这两种情况下,我都从装有经过修补的全新操作系统的服务器开始操作。接下来,我将安装必需角色和功能以便安装和运行 IIS。此外,本文介绍的过程还需要 .NET Framework 3.5.1 以及 Visual Studio 2008 或 Visual Studio 2010。
安装 Windows Communication Foundation (WCF) 和 Internet Information Services
使用服务器管理器安装 Web 服务器 (IIS) 角色和 .NET Framework 3.5.1 功能。
若要运行此示例,必需的唯一角色是 Web 服务器 (IIS)。下图显示了添加角色向导中的这一对话框。
图 2. 在添加角色向导中选择“Web 服务器”角色
添加 Web 服务器 (IIS) 角色后,向导会要求您选择“角色服务”。选择“应用程序开发”。下图显示了添加角色向导中的这一对话框。
图 3. 在添加角色向导中选择“应用程序开发”
若要安装 .NET Framework,请添加“.NET Framework 3.5.1 功能”。下图显示了添加角色向导中的这一对话框。
图 4. 在添加角色向导中选择“.NET Framework 3.5.1 功能”
在 Windows Server 2008(非 R2)上安装此功能时,并在选择“.NET Framework 3.0 功能”后,选择“WCF 激活”。这是 Windows Server 2008 R2 中的默认选项。下图显示了添加角色向导中的这一对话框。
图 5. 选择“WCF 激活”
必须同时安装 WCF 和 IIS,IIS 承载的 WCF 服务才能正常运行。安装 WCF(作为 .NET Framework 3.0 的一部分)和 IIS 的过程取决于您所使用的操作系统。如果要在除 Windows Server 2008 或 Windows Server 2008 R2 之外的操作系统上进行安装,请参阅
Microsoft .NET Framework 3.0 可再发行组件包以便下载并安装 .NET Framework 3.0。请参阅安装 IIS(该链接可能指向英文页面)。
注册服务模型
要运行此示例,您必须注册该版本的 WCF 并在 IIS 元数据库根下更新脚本映射。
注册服务模型
启动 Visual Studio 命令提示符。以administrator身份运行。下图演示以管理员身份运行命令提示符。
图 6. 以管理员身份运行 Visual Studio Command Prompt
依次单击“开始”、“所有程序”、“Visual Studio 2010”和“Visual Studio 工具”,右键单击“Visual Studio 命令提示”,然后单击“以管理员身份运行”。
对于 Visual Studio 2008,Visual Studio 命令提示符位于类似的位置。
将目录切换到以下位置:
c:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation
在命令提示符中,输入:
ServiceModelReg -i
下图演示运行 ServiceModelReg。
图 7. 运行 ServiceModelReg
注释:
这不必是 Visual Studio 命令提示符。但是,下面的步骤需要 Visual Studio 命令提示符。因此,为了提高效率,我在此步骤中创建了一个。
更新脚本映射
更新脚本映射
在命令提示符中,输入:
aspnet_regiis.exe -i
下图显示了更新脚本映射。
图 8. 更新脚本映射
创建 Web 服务
创建 Web 服务
创建一个目录 C:\MyWebService 来包含 Web 服务。如果您使用其他目录,则必须相应地更改这些过程。
启动 Visual Studio 2010(或 Visual Studio 2008)。
依次单击“文件”、“新建”和“项目”。对于安装的模板类别,请选择“WCF”。对于模板,请选择“WCF 服务应用程序”。找到“.NET Framework 3.5”。对于项目位置,请浏览到在步骤 1 中创建的目录。将此项目命名为“CustomersService”。不要为解决方案创建目录。下图显示了“新建项目”对话框的外观。
图 9. “新建项目”对话框
注释:
请记住将目标更改为 .NET Framework 3.5。默认情况下,Visual Studio 指向 .NET Framework 4,必须将其更改为 .NET Framework 3.5,此处呈现的过程才有效。
在项目中,将“IService1.cs”重命名为“ICustomers.cs”。Visual Studio 2010 可重命名对此项目中代码元素
IService1
的所有引用。单击“是”。实际上,我们将替换所有模块中的所有代码,因此无论单击“是”还是“否”都无影响。在项目中,将“Service1.svc”重命名为“Customers.svc”。下图显示了重命名这些项目后解决方案资源管理器的外观。
图 10. 重命名项目后的解决方案资源管理器
将“Customers.svc”替换为以下标记行。右键单击“Customers.svc”,然后选择“查看标记”。从本文复制此标记,将其粘贴到 Visual Studio 中并保存。
- <%@ ServiceHost Language="C#" Debug="true" Service="CustomersService.Customers" CodeBehind="Customers.svc.cs" %>
将“Customers.svc.cs”替换为以下代码。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace CustomersService
- {
- public class Customers : ICustomers
- {
- // Finder
- public List<Customer> GetAllCustomers()
- {
- return new List<Customer>()
- {
- new Customer
- {
- CustomerID = 1,
- CustomerName = "Bob",
- },
- new Customer
- {
- CustomerID = 2,
- CustomerName = "Bill",
- },
- new Customer
- {
- CustomerID = 3,
- CustomerName = "Cheryl",
- },
- };
- }
- // Specific finder
- public Customer GetCustomerByID(int CustomerID)
- {
- return GetAllCustomers().FirstOrDefault(c => c.CustomerID == CustomerID);
- }
- }
- }
- using System;
将“ICustomers.cs”替换为以下代码。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- namespace CustomersService
- {
- [ServiceContract]
- public interface ICustomers
- {
- [OperationContract] //finder
- List<Customer> GetAllCustomers();
- [OperationContract] //specificFinder
- Customer GetCustomerByID(int CustomerID);
- }
- [DataContract]
- public class Customer
- {
- [DataMember]
- public int CustomerID { get; set; }
- [DataMember]
- public string CustomerName { get; set; }
- }
- }
- using System;
将“Web.config”替换为以下标记。在解决方案资源管理器中,右键单击“Web.config”并选择“编辑”。复制、粘贴并保存。
重要信息:
这是配置此特定 Web 服务的 Web.config 文件。它位于 C:\MyWebService\CustomersService。
- <?xml version="1.0"?>
- <configuration>
- <system.serviceModel>
- <services>
- <service behaviorConfiguration="CustomersService.Service1Behavior"
- name="CustomersService.Customers">
- <endpoint address="" binding="wsHttpBinding" contract="CustomersService.ICustomers">
- <identity>
- <dns value="localhost" />
- </identity>
- </endpoint>
- <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
- </service>
- </services>
- <behaviors>
- <serviceBehaviors>
- <behavior name="CustomersService.Service1Behavior">
- <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deploying the solution. -->
- <serviceMetadata httpGetEnabled="true"/>
- <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deploying the solution to avoid disclosing exception information. -->
- <serviceDebug includeExceptionDetailInFaults="false"/>
- </behavior>
- </serviceBehaviors>
- </behaviors>
- </system.serviceModel>
- </configuration>
- <?xml version="1.0"?>
生成应用程序。
将应用程序添加到默认网站中。启动“Internet Information Services (IIS) 管理器”。依次单击“开始”、“所有程序”和“管理工具”,然后单击“Internet Information Services (IIS) 管理器”。在“Internet Information Services (IIS) 管理器”中,展开“网站”,右键单击“默认网站”,然后选择“添加应用程序”。下图演示如何在“Internet
Information Services (IIS) 管理器”中添加应用程序。图 11. Internet Information Services 管理器
在“添加应用程序”对话框的“别名”字段中,键入 Customers。在“物理路径”字段中,浏览到 C:\MyWebService\CustomersService。单击“确定”。下图显示了包含 Web 服务的目录。
图 12. 包含 Web 服务的目录
验证 Web 服务是否正在运行。启动 Internet Explorer,并浏览到 http://localhost/Customers/Customers.svc。如果 Web 服务正在运行,您将看到以下内容:
图 13. Internet Explorer 中的 CustomersService Web 服务
验证 Web 服务
测试 Web 服务的另一种方法是使用 WCF 测试客户端。
使用 WCF 测试客户端验证 Web 服务
启动 Visual Studio 命令提示符(或使用从前面过程的末尾打开的命令提示符)。
键入 wcftestclient 以运行 WCF 测试客户端。单击“文件”,然后单击“添加服务”。
键入 http://localhost/Customers/Customers.svc 作为终结点地址,然后单击“确定”。
下图演示向 WCF 测试客户端中输入终结点。
图 14. WCF 测试客户端
如果成功添加了服务,则会看到该服务公开的方法。下图显示了 WCF 测试客户端中的 Web 服务方法。
图 15. 显示方法的 WCF 测试客户端
双击“GetAllCustomers”。这会打开一个允许您配置请求和启动请求的窗口。
单击“调用”以查看 Web 服务的响应。下图显示了调用 GetAllCustomers 的结果。
图 16. 显示调用 GetAllCustomers 的结果的 WCF 测试客户端
结论
在本文中,您完成了创建声明感知 Web 服务的四个主要步骤中的第一步,并将其与 Business Connectivity Services 配合使用。您创建了 Web 服务,对其进行编译,并使用 IIS 承载它。在下一篇文章
WCF:在 WCF Web 服务内确定调用方身份(第 2 部分,共 4 部分)中,您将对此示例进行改进,以使用 Windows Identity Foundation (WIF) 中的功能来确定 Web 服务调用程序的身份。
WCF:为 SharePoint 2010 Business Connectivity Services 构建 WCF Web 服务(第 1 部分,共 4 部分)的更多相关文章
- Searching External Data in SharePoint 2010 Using Business Connectivity Services
from:http://blogs.msdn.com/b/ericwhite/archive/2010/04/28/searching-external-data-in-sharepoint-2010 ...
- sharepoint bcs (bussiness connectivity services)
sharepoint bcs 在2010 版本中是提供2010 与外部数据连接的. BCS全名Business Connectivity Services,可以把它看成SharePoint 2007 ...
- 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...
- 用于构建 RESTful Web 服务的多层架构
作者:Bruce Sun, Java 架构师, IBM 出处:http://www.ibm.com/developerworks/cn/web/wa-aj-multitier/ 用于构建 RESTfu ...
- 基于jersey和Apache Tomcat构建Restful Web服务(一)
基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来 ...
- 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
作者: Yi Ming Huang, 软件工程师, IBM Dong Fei Wu, 软件工程师, IBM Qing Guo, 软件工程师, IBM 出处: http://www.ibm.com/de ...
- 使用RpcLite构建SOA/Web服务
使用RpcLite构建SOA/Web服务 SOA框架系列 1. 使用RpcLite构建SOA/Web服务 提到Web服务最先想到的就是WebService此外常用的还有WCF.ServiceStack ...
- 基于IIS构建Pyathon Web服务
本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根 ...
- Guzzle – 构建 RESTful Web 服务的 PHP HTTP 框架
Guzzle 减轻了发送 HTTP 请求和创建 Web 服务客户端的痛苦.它包含建立一个强大的网络服务客户端的工具,包括:服务描述定义的输入和输出的 API,资源迭代器遍历分页资源,尽可能有效地发送大 ...
随机推荐
- MVC视图引擎
1.视图引擎:把视图解析成浏览器可执行的html代码 2.aspx视图: <%=表达式%>: <% C#代码段 %>: 3.razor视图: @(表达式):@ViewData[ ...
- 关于 .net 开发 Office Word 的一些问题小结
1.在"组件服务"的DCom配置中找到Microsoft Office Word =>属性=>标识选项卡,然后选择交互式用户:::=>"安全" ...
- python学习笔记10(函数一): 函数使用、调用、返回值
一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明和函数定义可以出现在不同的文件中,比如C语言),但是在Python中,函数声明和函数定义是视为一体的.在Py ...
- TWaver初学实战——如何在EasyUI中插入TWaver(续)
上次文章虽然简单易懂,但很有些小伙伴不满意:你这TWaver和EasyUI结合,只不过生硬地把TWaver图形插进去了,数据和人家EasyUI没一毛钱关系.嘿嘿,不就是想发生关系嘛,没问题啊!咱就还用 ...
- Contest2037 - CSU Monthly 2013 Oct (problem F :ZZY and his little friends)
http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2037&pid=5 [题解]: 没想通这题暴力可以过.... [code]: #inclu ...
- C#中Thread.sleep()
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:1.假设现在是 2008-4-7 12:00:00.000,如果我调 ...
- mysql 跨库JOIN
现有两台MYSQL数据库 一台是192.168.1.1 端口3306 上有数据库DB1 有表TABLE1一台是192.168.1.2 端口3307 上有数据库DB2 有表TABLE2192.168.1 ...
- 3.8 spring-qualifier 子元素的使用与解析
对于 qualifier 子元素,我们接触的更多的是注解形式,在使用Spring 自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean 时, S ...
- css3分栏
<!DOCTYPE HTML> <meta charset="UTF-8"> <title>分栏</title> <style ...
- Form表单学习网站
HTML表单 -- form标签 -- 与浏览者交互:http://www.dreamdu.com/xhtml/tag_form/