1.1.2 Web应用程序
Web应用程序扩展了IIS网站,并因而也具有IIS网站一样独立的运行端口、独立的身份认证体系、独立的应用程序池、单独的web.config文件等,一个Web应用程序通常由若干个网站集组成,SharePoint 2010使用内容数据库来存储网站集,一个内容数据库可以包含若干个网站集。
对从ASP.NET转到SharePoint的开发者来说,可以将SharePoint Web应用程序理解成第一个大规模的 ASP. NET 应用程序,如前文所述,每个SharePoint Web 应用程序都有自己的如同典型的 ASP.NET 应用程序一样的 web.config文件。与 ASP.NET 网站不同的是,每一个网站集并不拥有独立的配置文件,SharePoint Web 应用程序下唯一的一个 web.config为所有该 Web 应用程序下的网站集提供配置信息,即便该 Web 应用程序下面可能有数百个网站集存在。一个典型的 SharePoint 2010 服务器场至少有两个 Web 应用程序,一个是中央管理站点,另外一个开放给普通用户使用。
1.1.3 服务应用程序
SharePoint 2010 引入了服务应用程序的概念,在SharePoint 2010 里,服务应用程序可以在运行于不同的 Web 应用程序下,甚至不同的服务器场的不同站点间共享数据。新的服务应用程序架构也使得SharePoint 2010 性能得到进一步扩展,因为服务应用程序可以安装在独立于 Web 前端服务器的专属应用服务器之上。服务应用程序的一个很重要的特点是它在架构上的是它在架构上的解耦,在简单的服务器场配置里,服务应用程序可以安装在 Web 前端服务器上。在大型的服务器场配置里服务应用程序可以安装在单独的应用程序服务器或者应用程序服务器组里
在SharePoint2010里常见的服务应用程序有以下几个:
商业连接服务
用户档案服务:管理用户档案、组织档案、我的站点、社交标签
搜索服务:
托管元数据服务:
1.2.1 概述
SharePoint 2010服务器端对象模型是SharePoint开放给用户的编程接口,对SharePoint的数据访问以及操作都需要通过这些接口来进行访问,从ASP.NET开发转过来的开发者一定要避免直接访问数据库的冲动,所有对SharePoint的定制都需要通过对象模型来操作,尽管有时候直接访问数据库操作数据可以绕开SharePoint产品的限制。
在Visual Studio 2010里开发SharePoint项目有两点尤其需要注意: 第一点是项目配置里一定要选择.NET 3.5作为目标框架
对很多项目类型,Visual Studio 2010默认使用.NET 4.0作为目标框架; 第二点是目标平台要选X64兼容
还有需要注意的地方是,通过服务器端对象模型开发的程序必须在Web前端服务器或者应用程序服务器上才能运行。
1.2.2 代码示例
using Microsoft.SharePoint;
namespace HelloWorld{
class Program {
static void Main(string[] args)
{
const string siteURL = "http://localhost";
using (SPSite site = new SPSite(siteURL))
{//获取对站点集对象的引用
SPWeb web = site.RootWeb;//获取对根站点的引用
foreach (SPList list in web.Lists)
{//遍历根站点下所有的列表
if (!list.Hidden)
{//如果该列表不是隐藏列表
Console.WriteLine(list.Title);
}}}}
SPWeb web = site.OpenWeb(“WebURL”); //返回某个指定站点的SPWeb对象 SPWeb web = site.RootWeb; //返回根站点的SPWeb对象
//遍历站点集下的每一个站点
SPSite site = new SPSite(“SiteURL”);
//调用SPSite的AllWebs成员返回所有SPWeb的集合SPWebCollection
foreach(SPWeb web in site.AllWebs){
Console.WriteLine(“Web site: {0}”, web.Url);
web.Dispose();//通过AllWebs取得的SPWeb对象要注意释放
}
如果代码运行在SharePoint Foundation 的环境下,比如运行在某个SharePoint站点画面内的Web部件或者跟某个列表绑定的事件处理等情况下,可以直接调用上下文环境获得对站点集或者站点对象的引用,但请注意从上下文中获得的站点集或站点对象不应释放,否则会造成程序异常运行。
SPSite site = SPContext.Current.Site; //获取当前所在站点集对象
SPWeb web = SPContext.Current.Web; //获取当前所在站点对象
SPListCollection lists = web.lists; //获取站点下的所有列表集合
SPList list = lists[index]; //通过索引获得对列表对象的引用
SPList list = lists[“Announcement”]; //通过列表名获得对对象的引用
//通过列表ID获得对对象的引用
Guid listID = new Guid(“{1893wr25-n900-e230-606b-df14bbi4512}”);
SPList list = lists[listID]; //通过列表URL获得对对象的引用
SPList list = web.GetListFromUrl[“http://localhost/lists/announcements/allitems.aspx”]; //通过服务器相对路径获得对对象的引用
SPList list = Web.GetList[“/lists/announcements”];
SharePoint2010 里增加了一个新的方法
Microsoft.SharePoint.SPListCollection.TryGetList (string listTitle),
此方法在获取列表失败后返回NULL,便于之后对返回的列表对象进行判断,是否继续执行代码而不是直接跳到异常处理代码块。
SPListCollection lists = web.lists;
SPList list = lists.TryGetList(“Announcements”);
如同前面在介绍功能的时候介绍到的,文档库是一种特殊的列表,事实上从对象模型角度,我们更能这么说,查看SharePoint Foundation API 文档,我们会发现文档库对象 Microsoft.SharePoint.SPDocumentLibrary正是继承自列表对象Microsoft.SharePoint.SPList。 在大多数的情况下,我们都可以直接通过SPList对象来操作文档库,只有在特殊的情况下,例如下例所示,需要获取某文档库内所有被签出的文件列表的时候,我们才需要用到SPDocumentLibary对象。