SharePoint 已经沙盒

开发、 部署,和监视在 SharePoint 2010 沙盒解决方案

Paul Stubbs

SharePoint 是一个功能丰富的开发平台,带有一个大的社区,积极地开发解决方案。 但是,该质询始终被创建解决方案和一种可信任的方式部署它们之间平衡不会损坏或削弱 SharePoint 场。 场管理员负责维护运行状况和 SharePoint 场的完整性,通常这意味着在测试和验证解决方案部署到服务器场的地方放置复杂、 耗时的过程。 这需要计数器是用于创建 SharePoint 解决方案快速应用程序模型和它复杂化第三方解决方案的部署。 在 SharePoint 2010 新功能称为沙盒解决方案,启用场管理员感到舒适 SharePoint 场,则可以安全颁发机构来管理其网站集中应用程序授予网站集管理员和开发人员提供了很大的灵活性: 即创建解决方案他们知道这些问题的许多将以安全的快速方式部署的地址。

此文章中我介绍 SharePoint 2010 中的如何沙盒解决方案的安全和快速部署的解决方案提供一个框架。 学习如何场管理员可以监视解决方案和网站集管理员如何安装和管理解决方案和功能。 您还看到如何开发沙盒 Web 部件。 let’s 的开头以了解如何将解决方案部署到沙箱。

部署沙盒解决方案

沙盒解决方案的结构是非常类似于场解决方案通常以完全信任权限运行。 主要区别位于和承载解决方案 (它确定解决方案是沙盒解决方案或服务器场解决方案) 的过程中如何部署沙盒解决方案。 这意味着相同沙盒解决方案可以运行与完全信任时它部署在服务器场级别和部分信任,当它部署在站点集合级别。

SharePoint 解决方案是功能和程序集可以包含一个可部署包。 解决方案包是.wsp 扩展名为基于.cab 文件。 visual Studio 2010 SharePoint 项目模板创建.wsp 包文件。 解决方案可能包含许多 SharePoint 的功能,这些功能提供的功能 (如 Web 部件、 列表定义、 模块,和事件接收器。

网站集管理员现在拥有上载、 激活、 删除,颁发机构和管理沙盒解决方案使用是沙盒解决方案的知识库新解决方案库。 库还使网站集管理员监视解决方案已经针对资源配额的使用情况。 (您将看到如何在本文后面的细节)解决方案库是只是一个标准 SharePoint 列表存储.wsp 文件。 它位于在 _catalogs/解决方案 _catalogs 文件夹下。 当您从 SharePoint 2007 网站集升级时,库将添加到您的网站集。 打开 的 图 1 所示通过在网站操作菜单上的第一个单击网站设置解决方案剪辑库。 然后,网站设置页上单击库部分下的解决方案。


图 1 的 SharePoint 解决方案库

沙盒解决方案部署到网站集是.wsp 文件上载到库,并激活它。 单击上载解决方案按钮,可以选择来上载单个.wsp 文件或多个文件。 当上载文档窗体打开时,浏览.wsp 文件或您要部署的文件的位置。

接下来,您将被提示要激活该解决方案。 当激活一个解决方案时,站点集合范围的功能自动激活一样好,但必须转到要激活网站范围的功能,从管理网站功能页中的每个站点。 解决方案库中列出了解决方案已经名称和修改的日期,以及其激活的状态和解决方案所消耗的资源。 仅在已停用它后,您可以从库中删除一个解决方案。 如果要将一个解决方案复制到另一个网站集,保存到磁盘,并将其上载到另一个解决方案库.wsp 文件。

升级沙盒解决方案,也可以在 SharePoint 2010 使用新的解决方案和功能升级的基础结构功能。 若要升级一个解决方案,需要创建.wsp 文件具有新的文件名称但相同的解决方案 id。 最简单的方法是在 Visual Studio 中打开项目并使这些更改将在其后可以通过使用程序包设计器更改包名称。 双击在解决方案中打开包设计器包节点,然后更改包的名称。 就像一个新的包,您现在可以上载沙盒解决方案包。 SharePoint 检测到相同的解决方案 ID 与程序包安装,并提示您升级。 鍗囩骇涔嬪悗看到新的版本被激活和停用旧版本, 中所示 图 2如果浏览该解决方案由安装 Web 部件您可以看到新的版本运行。


图 2 升级沙盒解决方案

构建沙盒 Web 部件

沙盒解决方案的外观和行为类似于服务器场的解决方案,但沙盒解决方案已经程序集必须标记为允许部分受信任的调用方。 项目的属性窗口中配置沙盒解决方案属性。 请记住沙盒解决方案可作为完全信任的解决方案部署,并获得附带运行在完全信任,因为没有任何.wsp 解决方案文件中指定它为沙盒解决方案或服务器场的解决方案的扩展的功能。 这取决于如何部署该解决方案。

最常见类型的沙盒的解决方案之一是 Web 部件。 此部分中我介绍如何创建具有一个 Web 部件的沙盒解决方案和点出一些应该注意的问题。 首先,有两种类型的 Visual Studio 中的 Web 部件 — 可视化 Web 部件和标准的 Web 部件。 视觉 Web 部件包含可用来以可视方式设计的该 Web 部件外观的.ascx 控件。 遗憾的是,您不能使用在沙箱中可视的 Web 部件,因为沙盒解决方案 can’t 部署到 Web 前端,这是.ascx 文件需要在部署的文件。 这意味着您必须创建标准 Web 部件。

从 C# 或 Visual Basic 中新建项目对话框,在 SharePoint 节点下选择空项目开始。 当您创建 SharePoint 解决方案时,项目向导会询问是否要创建该默认一个沙盒解决方案或完全信任的解决方案。 (请参阅 图 3) 此选项适用于可以部署到解决方案库中的 SharePoint 解决方案。 验证网站集的路径后,请单击完成。


图 3 的 新建 SharePoint 项目向导对话框

向解决方案中添加一个 Web 部件从项目的主菜单中选择添加新项,然后从列表中选择 Web 部件项目模板项。 在这时,您有可以部署一个功能完整沙盒 Web 部件。

在沙盒解决方案的开发,期间 Visual Studio 自动部署和激活该解决方案,在解决方案中,当按 F5。 如果浏览解决方案库您可以看到您只需创建并部署的解决方案。 在 的 图 4 解决方案具有默认名称 SharePointProject1。


图 4 SharePoint 项目部署到由 Visual Studio 解决方案库

可以与其他类型的 Visual Studio 项目您可以在沙盒解决方案的代码中设置断点。 但是,Visual Studio won’t 识别断点此时,因为该 Web 部件尚未添加到页。 图 5 ,该值指示包含在 Web 部件的程序集已不被加载附加的进程中所示,您看到空的红色圆圈,具有该断点的代码行的左边距中。 向页中添加该 Web 部件 Visual Studio 将检测该程序集已加载,并将在该断点处停止。 鍗充娇 haven’t 还向项目添加任何实际代码,您可以看到所有内容是在位置和正常工作。


图 5 调试 Visual Studio 中的 SharePoint 解决方案

有关如何实现 SharePoint 沙盒稍有了解可帮助您了解如何调试沙盒解决方案。 您可能熟悉调试在使用 SharePoint 称为 w3wp.exe 的 IIS 辅助进程下运行的完全信任解决方案。 不要在此进程下运行沙盒解决方案。 它们在称为 中可以看到的 SPUCWorkerProcess.exe 沙盒辅助进程下运行 图 6visual Studio 自动将调试器附加到此进程时请按 F5。 如果调试的已部署的解决方案,您需要手动附加到此进程。


图 6 附加到调试沙盒解决方案的 SPUCWorkerProcess

现在 let’s 看几个示例的代码如何运行沙盒解决方案中。 第一个是在沙箱中工作的代码示例。 恰好在 base.CreateChildControls 方法后,您 Web 部件中 CreateChildControls 方法中添加下面的代码。 您可以看到您可以访问 SPLists 集合,可以在网站中返回 SPList 对象数。 列表和库中沙盒解决方案通常工作在完全信任的解决方案中一样。 您是只限制在当前的站点集合。

protected override void CreateChildControls()
    {
      base.CreateChildControls();

      Label ListCount = new Label();
      ListCount.Text = 
        String.Format("There are {0} Lists",
        SPContext.Current.Web.Lists.Count);
      Controls.Add(ListCount);
    }

在沙盒中阻止的另一个示例使用 SPSecurity。 剪切并将以下代码粘贴到您 Web 部件并将其部署到沙箱:

protected override void CreateChildControls()
    {
      base.CreateChildControls();

      SPSecurity.RunWithElevatedPrivileges(
        delegate
        {
          Label ListCount = new Label();
          ListCount.Text =
            String.Format("There are {0} Lists",
            SPContext.Current.Web.Lists.Count);
          Controls.Add(ListCount);
        });
    }

won’t 收到异常,直到沙盒进程中执行代码。 引发该异常是 “ 无法从程序集加载类型 CodeToRunElevated Microsoft.SharePoint、 版本 = 14.900.0.0,区域性 = 非特定于 PublicKeyToken = 71e9bce111e9429c ' ”此异常不安全异常,但一个缺少的类型异常,因为 SPSecurity 类不是沙盒 SharePoint API 的一部分发生。 您可能想知道如何可以有缺少类型运行时异常如果 Visual Studio 编译任何异常没有解决方案。 针对 SharePoint API 的完整版本的 visual Studio 编译,但在运行时,SharePoint swaps 出完整的 API 用于沙盒 API 和此 API 是对运行什么代码。 visual Studio 可帮助您通过创建沙盒解决方案时,为您筛选 IntelliSense 编写有效的代码。 您可以看到 图 7 SPSecurity 类不会出现在列表中。 但是,如果剪切粘贴从完全信任解决方案的代码的代码可能不工作在沙箱中和 Visual Studio 中有没有方法来验证这。


图 7 IntelliSense 筛选可以帮助您创建有效的沙盒解决方案

在沙盒中工作

您已经了解如何部署和构建沙盒解决方案。 现在 let’s 探讨怎样在沙箱中。

沙盒解决方案 Microsoft.SharePoint 命名空间中有权访问大型子集的功能。 实质上是所有类 SPSite 下方都都可用。 这意味着 SPSite、 SPWeb、 SPList,和 SPListItem 都可用。 在沙盒的解决方案中您可以创建 Web 部件、 列表定义和实例、 内容类型和字段、 模块、 声明性的工作流和事件接收器。 SharePoint SDK 中分别介绍了完整的沙盒 API。

一般情况下,沙盒进程阻止您访问网站集中部署解决方案之外的数据。 这意味着,渚嬪 can’t 访问 Internet,以使 Web 服务调用、 can’t 访问硬盘读取或写入文件,以及 can’t 没有被标记为允许部分受信任的调用方的访问代码。 您还 can’t 部署到磁盘或将程序集添加到 GAC 沙盒的解决方案中的文件,与安全相关功能如运行 RunWithElevatedPriviledges 和其他 SPSecurity 方法不被允许。

但是,您可以执行的操作是读取和写入列表和库相同的网站集内。 在沙箱提供足够的功能生成的应用程序在网站级别所需的大多数。 在有时但是,您可能希望启用沙盒解决方案执行如调用 Web 服务或访问数据库的一个受信任的操作沙箱以外到达。 超出沙箱达到最好的方法是使用业务连接服务 (BCS) 来创建外部的内容类型。 然后,您可以读取和写入数据源从沙盒解决方案。 到达沙箱以外的另一个更高级的方式是创建代理调用以在完全信任的进程外沙盒工作进程中运行的类。 此代理类作为场解决方案部署,并可从沙盒解决方案调用。 虽然很本文描述如何创建完全信任代理的作用域以外但应当注意的功能。

监视解决方案

场管理员必须保留 SharePoint 场健康和安全,责任和他们现在有工具来监视和沙盒解决方案上设置配额。 向 SharePoint 场管理员提供了在管理中心中分配给每个网站集的资源配额 UI。 您可以从应用程序管理部分下管理中心页访问配额。 然后单击配置的配额和锁定网站集部分中。 您可以还直接定位到在页上 /_admin/sitequota.aspx 管理中心站点中。

配额和锁定页, 的 图 8 所示,可以选择要使用的网站集。 在网站配额信息部分中,您可以设置用户解决方案资源配额属性。 您可以启用每日上限,并设置允许的点的数量。 默认值为 300 磅。 磅是基于我将稍后解释的因素的数字计算的。 当到达一定数量的点,默认情况下设置为 100,您也可以启用电子邮件通知。 页还告诉您当前使用情况的某一天和平均使用最近的 14 天内。 这两项提供网站集管理员可以监视顶部的解决方案库相同的值。


图 8 场管理员控制资源配额

场管理员还可以通过使用 Windows PowerShell 调整解决方案资源配额。 渚嬪 PowerShell 使得很容易来循环访问每个网站集,这些值重置回发到其默认值。 使用 Get SPSite 命令和真空 foreach 语句,以更改与单个代码行的所有值。 运行此代码、 从开始菜单打开 SharePoint 2010 管理控制台窗口并键入以下命令:

Get-SPSite | foreach-object {$_.Quota.UserCodeMaximumLevel = 300}
Get-SPSite | foreach-object {$_.Quota.UserCodeWarningLevel = 100}

如果您要查看仅当前配额值是什么,您可以运行以下 PowerShell 命令:

Get-SPSite | foreach-object {$_.Quota}

此命令将输出为服务器场中的每个网站集配额属性。 PowerShell 格式设置为这样一个简单列表作为网站集配额属性的输出:

QuotaID                   : 0
StorageMaximumLevel         : 0
InvitedUserMaximumLevel     : 0
StorageWarningLevel         : 0
UserCodeWarningLevel        : 100
UserCodeMaximumLevel        : 300
UpgradedPersistedProperties :

UserCodeWarningLevel 和 UserCodeMaximumLevel 是控制沙盒解决方案的两个配额属性。 您将看到术语 “ 用户代码 ” 和 “ 用户解决方案 ” 引用沙盒代码和解决方案中的某些管理页面和 SharePoint 对象模型中。 这些属性允许您调整分配给每个网站集的磅数。 您还可以调整该算法用于计算什么值得是一个点。 磅根据各种指标计算,这些度量标准旨在监视服务器以准确地反映出服务器的真正的运行状况的资源使用情况。 SharePoint 包含 14 参与配额磅为单位的度量标准。

  1. AbnormalProcessTerminationCount
  2. CPUExecutionTime
  3. CriticalExceptionCount
  4. InvocationCount
  5. PercentProcessorTime
  6. ProcessCPUCycles
  7. ProcessHandleCount
  8. ProcessIOBytes
  9. ProcessThreadCount
  10. ProcessVirtualBytes
  11. SharePointDatabaseQueryCount
  12. SharePointDatabaseQueryTime
  13. UnhandledExceptionCount
  14. UnresponsiveprocessCount

每个跃点数称为一个 ResourceMeasure 包含 ResourcesPerPoint 属性。 ResourcesPerPoint 值除以来计算该点用于该类别的消耗资源。 渚嬪 AbnormalProcessTerminationCount 的 ResourcesPerPoint 值为 1。 每次异常终止沙盒解决方案,添加 1 磅。 如果想增加终止了沙盒解决方案罚点可以将 ResourcesPerPoint 设置为 2 等的另一个值。 如果您不关心此统计数据,您可以使用 0。 其他 ResourceMeasures 可能不具有与事件一一对应。 CPUExecutionTime 跃点数可防止沙盒解决方案占用太多的 CPU 周期。 默认 ResourcesPerPoint 值为 3,600 用于 CPUExecutionTime。

另一个值是一个解决方案获取一个点每次递增的 AbsoluteLimit。 如果一个解决方案超过 AbsoluteLimit 值,它被终止即使不已达到每日的用法限制。 超过 AbsoluteLimit 的值会影响与不同的每日的使用率限制仅在单个解决方案。 这些两个级别的配额限制每日和绝对限制协同工作以保护的服务器场运行状况。 我强烈建议您在不修改 ResourceMeasures,但作为开发人员或系统管理员,您应了解的完全这些机制工作。

虽然 SharePoint 不提供用于调整配额度量标准的管理页,您可以查看和更改使用 SharePoint 对象模型或 Windows PowerShell 值。 下面的 PowerShell 脚本输出所有 14 ResourceMeasure 中的对象包含 ResourceMeasure 中的每个对象的所有属性的列表。 图 9 显示从两个值 AbnormalProcessTerminationCount 和 CPUExecutionTime 的输出示例。

[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
$spusercodeservice = [Microsoft.SharePoint.Administration.SPUserCodeService]::Local
$spusercodeservice.ResourceMeasures

图 9 的 ResourceMeasure 对象的示例输出

MinimumThreshold         : 0
ResourcesPerPoint       : 1
AbsoluteLimit               : 1
Name                    : AbnormalProcessTerminationCount
TypeName                : Microsoft.SharePoint.Administration.SPResourceMeasure
DisplayName                 : AbnormalProcessTerminationCount
Id                  : 878646dd-2460-4e88-83cd-67e938fb069c
Status                  : Online
Parent                  : SPUserCodeService Name=SPUserCodeV4
Version                 : 2308
Properties               : {}
Farm                    : SPFarm Name=SharePoint_Config
UpgradedPersistedProperties     : {}

MinimumThreshold        : 0.1
ResourcesPerPoint       : 3600
AbsoluteLimit               : 60
Name                    : CPUExecutionTime
TypeName                : Microsoft.SharePoint.Administration.SPResourceMeasure
DisplayName              : CPUExecutionTime
Id                  : 418cbb0f-d191-4633-9177-7a4568d11d8d
Status                  : Online
Parent                  : SPUserCodeService Name=SPUserCodeV4
Version                 : 2265
Properties              : {}
Farm                    : SPFarm Name=SharePoint_Config
UpgradedPersistedProperties     : {}

您还可以通过使用 SharePoint 对象模型以编程方式调整值。 您可以获取对沙盒服务引用从称为 SPUserCodeService 对象上的本地静态属性并循环 ResourceMeasures 集合。 例如:

SPUserCodeService userCodeService = 
            SPUserCodeService.Local;

      SPResourceMeasureCollection rmc =
        userCodeService.ResourceMeasures;

      foreach (SPResourceMeasure resourceMeasure in rmc)
      {
        Console.WriteLine(resourceMeasure.Name);
      }

验证在沙盒中的解决方案

SharePoint 沙盒框架提供场管理员监视并验证在沙箱中运行的解决方案的其他的方法。 场管理员可以部署一个解决方案上载到解决方案库时运行的解决方案验证程序。 管理员可以创建允许运行,与特定的证书签名的唯一代码的验证程序渚嬪或他们可以创建一个验证程序,以允许只是 Web 部件。 验证程序的另一种很好用法是服务器场中的日志和目录解决方案如它们被激活。 您可以看到此简单但功能强大的工具可获得对服务器场中运行该解决方案的句柄的场管理员的帮助。

当激活一个解决方案时,将调用每个解决方案验证程序。 如果更新验证程序,解决方案验证再次执行这些在下一次。 通过添加从 SPSolutionValidator 派生的类,可以在 SharePoint 场功能项目内部创建一个验证程序。 验证程序类必须具有 System.Runtime.InteropServices.Guid 属性分配给它。 使用 Visual Studio 工具菜单中的创建 GUID 工具,可以创建一个 GUID 的值。 此值用作 ProviderID 属性。

下一步添加采用对 UserCodeService 的引用的构造函数。 此构造函数调用在 UserCodeService 并验证程序的字符串名称传递基类构造函数。 在此的构造函数中,您必须指定一个 “ 签名"属性以验证程序。 与 Windows 一起提供的默认验证程序将使用值为 1。 如果您正在生成该示例,您可以使用 1234年。 SharePoint 使用该签名属性来确定验证程序是否已更改。 在一个生产验证程序将需要此值是一个包含版本信息的验证程序的哈希。

接下来,重写 ValidateSolution 和 ValidateAssembly 方法。 每个解决方案调用 ValidateSolution 方法一次和每个解决方案中的每个程序集调用 ValidateAssembly 一次。 ValidateSolution 方法传递包含用于验证解决方案的属性数目的 SPSolutionValidationProperties 对象。 最重要的属性是有效的属性。 此属性设置为 False 榛樿鎯呭喌涓嬶,因此,您必须将其设置为 True 或解决方案将会验证失败。 您还可以设置在 ValidationErrorMessage 和该 ValidationErrorUrl 发送回有关解决方案在验证上, 失败的原因和使用 Files 集合可以获得对解决方案程序包中的所有文件的引用。 ValidateAssembly 实例也将传递对除了一个 SPSolutionFile SPSolutionValidatorProperties 的引用是对解决方案在包中程序集的引用。 图 10 解决方案验证程序的范例。

图 10 的 A 解决方案验证程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.UserCode;

namespace SandboxSolutionValidator
{
  [Guid("DAC77CB7-7511-4E7E-8427-B6A57C5F49F7")]
    class SandboxSolutionValidator:SPSolutionValidator
    {
    [Persisted]
    List<string> PutSomeStringsHere;

    private const string validatorName = "Sandboxed solution Validator";

    public SandboxSolutionValidator(
      SPUserCodeService userCodeService) :
      base(validatorName, userCodeService)
    {
      this.Signature = 1234;
    }

    public override void ValidateSolution(
      SPSolutionValidationProperties properties)
    {
      //System.Diagnostics.Debugger.Launch();
      base.ValidateSolution(properties);
       
      //Determine whether the solution is valid
      properties.Valid = true;

      //Iterate over each file in the solution
      foreach (SPSolutionFile file in 
                properties.Files) { }

      //Set the error message and Url if it’s not valid
      properties.ValidationErrorMessage =
        "The solution is not valid";
      properties.ValidationErrorUrl =
        "http://moss.Contoso.com/MyErrorPage.apx";
    }

    public override void ValidateAssembly(
      SPSolutionValidationProperties properties, 
      SPSolutionFile assembly)
    {
      //System.Diagnostics.Debugger.Launch();
      base.ValidateAssembly(properties, assembly);

      properties.Valid = true;
    }
    }
}

您必须将解决方案验证程序添加到 SPUserCodeService SolutionValidators 集合。 执行此操作通过使用 Windows PowerShell,但推荐的方法是使用服务器场级功能部署验证程序。 在功能中使用功能接收方将验证程序添加到集合。 FeatureActivated 事件中 (请参阅 的 图 11) 获得对服务器场已经 SPUserCodeService 的引用。 使用该 SPUserCodeService 创建您的验证程序的实例,然后将该实例添加到该 UserCodeService 的 SolutionValidators 集合。 这些操作可以是有点难调试,但您可以将 Debugger.Launch 命令添加到您的代码。 这将启动 Visual Studio 的一个实例,并将您的代码附加到正确的进程。 务必在完成开发验证程序时删除这些命令。

图 11 部署一个验证程序

public override void FeatureActivated(
        SPFeatureReceiverProperties properties)
    {
      //System.Diagnostics.Debugger.Launch();

      SPUserCodeService userCodeService =
            SPUserCodeService.Local;

      SPSolutionValidator validator = new SandboxSolutionValidator(userCodeService);

      userCodeService.SolutionValidators.Add(
            validator);
    }

您可以使用 PowerShell 可以列出安装在服务器场是一种用于验证安装了哪些验证程序的管理员的快速方法中的验证程序。 SharePoint 2010 技术预览版本附带默认解决方案验证程序。 此验证程序没有集以外的其他有效的属性为 True。 输入下面的 PowerShell 脚本,以列出已安装的验证程序。 您可以看到在 输出 图 12

[System.Reflection.Assembly]::Load(
"Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c");
$spusercodeservice = [Microsoft.SharePoint.Administration.SPUserCodeService]::Local;
$spusercodeservice.solutionvalidators;


图 12 安装解决方案的验证程序

您已经了解如何创建、 部署,并验证您的服务器场中的沙盒代码的小示例。 本示例应使您可以创建您的服务器场提供了极大的灵活性和安全性的丰富而有趣的验证代码。

沙盒 Is 的默认设置

如我提到 Visual Studio 中的默认 SharePoint 项目类型是沙盒解决方案。 这应该是您的脑海中默认 — 您应该考虑创建您的 SharePoint 解决方案沙盒环境中运行。 您已经看到沙盒应用程序都非常能够,可以执行的大多数业务用户所需任务并提供时您需要以安全方式中断能力。 实际的好处是在其中您可以将您的解决方案部署到企业的速度。 您不再需要,请按照 grueling 的测试过程和您创建的每个解决方案的有效性,但始终应遵循良好的软件做法。 网站集管理员将能够控制他们自己的收藏集和运行他们的站点右边的解决方案。 场管理员将会从任务控制的免费和管理解决方案的所有请求安装并能将精力集中在服务器场的具有一组丰富的监视工具的总体状况。

在该结束我预测您将看到的 SharePoint 解决方案分解过程。 看到更的多的编写和部署的企业解决方案和一个巨大提高 SharePoint 社区中,因为解决方案将会更容易可用且易于查找、 安装,并运行。

Paul Stubbs 是一个 Microsoft 技术 evangelist SharePoint 和 Office 侧重于信息工作者开发社区的 SharePoint 和 Office、 Silverlight,和 Web 2.0 社交网络的用户。 他有创作有关与 Microsoft Office、 SharePoint,和 Silverlight 解决方案开发的三种书籍和 的 MSDN Magazine 的几个项目。 他还具有在 Microsoft tech-ed 和 TechReady 会议的讲述。 此外,Paul 曾作为与 Visual Studio Tools for Office在雷蒙德,华盛顿 Office 团队的高级程序经理。 读取位于 blogs.msdn.com/pstubbs 他博客。