前几天在weibo上被人问到,如何方便快捷的实现一个SharePoint计数器呢?嗯,在本文里,我尝试用最简单的方法,来创建一个SharePoint网站计数器。在开始之前,让我们先为这个计数器的功能作如下设定: 这是一个最单纯的计数器,它的作用就是一个:记录网站的访问量。 当用户第一次打开网站的任何页面时,都会为计数器+1,但是用户接着刷新页面或浏览网站其它页面时,计数器不再累计增加。换句话说,我们的这个计数器将是一个真正的访问量计数器,而不是Page View计数器。 为了让我们的计数器足够的“轻量级”,同时减少它对..
类别:未分类|阅读(139)|回复(1)|(1)阅读全文>>
SharePoint 2010支持Linq to SharePoint,让程序员可以使用Linq语法直接访问SharePoint 2010网站中的数据。但是在默认情况下,Linq to SharePoint不支持权限提升,也就是说,如果在代码中尝试通过SPSecurity.RunWithElevatedPrivileges()方法来提升执行权限,你可能会发现,代码并不会如你所愿的以系统帐户的身份,访问SharePoint网站的数据。 下面是一段典型的权限提升的代码,在匿名委托方法中,首先构造了新的SPSite和SPWeb对象,然后使用Linq to SharePoint查询了一个列表中所有列表项的标题。虽然看起来Linq to SharePoint好像会..
类别:未分类|阅读(96)|回复(1)|(0)阅读全文>>
Visual Studio 11 Developer Preview版本在几个月之前就发布了出来,通过这个预览版,SharePoint开发人员可以了解Visual Studio 11中内置的有关SharePoint开发的新功能。Visual Studio 11内置支持的SharePoint版本仍然是SharePoint 2011。 在这篇网页上,你可以了解使用Visual Studio 11开发SharePoint 2011应用程序的新功能。最有特色的,是Visual Studio 11中内置了Content Type设计器和List Template设计器,有了这些设计器的帮助,开发人员终于可以方便快捷的在自己的项目中添加内容类型和列表模板了,不再需要折腾让人头疼的CAML..
类别:未分类|阅读(62)|回复(0)|(0)阅读全文>>
为了让SharePoint的搜索组件能够检索外部内容源(外部的数据库、业务系统、二进制文件等等等等),通常需要创建一个自定义的Indexing Connector。Indexing Connector是一种基于SharePoint 2010中的Business Connectivity Services和Search Connector Framework的组件,它替代了以前的Protocol Handler,成为了SharePoint 2010(和FAST Search for SharePoint 2010)所支持的主要的外部数据爬网扩展方式。(SharePoint 2010仍然支持自定义的Protocol Handler。) 在通过BCS的方式创建一个Connector之后,可能面临的问题之一,就是需要..
类别:未分类|阅读(279)|回复(2)|(2)阅读全文>>
当我们使用SharePoint 2010所提供的搜索功能时,在搜索结果的左侧,有一个搜索结果优化区域。通过这个区域,用户可以进一步的精简搜索结果。比如,仅仅显示类型为Word文件的搜索结果,或者仅仅显示作者为“kaneboy”的搜索结果。 image 这个优化区域内置了最常见的几个精简项目,包括类型(搜索结果是何种类型)、来源(搜索结果来自于哪个网站)、作者、修改日期等。如果在文档管理系统中使用了SharePoint 2010新的托管元数据服务中的术语来定义了企业关键字,那么这些关键字也会自动出现在优化区域中。 除了内置的这些精简项目,管理员可以添加更多的额外精简项目。不过如果希望某个属性能作为一个精简项目,管理员需要首先将它定义为搜索服务中的托管属性。 比如,在文档系统中,我们定义了一个专门的字段,“技术等级”,来描述所有技术文档的难度。这个字段的内部名称是“TechLevel”。 image 首先,在SharePoint 2010搜索管理中对所有内容进行一次完全爬网。如果爬网引擎发现了爬网内容有一个额外的字段,它会将这个字段作为已爬网属性存储到搜索数据库中。 接下来,我们需要将这个已爬网属性定义为托管属性。从SharePoint 2010管理中心里面,通过“管理服务应用程序 - Search Service Application - 元数据属性”,就打开了元数据属性管理界面。点击“新建托管属性”。 为新托管属性取名为“TechLevel”,然后,我们需要将它与已经存在的那个已爬网属性关联起来。点击“添加映射”按钮,然后搜索“TechLevel”(因为这是那个字段的内部名称),找到这个已爬网属性。将它与新托管属性建立起映射。 image 最后这个新托管属性的定义如下。
类别:未分类|阅读(288)|回复(2)|(3)阅读全文>>
当大家需要扩展一个SharePoint列表/文档库的数据结构时,就会为列表/文档库创建新的字段(栏)。不管是直接为列表/文档库新建字段,还是在网站集里面创建网站栏,作为管理员,最好使用一些“最佳实践”来为字段命名。使用正确的字段名,在未来的配置、管理、开发过程中,都可以节省很多的时间和精力。 每个SharePoint字段实际上有两个名称,一个是“标题”(Title,有时候也把它叫做“显示名称”),一个是“内部名称”(Internal Name)。平时用户在列表视图界面上看到的,都是字段的标题。字段的内部名称可以看作是字段的唯一标识。如..
类别:未分类|阅读(45)|回复(0)|(0)阅读全文>>
很多开发人员喜欢在ASP.NET程序中使用Session,用它来记录当前登录用户的一些信息。但是在SharePoint 2010系统中,默认是禁用Session功能的。如果在一个应用程序中使用了Session,你很可能会发现代码会抛出一个“引用的对象没有实例化”异常。如果通过Visual Studio调试一下代码,就能发现HttpContext.Session属性返回的是null。 image 要在一个SharePoint 2010程序中使用Session,开发人员会面临一些潜在的问题。SharePoint 2010系统很可能被部署为一个服务器场的模式,它可能包含有多台Web前端服务器,用户的Http请求会被NLB机制分发到多台Web前端服务器的任意一台上。这就要求开发人员应该尽可能的编写出“无状态”的代码,也就是说,代码不能依赖于某一台具体的服务器,因为开发人员没有办法确定自己的代码会始终运行在一个服务器上。有可能一个用户浏览一个页面时,它的请求被分配到Web服务器A,然后当用户刷新一下页面,这次请求则被分配到了Web服务器B。 在这样的服务器场模型中,代码在服务器的内存里面保存的任何数据,都会随着下次用户刷新后,处理用户请求的服务器转移,而变得没有意义。这也是编写大规模分布应用代码的一个很典型的挑战。 当编写有可能运行在服务器场中的分布式应用时,通常都会引入一个专门的分布式数据存储或分布式缓存方案。比如说,有名的Memcached就是专门干这事儿的。 好吧,稍微扯远了一点。无论如何,SharePoint 2010由于某种原因,默认禁止在代码中使用Session。禁止的理由很可能是为了预防开发人员写出过于依赖Session的“有状态”代码,因为ASP.NET的Session默认是保存在服务器的内存中。一旦这些代码被部署到分布式服务器场环境中,它们就很可能由于依赖仅仅存储在某一台服务器内存中的Session数据而出错。 “你就别忽悠了,不要以为我们不知道ASP.NET的Session除了默认的InProc模式,还支持StateServer和SQLServer模式!”嗯,是的,ASP.NET的Session其实是可以配置成StateServer和SQLServer模式。StateServer模式是使用一台特定服务器上的一个Session State服务,来为服务器场中的所有服务器提供状态保存服务,SQLServer模式则是将所有状态信息保存到SQL Server数据库中。这两个模式都是能够很好的支持分布式服务器场模型的。 所以,对于喜欢在代码中使用Session的同学而言,我们可以大胆的通过修改Web应用程序的web.config文件,手工启用Session。不过,稍等,SharePoint 2010其实已经内置了一个PowerShell指令,让我们轻松的在服务器场里面启用Session。这个指令就是Enable-SPSessionStateService。 image 如上图所示,打开SharePoint 2010 Management Shell,输入如上指令,就可以在SharePoint配置数据库所在的SQL Server服务器上,自动创建一个名为“SharePoint_Session_State”的数据库,然后在所有Web应用程序的web.config中自动添加相应的条目。 image 这个自动添加的条目,指明了Session将使用SQLServer模式以及存放Session的数据库连接字符串。打开SQL Server Management Studio,就能找到这个由Enable-SPSessionStateService自动创建的数据库,它仅包含2个Table。
类别:未分类|阅读(291)|回复(3)|(2)阅读全文>>
2011-07-11 22:28:06
如果你想要为你的SharePoint 2010服务器场安装SP1,相信本文可以提供一些重要的指导。 首先,在真正动手之前,建议你阅读下面这几篇blog: SharePoint产品组博客上有关SP1的说明 Erucy同学有关SharePoint 2010 SP1的一篇说明 Jie Li同学对SharePoint 2010补丁的一些“内幕”说明   下面是所有与SharePoint系统相关的产品(与组件)的SP1补丁包的下载地址,以及其所对应的KB文章。 程序包名称 如何获取该程序包 知识库文章 Microso..
类别:未分类|阅读(833)|回复(0)|(0)阅读全文>>
在上一篇“创建与SharePoint 2010风格一致的下拉菜单”文章中,演示了如何添加一个额外的菜单到页面顶端,并使其的样式风格与SharePoint 2010内置的菜单保持一致。如果只需要创建一个子菜单项目固定的菜单,那么这篇文章里面的包含的内容已经足够了。但是如果在设计这个菜单的时候,我们并不确定需要向菜单中加入什么菜单项呢? 在SharePoint企业应用开发的过程中,有时候我们会希望能够创建一个可扩展的菜单。最开始的时候,开发人员在SharePoint网站页面的某个位置添加一个菜单,之后,就允许其他开发人员使用一种标准的扩展方式,..
类别:未分类|阅读(478)|回复(3)|(3)阅读全文>>
在笔者公司中,SharePoint得到了大规模的使用。最近,在IT托管的SharePoint 2010系统中,页面最上方被统一加上了一个额外的区域,右上角放置了两个额外的下拉菜单。 image 这两个下拉菜单为用户提供了一些快捷链接,包括访问IT的Support网站、查看当前网站的信息,以及从系统中申请一个新的SharePoint网站等。
类别:未分类|阅读(814)|回复(2)|(3)阅读全文>>
先从一个简单的问题说起。 前两天在网上,有网友问我这样一个问题:“上载到SharePoint 2010文档库中的一个PDF文件,当直接点击此文件链接时,为什么浏览器弹出的对话框只有保存,而没有打开?” image 就像上面的截图所显示的,在浏览器弹出的对话框上,只能让用户保存(Save)的选项,而没有一个打开(Open)的选项。但可能有人会记得,以前SharePoint 2007的时候,并不是这样的。用户直接点击一个存放在SharePoint 2007文档库里面的PDF文件时,浏览器会提示用户,可以直接打开它,然后本地安装的PDF Reader就会直接打开这个PDF文件,开始阅读。 先说解决这个问题的方法。打开SharePoint 2010管理中心,管理Web应用程序,选择一个Web应用程序,点击Ribbon区域的“常规设置”,然后在弹出的设置对话框中,将“浏览器文件处理程序”这个设置项从默认的“严格”,修改为“许可”。 image 搞定!你会发现修改了这个设置之后,浏览器会重新显示出“打开”选项,让用户可以直接打开PDF文件。 好了,如果你只是想解决这个问题,可以不用继续往下阅读了。 嗯,想知道为什么?好吧,这就是原因。重新将Web应用程序常规设置中的“浏览器文件处理程序”设置项改回默认的“严格”。打开文档库,这次在点击PDF文件链接之前,打开浏览器的Developer Tools(在IE浏览器中是通过F12打开它,下面将使用IE浏览器做例子,FireFox和Chrome也有各自的类似工具可以使用)。在“Network”选项卡中点击“Start capturing”按钮,它会捕获当前浏览器窗口与服务器之间的所有网络通信。然后,点击那个PDF文件链接。 image 在“Network”选项卡里面,找到用户点击PDF链接时所产生的网络请求,双击它,就可以看到这次请求的所有详细的Request和Response信息。点击“Response headers”选项卡,就可以看到从SharePoint 2010服务器所返回的HTTP头信息。嗯,如下图所示,你会看到一个有趣的头信息,“X-Download-Options = noopen”。
类别:未分类|阅读(1360)|回复(1)|(3)阅读全文>>
2011-04-30 21:34:56
什么是搜索范围?当我们使用百度的时候,就能看到它们。为了帮助用户更精确的找到自己想要的内容,可以定义一些搜索范围,这样用户通过使用搜索范围,就能告诉搜索引擎,自己想要搜索的内容的范围,以得到更精准的结果。 image SharePoint Server 2010内置的搜索功能也支持搜索范围。SharePoint 2010已经内置定义好了两个搜索范围:“所有网站”和“人员”。前者包括所有内容源中的所有内容,后者则只包含了所有用户(来自于用户配置文件)。如果需要,管理员也可以添加额外的搜索范围,帮助用户更方便的搜索到希望的内容。 要创建一个自定义搜索范围,并使其显示在SharePoint 2010搜索中心,需要进行一些额外的设置。本文将演示为SharePoint 2010系统添加一个“Word文档”搜索范围,并使用户可以通过搜索中心,方便的使用这个搜索范围来进行Word文档的搜索。 (一) 在搜索服务应用程序中添加搜索范围 打开SharePoint 2010管理中心,通过“管理服务应用程序 - Search Service Application”打开搜索管理界面。点击搜索管理页面左侧的“范围”链接,然后点击“新建范围”。 image 为新范围取名为“Word文档”,然后在目标结果页面中输入“WordResults.aspx”这个页面。别担心,稍后我们会在搜索中心网站中,把这个页面创建出来。这个页面将用来显示“Word文档”搜索范围的搜索结果。 接下来,为“Word文档”范围添加规则。规则定义了哪些搜索结果是属于某个搜索范围的。规则有多种类型,既可以使用URL匹配(比如某个路径下的内容属于某个范围),也可以使用属性(比如凡是作者等于kaneboy的内容属于某个范围),或内容源(比如凡是来自某个BCS外部数据内容源的内容属于某个范围)来定义规则。 image 由于只希望扩展名为“.doc”和“.docx”的文件出现在“Word文档”搜索范围中,所以需要定义一个属性查询类别的规则,并添加一个“FileExtension = docx”的属性查询条件。在规则行为中,选择“包含”。如法炮制,为“Word文档”范围再添加一个“FileExtension = doc”的规则。定义好这两个规则的搜索范围设置界面如下图。
类别:未分类|阅读(211)|回复(1)|(2)阅读全文>>
当我们在一个SharePoint Web应用程序中创建新网站集时,虽然我们可以指定网站集的路径,但是网站集的主机头,似乎必须使用Web应用程序所定义的主机头。比如,当在“http://sp2010”这个Web应用程序中创建一个新网站集时,网站集的路径可以是下面这些格式:
■ http://sp2010/sites/itg (通过使用默认定义的“sites”管理路径)
■ http://sp2010/itg (通过创建一个新的“itg”管理路径) image 但是无论使用哪种路径合适,这个新网站集的主机头仍然需要使用“http://sp2010”,这个主机头是在创建Web应用程序时,指定给Web应用程序的。 实际上,SharePoint是允许我们创建自定义主机头的网站集的。比如,在“http://sp2010”Web应用程序里面,我们完全可以创建一个访问路径为“http://itg.contoso.com”的网站集。 当然,如果你要使用一个自定义的主机头,首先需要确保DNS系统能够正确的将这个主机头的域名解析到正确的IP地址上。比如,如果需要使用“itg.contoso.com”作为新网站集的主机头,可能就需要在DNS服务器上添加对这个域名的解析记录。 image 要创建自定义主机头的网站集,不能通过Web UI界面完成,而必须使用PowerShell指令。打开SharePoint服务器上的SharePoint 2010 Management Shell,然后使用下面这行指令来创建自定义主机头的网站集: New-SPSite http://itg.contoso.com -Name "Contoso IT Group" -OwnerAlias contoso\administrator - HostHeaderWebApplication http://sp2010 New-SPSite的4个参数分别指定了新网站集的路径、名称、所有者和所属的Web应用程序。 image 在管理中心,查看Web应用程序中的网站集时,就会看到这个拥有自定义主机头的网站集。
类别:未分类|阅读(479)|回复(1)|(1)阅读全文>>
SharePoint 2010支持同一个网站呈现出不同语言的UI。比如,一个中文版的SharePoint 2010系统,管理员可以在服务器上安装SharePoint 2010英文语言包,然后在网站设置的“语言设置”中,选择“英语”为备用语言。 image 然后用户就可以随时使用页面右上角的用户菜单,将当前网站的显示UI,在多个语言之间进行切换。 image 如果你尝试一下这个功能,就会发现一个有趣的现象。对于SharePoint 2010的内置列表和文档库,它们的名称,以及所有字段的名称,都会根据当前的UI语言,显示成不同的语言文字。比如,这是“共享文档”在中文UI语言下所显示的样子: image 如果这时将UI切换成英文,那么它就会变成:
类别:未分类|阅读(395)|回复(1)|(2)阅读全文>>
本周六(10月30日),我会参加在利星行广场的SharePoint技术交流会,并讲一节“SharePoint 2010 沙盒解决方案”的课程。有兴趣的同志们可以去参加这个活动。 活动地点:望京利星行广场C座微软大厦三层306室(微软中国公司所在) 时间:9:00 – 18:00(8:30开始签到) 费用:无。(但午餐需自己解决。) 活动详情:http://www.msiw.net/Pages/2010%E5%B3%B0%E4%BC%9A%E6%B3%A8%E5%86%8C.aspx See you there!
类别:未分类|阅读(66)|回复(0)|(0)阅读全文>>
在以前的博客中,我曾经介绍过如何在SharePoint 2010系统中安装和配置RBS FILESTREAM Provider,实现将SharePoint中的文件存储到磁盘文件系统中。但是当用户在SharePoint中上载文件时,文件的二进制内容就会通过RBS FILESTREAM Provider,写入到指定的磁盘文件夹之中。通过RBS可以极大的提高SharePoint存储文件的能力,也有效的使SharePoint的内容数据库不会跟着文件数量的增多而不断膨胀。 但是当用户从SharePoint网站上删除一个文件时(并且已经将文件彻底的从SharePoint回收站中删除),RBS FILESTREAM Provider并不会“真正”的从..
类别:未分类|阅读(139)|回复(0)|(0)阅读全文>>
嗯,是的,最近闹得沸沸扬扬的ASP.NET Security Vulnerability同样会影响SharePoint Server。如果你手头有正在运行的SharePoint生产服务器(特别是服务器是用来提供Internet Web网站服务的情况),请确保阅读了这篇文章。Erucy已经写了一篇专门的文章讲述SharePoint 2007/2010的workaround。
类别:未分类|阅读(72)|回复(1)|(0)阅读全文>>
相信不少人都希望把SharePoint网站内置的那个顶部导航菜单,换成自己希望的样式。由于SharePoint 2007/2010的网站导航基本上基于标准的ASP.NET SiteMap模型,所以只要你对ASP.NET SiteMap有一些了解,就能创建一个自定义的导航菜单。 在开始之前,让我们先从网上随便找一个样子比较cool的菜单控件。在下面的示例中,我会选择使用Smooth Navigation Menu这个jQuery控件,来渲染出SharePoint网站的顶部导航菜单。将Smooth Navigation Menu控件相关的.js、.css、.gif文件统统下载下来,我们将把它们都放进SharePoint项目中。 打开Visual..
类别:未分类|阅读(2283)|回复(4)|(4)阅读全文>>
一个服务应用程序除了可以为服务器场内的网站提供服务之外,还能发布给其他服务器场,为其他服务器场中的SharePoint网站提供服务。比如,如果企业中存在着多个服务器场,它们都需要某个服务器场中的“企业全局元数据”服务应用程序中所存储的公用元数据,那么管理员可以将这个服务器场中的“企业全局元数据”服务应用程序,发布给企业中所有SharePoint 2010服务器场使用。下图显示了在SharePoint 2010管理中心发布一个服务应用程序时的界面。 image SharePoint 2010已经包含了一组内置的服务应用程序,它们为SharePoint 2010网站提供了诸多后端服务,是组成SharePoint 2010的重要组成部分。下面的表格列出了主要的SharePoint 2010内置服务应用程序,以及它们的简要说明。 服务应用程序 描述 是否存储数据 是否可发布 SharePoint Foundation 2010 SharePoint Server 2010 标准版 SharePoint Server 2010 企业版 Access Services 在浏览器中查看与编辑Microsoft Access 2010数据库。 仅缓存数据 否 不包含 不包含 包含 业务数据连接 访问和修改后端业务系统的数据。 使用数据库存储 是 包含 包含 包含 Excel Services 在浏览器中查看Excel文件。 仅缓存数据 否 不包含 不包含 包含 Managed Metadata Service 提供了对企业级托管元数据的存储和管理,同时可以在网站集之间共享内容类型。 使用数据库存储 是 不包含 包含 包含 PerformancePoint 提供了PerformancePoint Services所包含的BI报表功能。 仅缓存数据 否 不包含 不包含 包含 PowerPoint 在浏览器中查看、编辑和广播PowerPoint幻灯片。 仅缓存数据 否 不包含 不包含 包含 搜索 提供了SharePoint 2010的企业级搜索功能。 使用数据库存储 是 不包含 包含 包含 安全存储服务 用来存储访问其他应用系统的用户凭证信息,这些凭证信息可用于SSO单点登录场景。 使用数据库存储 是 不包含 包含 包含 状态服务 暂时存储用户的会话(Session)数据。 使用数据库存储 否 不包含 包含 包含 使用率和运行状况数据集 收集用户使用率和运行状况数据,提供相关的数据报表。 使用数据库存储 否 包含 包含 包含 User Profile 为“我的网站”、配置文件页面、社会化标签和其他社会化功能提供支持。 使用数据库存储 是 不包含 包含 包含 Visio Graphics Service 在浏览器中查看Microsoft Visio图形。 仅缓存数据 否 不包含 不包含 包含 Web分析 提供Web Service接口。 不存储 是 不包含 不包含 不包含 Word Automation Services 进行批量自动化文档转换操作。 仅缓存数据 否 不包含 不包含 包含   在上个版本的SharePoint中,只有Office SharePoint Server 2007才具有共享服务提供程序架构,而Windows SharePoint Services 3.0是没有使用共享服务提供程序架构的。但是对于SharePoint 2010,无论是SharePoint Foundation 2010,还是SharePoint Server 2010,都使用了统一的服务应用程序架构。但SharePoint Foundation 2010、SharePoint Server 2010标准版和SharePoint Server 2010企业版所内置的服务应用程序数量是不同的。 除了上面的表格所列出的服务应用程序之外,在为SharePoint 2010系统安装了额外的Office Web Applications和Project Server组件时,它们都会向服务器场中注册更多的服务应用程序。 从上面对SharePoint 2010服务应用程序架构的讨论中,我们可以了解到,服务应用程序架构比上个版本的共享服务提供程序提供了更好的灵活性,并构建起一个强大的后端服务架构。通过服务与服务应用程序,SharePoint 2010将前端的网站与后端的服务有效的进行了分离。 最后需要提醒的是,并非所有SharePoint 2010服务都是基于服务应用程序架构来构建。例如, “Microsoft SharePoint Foundation 沙盒代码服务”服务就并非基于服务应用程序架构,实际上,它使用了一个名为“SPUserCodeV4”的Windows服务来实现自己的功能。[/img]..
类别:未分类|阅读(326)|回复(1)|(1)阅读全文>>
在第(1)篇文章中,回顾了一下SharePoint 2007中的Shared Services Provider(SSP)架构。从这篇开始,将开始讲述SharePoint 2010中的服务应用程序架构。 在SharePoint 2010中,微软重新设计了共享服务提供程序架构,将其改进成了服务应用程序架构。相比共享服务提供程序架构,服务应用程序架构有更好的灵活性。如果一个SharePoint 2010服务实现了服务应用程序框架,那么管理员就可以根据需要,在服务器场中创建一个相应的服务应用程序,来提供此服务。当然,管理员也可以为一个SharePoint 2010服务,创建多个服务应用程序。每个服务应..
类别:未分类|阅读(2746)|回复(1)|(0)阅读全文>>
SharePoint 2010认证考试出来之后,去把几个考试都考了一遍:70-573、70-576、70-667、70-668。如果你正有计划也去参加这几门认证考试,我可以提供的建议是:不要在11:30开始考70-668,否则到12:00吃饭的时候,你很可能还没有答完题目。70-668包含不少场景题,也就是给一个场景,包含各种Business Requirements、Technical Requirements、Recovery Requirements之类,然后基于此场景选出最佳方案。阅读并理解场景会花费不少时间。 嗯,言归正传。如果你曾经使用过SharePoint 2007,一定知道在SharePoint 2007中有一个叫做“共享服务提..
类别:未分类|阅读(550)|回复(2)|(1)阅读全文>>
是的,是的,我知道Visual Studio 2010已经提供了“可视化Web部件”模板,所以在2010版本中,确实没有理由再使用QuickPart之类的工具了(虽然QuickPart仍然支持几个VS2010可视化Web部件模板仍然不支持的功能,例如可以直接在用户控件上实现自定义属性和Web Part Connection)。但是,有很多正在使用QuickPart的SharePoint Server 2007的网站,在升级到SharePoint 2010版本后,仍然希望页面上的QuickPart能正常继续工作。

如果在使用QuickPart的时候,你是将.ascx文件都放到了每个Web应用程序的wpresources文件夹中,那么实际..
类别:未分类|阅读(529)|回复(1)|(0)阅读全文>>
当程序员使用Visual Studio 2010为SharePoint 2010创建应用程序时,可以创建两种类型的解决方案,服务器场解决方案和沙盒解决方案。比如,打开Visual Studio 2010,新建一个空白SharePoint项目,你看到的第一个界面就是如下这个对话框。

image

服务器场解决方案(或简称为场解决方案)和SharePoint 2007一样,是一种被完全信任的解决方案。场解决方案可以包含能放到解决方案包里面的所有SharePoint组件和元素,比如应用程序页、可视化Web部件等等。在SharePoint 2010系统上安装场解决方案包,需要系统管理员在SharePoint服务器上,打开命令提示符窗口或PowerShell窗口,输入相应的命令行指令或Cmdlet,将这个场解决方案包安装到SharePoint服务器场里面。

如果你的客户对SharePoint系统有严格的管控流程,那你就惨了。你辛辛苦苦的把代码里面的Bug全部修正之后,把项目打包成更新的解决方案包,然后,身为开发人员的你必须填写N张表格,接着就只能眼巴巴的等着管理服务器场的IT人员帮你把这个更新的解决方案包部署到服务器场里面,因为只有他们才有权限能在服务器上直接操作。如果客户每次还需要你去解释,到底每次更新都做了些什么,对服务器有何影响,那你就更加会头大了。

于是SharePoint 2010引入了沙盒解决方案的概念。说到“沙盒”,嗯,这可是好东东啊。这些年整个开发平台都在围着“沙盒”转,JVM就是一个“沙盒”,CLR也是一个“沙盒”。有了“沙盒”,就能将自定义代码限制在其中,即使它一不小心crash掉,也能最小化带来的影响。

SharePoint沙盒解决方案的作用也差不多。如果开发人员将自己的SharePoint 2010项目创建为沙盒解决方案,那么SharePoint 2010会在一个特定的“沙盒”中运行沙盒解决方案,并随时监控“沙盒”里面代码的运行情况。

对于场解决方案里面所包含的代码,除了少数组件外,其他大部分组件,例如Web部件、页面、事件处理程序之类的,都是被载入到w3wp.exe进程中运行。这个是理所当然的,因为SharePoint就是一个ASP.NET Web应用嘛,所以各种自定义代码自然会被ASP.NET Runtime给载入到w3wp.exe进程中。

但是如果是沙盒解决方案,其中所包含的代码将运行在一个单独的进程中(准确的说,有好几个进程都被用于运行沙盒解决方案里面的代码),而并非w3wp.exe进程。

例如,开发人员将一个自定义Web部件打包到一个沙盒解决方案包,部署到一个网站集并激活,然后将这个Web部件给放置到某个页面上。当有用户访问这个页面时,w3wp.exe就会发现,需要运行那个Web部件中所包含的自定义代码,这时,w3wp.exe进程会联系(本地或远程服务器上的)SPUCHostService.exe进程,告诉它需要以“沙盒”模型执行一些代码。SPUCHostService.exe进程会通知SPUCWorkerProcess.exe进程载入需要运行的代码,SPUCWorkerProcess.exe进程会通过SPUCWorkerProcessProxy.exe来完成对SharePoint对象模型的调用,并执行那个Web部件中的自定义代码。这些代码执行完成之后,会将执行结果最终返回到w3wp.exe进程,w3wp.exe拿到这个自定义Web部件的执行结果,就可以继续将页面执行下去了。

要想SharePoint 2010服务器场能执行沙盒解决方案,就需要在至少一台服务器上启动“Microsoft SharePoint Foundation沙盒代码服务”。从SharePoint 2010管理中心打开“服务器上的服务”页面,就可以将这个服务在指定的物理服务器上启动或停止。

image

如果你的服务器场包含了n台服务器,那么你既可以在所有物理服务器上启动“Microsoft SharePoint Foundation沙盒代码服务”,也可以只选择在某几台应用服务器上启动“Microsoft SharePoint Foundation沙盒代码服务”。甚至最极端的,你可以准备一台CPU和内存都很强大的服务器,加入到服务器场中,然后专门在这台服务器上运行“Microsoft SharePoint Foundation沙盒代码服务”。这样,无论服务器场中的哪一台前端服务器需要运行沙盒解决方案中的自定义代码,这些请求都会被发送到这台强大的物理服务器。万一沙盒解决方案里面的自定义代码很烂,会严重影响运行代码的服务器的CPU或内存资源,那么也只会影响到这一台特定的服务器。

当w3wp.exe进程需要找到一个地方运行沙盒代码时,它会基于某种预先制定的策略。SharePoint 2010有两种策略可用:1、总是在得到请求的同一台服务器上运行沙盒代码;2、使用一种内置的优化规则来传递执行请求。第1种策略非常简单,w3wp.exe总是会将执行沙盒代码的请求传递给自己这台服务器上的SPUCWorkerProcess.exe进程,也就是由当前服务器负责运行沙盒代码。第2种策略类似于一种“负载平衡”机制,SharePoint会检查服务器场中哪些服务器可以用来运行沙盒代码,然后按照一个优化规则,让w3wp.exe将执行代码的请求传递到某台服务器。这个优化规则简单来说就是,如果上次是服务器A执行了某个沙盒解决方案里面的一个Web部件代码,那下次会优先考虑继续让服务器A执行同一个Web部件里面的代码。

具体选择哪个策略,可以在SharePoint 2010管理中心打开“系统设置 - 管理用户解决方案”页面,然后就能选择2个策略中的某一个了。

image

沙盒解决方案中包含的代码除了会在单独的进程中运行之外,它还有很多的限制。首先,SharePoint 2010使用了CAS(Code Access Security)来限制了沙盒代码能做的事情。在“Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\CONFIG\wss_usercode.config”文件中定义了沙盒代码的CAS策略,沙盒代码的权限被这个CAS策略限制为:

●SecurityPermission.Execution:可以执行托管代码;
●AspNetHostingPermission = Minimal:可以在ASP.NET中运行,但不能访问服务器上的任何资源;
●SharePointPermission.ObjectModel:可以使用SharePoint对象模型。

由于CAS的限制,沙盒代码能够做的事情是很有限的,比如,它不能访问服务器上的任何文件,也不能访问数据库。除了这些限制之外,对于SharePoint对象模型的调用,SharePoint系统对沙盒代码进行了进一步的限制。

虽然CAS中给予了沙盒代码“SharePointPermission.ObjectModel”权限,但沙盒代码在单独的进程中运行之前,它们都会被经过预先检查,凡是不运行调用的对象模型出现在了代码中,就会直接抛出异常,中止代码运行。禁止在沙盒代码中使用的对象模型包括:

●SPSite的构造函数
●SPSecurity类
●Microsoft.SharePoint.Navigation命名空间下的所有类
●除了SPUtility.SendEmail()和SPUtility.GetNTFullNameandEmailFromLogin()之外的所有SPUtility所提供的方法
●其他...

在SharePoint 2010 SDK中有一个列表,列出了所有允许在沙盒解决方案中被使用的SharePoint对象模型,请参考:http://msdn.microsoft.com/en-us/library/ee537860.aspx。

除了对代码的限制之外,对于能被包含在沙盒解决方案中的SharePoint元素,也有一些限制,下面这些元素都不能被包含在沙盒解决方案中:

●Web应用程序和服务器场级别的Feature
●代码工作流
●内容类型绑定
●<HideCustomAction>元素
●Custom Action group
●应用程序页
●可视化Web部件

SharePoint 2010会严格监控沙盒解决方案中的代码的运行状况。为了限制沙盒代码所占用的服务器资源,SharePoint 2010为每个网站集分配了一定的“点数”,随着沙盒代码的运行,这些“点数”会被逐渐消耗,如果一个网站集所分配的“点数”被消耗完了,那么这个网站集里面所有的沙盒解决方案将暂时不可用,直到第二天“点数”被自动重置为预设置为止。

管理员可以在SharePoint 2010管理中心的“应用程序管理 - 配置配额和锁定”页面为每个网站集指定其可用的“点数”配额。默认每个网站集每天可以消耗的“点数”配额是300。

 
类别:未分类|阅读(726)|回复(4)|(2)阅读全文>>
第二章详细介绍了Visual Studio 2010中内置的SharePoint Developer Tools。发现任何问题,请告诉我(kaneboy [a] gmail.com)。

第二章 使用Visual Studio 2010    2
第一节 建立开发环境    2
2.1.1 建立开发环境的可选方案    3
2.1.2 在Windows 7 x64操作系统中安装SharePoint 2010    6
第二节 SharePoint 2010项目模板与项模板    28
2.2.1 项目模板    28
2.2.2 项模板    3..
类别:未分类|阅读(779)|回复(2)|(1)阅读全文>>
在SharePoint 2010中,如果一个子网站是继承其父网站的权限,那么从网站设置中打开网站权限页面,你会看到:
image

点击Ribbon区域的“停止继承权限”,管理员就可以断掉当前网站与父网站的权限继承,自定义网站的权限设置:
image

但是,如果你还想在网站中创建自定义的权限级别,当点击Ribbon区域的“权限级别”按钮后,你可能会看到:
image 

在上面的截图中,显示网站的权限级别继承自父网站,你不能创建自定义的权限级别。没错,虽然网站的权限设置已经从父网站断开了,但是权限级别仍然有可能继承自父网站。如果你希望在子网站中能创建和管理自定义权限级别,那么...

从“开始”菜单中打开“SharePoint 2010 Management Shell”,然后输入如下这些指令:
类别:未分类|阅读(139)|回复(0)|(0)阅读全文>>
 <<   1   2   3   4   5   >>   页数 ( 1/11 )

我最近发表的评论

SharePoint 2010.. 回复
可能是“Ratings” Feature没有被激..

博客统计信息

51cto专家博客 51cto博客之星
用户名:kaneb0y
文章数:270
评论数:84
访问量:136752
无忧币:2441
博客积分:5372
博客等级:8
注册日期:2010-03-04