`
isiqi
  • 浏览: 15949232 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

MSDN:Windows SharePoint Services 3.0 中使用代码的开发工具和技术(第 2 部分)

阅读更多

摘要:探索 Windows SharePoint Services 解决方案、解决方案体系结构,以及用于创建、部署、维护和升级 Windows SharePoint Services 解决方案的技术。共两部分,本文是第二部分。(打印页数为 26)

Patrick Tisseghem, U2U

2007 年 6 月

适用于:Windows SharePoint Services 3.0、Visual Studio 2005 Extensions for Windows SharePoint Services 3.0

目录

本文是在 Windows SharePoint Services 3.0 中使用代码的开发工具和技术(第 1 部分,共 2 部分)的续篇。

部署 Windows SharePoint Services 解决方案

对前端 Web 服务器或应用程序服务器部署 Windows SharePoint Services 解决方案是分两个阶段执行的,如图 19 所示。

图 19. 部署 SharePoint 解决方案的步骤


部署 SharePoint 解决方案的步骤

将解决方案添加到解决方案存储区

必须将 SharePoint 解决方案添加到服务器场中可用的解决方案存储区。解决方案存储区是配置数据库的一部分,其中存储了多种 .wsp 文件。可通过 Stsadm.exe 命令行实用程序或使用编程方法将解决方案添加到存储区。

使用 Stsadm.exe

您可通过指定 .wsp 文件的相对路径借助 addsolution 操作调用 Stsadm.exe。下面是一个示例。

stsadm –o addsolution –filename mysolution.wsp
注意注意:

如果您要本地化该解决方案,还可以使用第三个参数:lcid

使用 Windows SharePoint Services 3.0 对象模型

在另外一种方法中,您可以创建一个与由 Windows SharePoint Services 公开的对象模型通信的 .NET Framework 应用程序。可使用下面的一行代码将 SharePoint 解决方案添加到解决方案存储区。

C#
SPSolution solution = SPFarm.Local.Solutions.Add(@"C:\Package\MySol.wsp");

Microsoft.SharePoint.Administration 命名空间中的 SPFarm 类使您可以连接到服务器场(本地创建的服务器场或您远程加入到的服务器场)。只要 SPSolutionCollection 对象是 SPSolution 类的实例或 SharePoint 解决方案文件的路径,就可以通过调用 Add 方法使用新的解决方案填充该对象。会返回一个 SPSolution 实例。在此级别会公开大量属性和方法。

部署解决方案

下一步是将解决方案实际部署到一台或多台支持 Windows SharePoint Services 的 Web 服务器(前端 Web 服务器或应用程序服务器)。可通过三种方式部署解决方案:

  • 使用 Stsadm.exe

  • 使用 Windows SharePoint Services 3.0 对象模型

  • 使用 SharePoint 管理中心网站

以下各节分别介绍这三种部署方法。

使用 Stsadm.exe

Stsadm.exe 有一个 deploysolution 选项,您可通过命令提示符使用该选项部署解决方案。解决方案存储区中的解决方案的名称是参数之一,您的目标网站集的 URL 也是参数之一。以下是一个示例。

stsadm –o deploysolution –name mysolution.wsp 
–url http://moss.litwareinc.com

除了以一个网站集为目标外,您还可以选择将自己的解决方案推送到服务器场中每一个可用的网站集。为此,您可以使用 allcontenturls 参数,如下所示。

stsadm –o deploysolution –name mysolution.wsp –allcontenturls

默认情况下,将立即部署解决方案,但您也可使用 time 参数计划部署。

allowgacdeploymentallowcaspolicies 参数也非常重要,稍后会对它们详加论述。简言之,默认情况下 allowgacdeploymenttrue,表示支持 Windows SharePoint Services 在全局程序集缓存中部署程序集。allowcaspolicies 参数支持创建自定义代码访问安全 (CAS) 策略文件,并在目标网站集的 Web.config 文件中激活该策略文件。

通过 Windows SharePoint Services 3.0 对象模型部署解决方案

SPSolution 实例级别,可以使用两种方法以编程方式部署解决方案:DeployDeployLocal。这两种方法均可接受 SPWebApplication 对象的集合,这些对象由希望作为部署目标的 Internet 信息服务 (IIS) Web 应用程序填充。可按如下所示填充该集合。

C#
Collection<SPWebApplication> webapps = new Collection<SPWebApplication>();
SPWebApplication webapp =
SPWebApplication.Lookup(new Uri("http://wss.litwareinc.com"));
webapps.Add(webapp);

这两种方法还都允许将包含在 Web 部件解决方案中的程序集部署到全局程序集缓存。两种方法的不同之处在于,您可以使用 DateTime 参数(该参数存储了您希望部署解决方案的确切时间)调用 Deploy,如图 20 所示。

图 20. 为部署计划的 SharePoint 解决方案


为部署计划的 SharePoint 解决方案

下面是一个使用 Deploy 方法的代码示例。

C#
solution.Deploy(DateTime.Now.AddMinutes(5), true, webapps, true);

下面是一个调用 DeployLocal 方法的示例。

C#
solution.DeployLocal(true, webapps, true);

通过 SharePoint 管理中心网站部署解决方案

管理员还可以导航到管理中心的操作页,使用解决方案管理立即或在将来的指定时间将 Windows SharePoint Services 解决方案部署到 IIS Web 应用程序。

当作为解决方案一部分的指令清单文件要求将程序集部署到全局程序集缓存中时,管理员会收到一条警告。

手动打包 Windows SharePoint Services 解决方案

Windows SharePoint Services 解决方案的开发人员经常采用手动方式创建 SharePoint 解决方案包。以下是需要手动打包的情形:

  • 在专用应用程序文件夹而不是全局程序集缓存中部署 .NET 程序集。

  • 向解决方案添加在部署期间必须应用的代码访问安全权限。

  • 使用不同于 Feature 文件夹默认使用的名称。

  • 本地化 Windows SharePoint Services 解决方案。

  • 将 Feature 事件处理程序与特定类型的 Windows SharePoint Services 解决方案(如 Web 部件解决方案)相关联。

  • 向解决方案包添加资源(XML 文件、图片等)。

要手动创建解决方案文件,需要执行以下基本步骤:

  1. 将所有单个解决方案文件收集到某个文件夹中。如何执行此步骤没有具体的指导说明,但最佳实践是将不同类型的解决方案文件分别放到它们各自的子文件夹中。

  2. 创建一个 .ddf 文件(Diamond Directive File 的缩写),该文件定义了 Windows SharePoint Services 解决方案文件的结构。此文件中包含了决定输出 .wsp 文件的各解决方案文件的列表。

  3. 执行命令行实用程序 MakeCab.exe,将 .ddf 文件作为输入,.wsp 文件作为输出。

下面的简短演练演示了上述所有步骤。

演练:生成和部署自定义 Web 部件解决方案包

Windows SharePoint Services 3.0 为开发人员提供了在安装、激活、停用或卸载 Feature 时执行自定义代码的选项。例如,一个依赖特定任务列表的 Web 部件。当 Web 部件 Feature 被激活后,自定义代码可以检查此任务列表是否属于站点内的列表。如果不属于,该代码将创建该列表,然后在 Feature 被停用时删除该列表。自定义代码被封装在称为 Feature Receiver Assembly 的 .NET 程序集中。

此演练假设您已像在 Windows SharePoint Services 3.0 中使用代码的开发工具和技术(第 1 部分,共 2 部分)中那样创建了一个 Web 部件项目。当安装、激活、停用或卸载 Web 部件 Feature 时,Windows SharePoint Services 触发异步事件。通过创建一个继承自抽象 Microsoft.SharePoint.SPFeatureReceiver 类的 .NET 类,可以在自定义 .NET 程序集中处理这些事件。以下是示例中的类和要实现的四个成员。

C#
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;

namespace MSDN.Samples
{
public class MSDNTaskListEventHandler: SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite sitecollection = (SPSite)properties.Feature.Parent;
SPWeb web = sitecollection.RootWeb;
try
{
// -- 检查是否存在列表。
SPList list = web.Lists["MSDN Tasks"];
}
catch
{
// -- 如果不存在,则创建列表。
web.Lists.Add("MSDN Tasks", "A custom list", SPListTemplateType.Tasks);
}
}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite sitecollection = (SPSite)properties.Feature.Parent;
SPWeb web = sitecollection.RootWeb;
try
{
// -- 检查列表是否位于该位置,如果是,则删除。
SPList list = web.Lists["MSDN Tasks"];
web.Lists.Delete(list.ID);
}
catch (Exception ex)
{
}
}

public override void FeatureInstalled(SPFeatureReceiverProperties properties)
{
}

public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
{
}
}
}

编 码工作产生两个程序集。一个程序集包含发送 Web 部件的编码。另一个程序集包含前面的代码。编写时,Visual Studio Extensions for Windows SharePoint Services 3.0 不允许将事件处理程序连接到 Web 部件 Feature 定义文件。另外,必须在专用应用程序文件夹而非全局程序集缓存中部署 Web 部件程序集。因此,您必须手动创建解决方案包。

注意注意:

在下面的步骤中,可以调整代表解决方案组件的不同文件的组织方式,使其适合您自己的偏好,这种组织方式可以作为 Visual Studio 2005 解决方案的一部分。

创建包含两个子文件夹的文件夹来收集所有解决方案组件。第一个子文件夹用于存储程序集(在本文中称为 Assemblies),第二个文件夹用于存储定义 Feature 的不同 XML 文件(在本文中称为 Features)。将 Web 部件程序集和事件处理程序集复制到 Assemblies 文件夹中。

在 Features 文件夹下创建一个子文件夹,用于容纳 SharePoint 解决方案中必须包含的每个 Feature。此演练中只有一个 Feature。假设它被称为 MSDNTaskCreator;Features 文件夹包含一个使用该名称的子文件夹。在此文件夹的根目录下,添加一个包含以下 XML 的 .xml 文件。

Xml
<Feature  Title="MSDNTaskCreator" 
Id="55312295-a323-4333-b875-1bbe8ef7fd04"
Description="Small Web Part creating a custom task item"
Version="1.0.0.0" Scope="Site" Hidden="FALSE"
ReceiverAssembly="MSDNFeatureEventhandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5e5a470a5445a8f1"
ReceiverClass="MSDN.Samples.MSDNTaskListEventHandler"
DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="elementManifest.xml" />
<ElementFile Location="MSDNTaskCreator.webpart" />
</ElementManifests>
</Feature>

此 XML 与使用 Visual Studio Extensions for Windows SharePoint Services 3.0 生成的 XML 有何不同呢?feature.xml 文件添加了另外两个属性:

  • ReceiverAssembly 属性包含 .NET 程序集(其中包含事件处理程序代码)的完整强名称。

  • ReceiverClass 属性存储了该程序集内的类的完整名称。

必须在根文件夹中创建指令清单文件。该文件与由 Visual Studio Extensions for Windows SharePoint Services 3.0 生成的文件不同。以下是文件内容。

Xml
<Solution SolutionId="d63d0395-96a4-449e-83ce-5f7239bbd3ad" xmlns="http://schemas.microsoft.com/sharepoint/" >
<FeatureManifests>
<FeatureManifest Location="MSDNTaskCreator\feature.xml" />
</FeatureManifests>
<Assemblies>
<Assembly Location="MSDNTaskCreator.dll" DeploymentTarget="WebApplication" >
<SafeControls>
<SafeControl Assembly="MSDNTaskCreator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" Namespace="MSDN.Samples" TypeName="MSDNTaskCreator" Safe="True" />
</SafeControls>
</Assembly>
<Assembly Location="MSDNFeatureEventHandlers.dll" DeploymentTarget="GlobalAssemblyCache" />
</Assemblies>
</Solution>

注意,Feature 的名称不再包括 GUID。第一个程序集元素包含一个名为 DeploymentTarget 的属性,其值为 WebApplication 而不是 GlobalAssemblyCache。第二个程序集元素具有 .NET 程序集的定义,包含要在全局程序集缓存中部署的事件处理程序代码。

现在我们即可创建 .ddf 文件,在此示例中名为 .wsp_structure.ddf。可直接在 DeploymentFiles 文件夹中创建该文件。首先,添加以下标题信息。

;
; *** 用于生成 SharePoint 解决方案的 .ddf 文件。
;
.OPTION EXPLICIT ; Generate errors
.Set CabinetNameTemplate=MSDNTaskCreatorWebPart.wsp
.set DiskDirectoryTemplate=CDROM ; All cabinets go in a single directory
.Set CompressionType=MSZIP;** 将所有文件压缩到压缩文件中
.Set UniqueFiles="ON"
.Set Cabinet=on
.Set DiskDirectory1=Package

标题包含两个动态特性相当明显的部分:

  • CabinetNameTemplate 被设为 SharePoint 解决方案文件的名称 (MSDNTaskCreatorWebPart.wsp)。

  • DiskDirectory1 被设为 Package。这是用于容纳生成的 .wsp 文件的目录。

.ddf 文件的第二部分定义了包的结构。

; *** 指令清单文件
manifest.xml manifest.xml

; *** 功能文件
Features\MSDNTaskCreator\feature.xml MSDNTaskCreator\feature.xml
Features\MSDNTaskCreator\elementManifest.xml MSDNTaskCreator\elementManifest.xml
Features\MSDNTaskCreator\MSDNTaskCreator.webpart MSDNTaskCreator\MSDNTaskCreator.webpart

; *** 程序集
Assemblies\MSDNTaskCreator.dll MSDNTaskCreator.dll
Assemblies\MSDNFeatureEventhandlers.dll MSDNFeatureEventhandlers.dll

.ddf 文件是 MakeCab.exe 工具的输入,该工具可在安装 Microsoft Cabinet SDK (C:\Program Files\Microsoft Cabinet SDK) 后获得,它也是 Smart Devices SDK (C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SDKTools) 的一部分。

注意注意:

可以从 Internet Client SDK:Microsoft Cabinet SDK 下载 Microsoft Cabinet SDK。

为了方便打包和部署,可创建一个批处理文件,其内容如下。

set MakeCabTool=c:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SDKTools\makecab.exe 
set SPAdminTool=%CommonProgramFiles%\Microsoft Shared\web server extensions\12\BIN\stsadm.exe

"%MakeCabTool%" /f wsp_structure.ddf
"%SPAdminTool%" -o addsolution -filename package\ MSDNTaskCreatorWebPart.wsp
"%SPAdminTool%" -o deploysolution -name MSDNTaskCreatorWebPart.wsp -immediate -allowGACDeployment -url http://moss.litwareinc.com

前两行设置 Makecab 和 Stsadm 命令行工具的路径。接下来的一行用于创建解决方案包。

makecab.exe /f wsp_structure.ddf

执行后,MSDNTaskCreatorWebPart.wsp 会出现在 Package 文件夹中。下一行通过执行以下命令将 MSDNTaskCreatorWebPart.wsp 添加到服务器场中的解决方案存储区中。

stsadm.exe -o addsolution -filename Package\MSDNTaskCreatorWebPart.wsp

批处理文件的最后一行是将解决方案部署到您的一个网站集。可使用管理中心的操作选项卡下的“解决方案管理”页,也可以再次打开命令提示符窗口执行以下命令行。

stsadm.exe -o deploysolution -name MSDNTaskCreatorWebPart.wsp -local -allowGACDeployment -url http://moss.litwareinc.com

Web Part Feature 已安装但未激活。要激活该 Feature,请打开网站集功能页,然后单击激活按钮。由于触发 FeatureActivated 事件时会执行相应的代码,此时会创建一个 MSDN Task 列表。停用此功能时会将此任务列表从网站集的根网站中删除。

代码访问安全和 Web 部件解决方案

在许多封装的环境中,管理员不允许自定义代码组件具有完全信任。管理员可能会选择将解决方案部署到 Web 应用程序的 \bin 文件夹,该文件夹的权限必须明确指定。让我们看看相关的步骤。

我 们可以用一个小的 Web 部件来演示所有这一切,该 Web 部件连接到一个返回指定城市的天气信息的 Web 服务。如果使用 Visual Studio 2005 Extensions for Windows SharePoint Services 3.0 创建和部署此 Web 部件,则 .NET 程序集会被部署在全局程序集缓存中。您无法在开发计算机上干预此过程来以不同方式配置解决方案的生成过程和部署。由于部署是在全局程序集缓存中,因此 Web 部件可获得完全信任,连接到 Web 服务时没有任何安全问题。

这种情形适用于管理员允许您将 Web 部件程序集部署在全局程序集缓存中。但是,Web 部件程序集经常最终出现在 IIS Web 应用程序的专用 \bin 文件夹下。作为 Web 部件开发人员,需要依赖管理员在 web.config 文件中设置的信任级别。最后,对于执行与我们的天气 Web 部件功能相似的 Web 部件,您会遇到安全问题,如下面的演练中所述。

演练:代码访问安全和 Web 部件解决方案

假设您有一个返回某城市天气信息的小的 Web 服务,有一个 Web 部件引用这些信息,如图 21 所示。(您可以使用任意类型的 Web 服务设计一个示例。)

图 21. 引用天气 Web 服务的 Web 部件


引用天气 Web 服务的 Web 部件

要 在 IIS Web 应用程序的专用应用程序文件夹而不是在全局程序集缓存(如果使用 Visual Studio 2005 Extensions for Windows SharePoint Services 3.0,则此为默认位置)中部署 Web 部件,可以在指令清单文件中进行更改来强制进行此设置。您可以将 Assembly 元素级别的 DeploymentTarget 属性设为 WebApplication 而不是 GlobalAssemblyCache,如以下示例中所示。

Xml
<Solution SolutionId="1de3b0fc-78e9-4fe6-ae63-51ea50109982" xmlns="http://schemas.microsoft.com/sharepoint/" >
<FeatureManifests>
<FeatureManifest Location="WeatherWebPart\feature.xml" />
</FeatureManifests>
<Assemblies>
<Assembly Location="WeatherWebPart.dll" DeploymentTarget="WebApplication" >
<SafeControls>
<SafeControl Assembly="WeatherWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" Namespace="WeatherWebPart" TypeName="WeatherWebPart" Safe="True" />
</SafeControls>
</Assembly>
</Assemblies>
</Solution>

接下来,您必须手动创建 Windows SharePoint Services 解决方案。下面的 .ddf 文件显示了如何对组成 Web 部件解决方案的不同组件打包。

.OPTION EXPLICIT 
.Set CabinetNameTemplate=WeatherWebPart.wsp
.set DiskDirectoryTemplate=CDROM ; 将所有压缩文件置于单独的目录下
.Set CompressionType=MSZIP ;** 将所有文件压缩到压缩文件中
.Set UniqueFiles="OFF"
.Set Cabinet=on
.Set DiskDirectory1=Package

manifest.xml manifest.xml
assemblies\WeatherWebPart.dll WeatherWebPart.dll

Features\WeatherWebPart\feature.xml WeatherWebPart\feature.xml
Features\WeatherWebPart\elementManifest.xml WeatherWebPart\elementManifest.xml
Features\WeatherWebPart\WeatherWebPart.webpart WeatherWebPart\WeatherWebPart.webpart

只需调用 Makecab.exe 并将 .ddf 文件作为输入,即可生成 Windows SharePoint Services 解决方案。

makecab.exe /f WeatherWebPart.ddf

通过在命令提示符窗口执行以下命令,可以将该解决方案添加到解决方案存储区。

stsadm.exe -o addsolution -filename package\weatherwebpart.wsp

现 在,导航到管理中心的解决方案管理页。您可以在该页面上部署解决方案。请注意,由于指令清单文件不要求将程序集部署到全局程序集缓存中,所以不会出现警 告。继续执行操作,将解决方案部署到您的 IIS Web 应用程序之一。最好在与 IIS Web 应用程序关联的物理文件夹(默认情况下,位于 Inetpub\wwwroot\wss\VirtualDirectories\IIS Web 应用程序名 下)中验证程序集在 \bin 文件夹中可用。

假设 web.config 文件的信任级别未设置为 Full,则在您尝试运行天气 Web 部件时会出现异常(如图 22 所示)。

图 22. 在专用应用程序文件夹中部署的天气 Web 部件


在专用应用程序文件夹中部署的天气 Web 部件

在 专用应用程序文件夹中部署的天气 Web 部件会导致意外问题。不过,该错误是意料之中的。打开 Windows 事件查看器(位于管理工具中),可以找到错误的完整详细信息:“请求 'System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 类型的权限失败。”

换句话说,未授予您的 Web 部件与 Web 服务通信的权限。如何解决这一问题呢?一种方法是在 web.config 文件中将信任级别提升为完全,但这样做是有风险的。提升信任级别后,所有私人部署的程序集都会获得与在全局程序集缓存中部署的程序集相同的基本权限。更佳 的解决方案是请求在 SharePoint 页面正确运行 Web 部件所需的权限,并在指令清单文件中包括该命令。部署该解决方案的管理员将收到一个通知,该通知表明获取权限的特定请求正在等待处理。管理员可以决定是否 可以授予这些权限。继续进行操作时,会为当前处于激活状态的策略文件创建副本,并添加为 Web 部件请求的权限。此新的策略文件将成为在 web.config 文件中激活的文件。现在,我们可以对上述所有步骤进行更详细的考查。

已经有一条信息可供使用了。您具有所请求权限的完整详细信息(前面讨论过)。另一条信息是您使用的程序集的完整公钥 Blob。要检索此信息,请打开命令提示符窗口并执行以下命令。

Secutil.exe –hex –s WeatherWebPart.dll > keyblob.txt

执行后会得到一个文本文件,其中包含存在问题的程序集的完整公钥。所用的工具是 secutil.exe,此工具是 .NET Framework SDK 的一部分。

接下来,打开指令清单文件,添加以下 CodeAccessSecurity 元素(最好添加在 FeatureManifests 元素和 Assemblies 元素之间)。

Xml
   <CodeAccessSecurity>
<PolicyItem>
<PermissionSet class="NamedPermissionSet" version="1"
Description="My webpart's permission set">
<IPermission class="AspNetHostingPermission" version="1"
Level="Minimal"/>
<IPermission class="SecurityPermission" version="1"
Flags="Execution" />
<IPermission version="1" Unrestricted="True"
class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
<IPermission class="System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Unrestricted="True" version="1"> <ConnectAccess> <URI uri="$OriginHost___FCKpd___21quot;/> <URI uri="http://moss:95/webservices/.*"/> </ConnectAccess> </IPermission>
</PermissionSet>
<Assemblies>
<Assembly Name="WeatherwebPart" Version="1.0.0.0" PublicKeyBlob="0x00240000048000009400000006020000002400005253413100040000010001000DAF8ED8D945CD2ABB2EE7953A6039B791A725F11B4588AC6D70B3E0648F955E9ED4C3C43CB044B8B0E8A6FF4D4FFBE9E3B9297D45F688A7264534E12414E17539305207EC961DA94DF294E7722CCD9BDBFC95A896E996F57156705D281EC39280BD604E87724556AF5807D146963F19F5B43DB69E1F22695463153A553260D2" />
</Assemblies>
</PolicyItem>
</CodeAccessSecurity>

在上面的代码中,IPermissionAssembly 元素区域对于检查而言很重要。首先,IPermission 元素请求与 Web 服务(假设此 Web 服务承载于 http://moss:95 IIS Web Application 之上)进行通信所需的权限。其次,Assembly 元素包含了存在问题的程序集的详细信息:名称、版本和必须从通过 secutil.exe 实用程序生成的 keyblob.txt 文件中检索的 Blob。

将 这些更改应用于指令清单文件时,必须重新生成 Windows SharePoint Services 解决方案,并将其重新添加到解决方案存储区中。部署解决方案时,您会注意到页面底部会出现一条警告(请参见图 23),表明该解决方案包含代码访问安全策略,如果继续部署该解决方案,此安全策略就会生效。如果管理员并未看到此类问题,则可继续操作,然后 Web 部件就可以使用了。

图 23. 带有代码访问安全策略的 Web 部件解决方案


带有代码访问安全策略的 Web 部件解决方案

如果您正确按上述步骤进行了操作,天气 Web 部件会像以前一样再次工作。但是在后台,您会注意到在 web.config 文件的 securityPolicy 元素中出现了一个新条目,如下所示。

Xml
<securityPolicy>
<trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_mediumtrust.config" />
<trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_minimaltrust.config" />
<trustLevel name="WSS_Custom" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_custom_wss_minimaltrust.config" />
</securityPolicy>

新的级别 — WSS_Custom — 现在是 web.config 文件中的活动信任级别。

管理解决方案

Windows SharePoint Services 3.0 也提供对管理 SharePoint 解决方案的支持。您可以通过多种方法收回解决方案、删除解决方案存储区中的解决方案和升级解决方案。

收回解决方案

当您收回 SharePoint 解决方案时,Windows SharePoint Services 会将所有解决方案组件从其部署位置进行物理删除。可以通过以下三种方法收回解决方案:

  • 使用 Stsadm.exe

  • 使用管理中心

  • 使用 Windows SharePoint Services 3.0 对象模型

以下各节将对这些方法加以介绍。

使用 Stsadm.exe

名为 retractsolution 的选项会接受多个参数。解决方案的 name 是必不可少的参数。另外,您可以为特定 IIS Web 应用程序和网站集指定 URL,或通过 allcontenturls 参数将解决方案从其所有部署位置删除。time 参数可以计划对作业定义的收回。当您希望直接执行操作时,可使用 immediate 参数。

以下是用于收回解决方案的典型命令。

stsadm.exe –o retractsolution –name hellowebpart.wsp -immediate

使用管理中心

解决方案在解决方案存储区中可用后,您可以通过管理中心的解决方案管理页对其进行访问。您可以从该页开始收回解决方案的过程,如图 24 所示。

图 24. 从 IIS Web 应用程序收回 Web 部件


从 IIS Web 应用程序收回的 Web 部件

使用 Windows SharePoint Services 3.0 对象模型

收回解决方案的最后一种方法是通过 Windows SharePoint Services 3.0 对象模型。SPSolution 类公开了 RetractRetractLocal 方法。可以使用 Retract 计划解决方案的回收。上述两种方法都提供了从所有或特定 SPWebApplication 对象集收回解决方案的选项。以下代码示例从在本地计算机上可用的所有 IIS Web 应用程序收回 Web 部件解决方案。

C#
SPSolution solution = SPFarm.Local.Solutions["hellowebpart.wsp"];
solution.RetractLocal();

收回 Web 部件解决方案

您可以使用上面提到的任一方式收回交付 Web 部件的解决方案。但是,应当注意,收回 Web 部件不会从 Web 部件库删除 .webpart 条目。因此,Web 部件将会保留在添加 Web 部件对 话框中显示,用户仍然可以看到。但是,当用户将 Web 部件添加到某个页面时,会显示错误,因为 Web 部件已不再作为安全控件进行注册,并且程序集已从本地 bin 文件夹或全局程序集缓存中删除。还应注意,收回 Web 部件解决方案会导致现有 Web 部件实例停止工作,并在 SharePoint 页中显示一条错误。要解决此问题,您可以停用对从 Web 部件库删除 .webpart 文件的调用。

收回基于架构的解决方案

收回基于架构的解决方案(如自定义列表定义)时必须小心。可以存在许多实例,您可能并不希望破坏这些实例。因此,存在这些类型的解决方案实例时,最佳实践是使 Feature 对用户不可见,而不是收回解决方案。本文后面有关升级解决方案一节的小型演练展示了不同的步骤。

删除 Windows SharePoint Services 解决方案

可从解决方案存储区中删除已不再部署的 Windows SharePoint Services 解决方案。可通过三种方式执行此删除:

  • 使用 Stsadm.exe

  • 使用管理中心

  • 使用 Windows SharePoint Services 3.0 对象模型

以下各节介绍了这些方法。

使用 Stsadm.exe

管理员现在可以启动命令行实用程序 Stsadm.exe,然后执行 deletesolution 选项。name 参数是解决方案的名称,是必不可少的。使用以下命令可删除解决方案。

stsadm.exe –o deletesolution –name hellowebpart.wsp

使用管理中心

解决方案管理页可通过管理中心中的选项选项卡进行访问,在该页上,您可以删除不再部署的解决方案。只需单击解决方案名称,然后使用工具栏上的删除解决方案按钮即可。

使用 Windows SharePoint Services 3.0 对象模型

您还可以通过在 SPSolutionCollection 对象级别调用 Remove 方法来删除解决方案。此集合通过 SPFarm 类从本地场或加入到的场进行公布。以下代码可从解决方案存储区中删除解决方案。

SPFarm.Local.Solutions.Remove("hellowebpart.wsp");

升级解决方案

管理 SharePoint 解决方案的最后一个选项是将已部署的解决方案升级到新版本。理解在 Windows SharePoint Services 解决方案级别不执行版本控制极其重要。实际版本控制在解决方案组件级别(Feature、程序集等)执行。

图 25 概述了如何执行解决方案升级。

图 25. 升级 SharePoint 解决方案


升级 SharePoint 解决方案

假 设已将 MySolution.wsp 的 1.0.0.0 版本添加到了解决方案存储区,并已部署到了一个或多个 IIS Web 应用程序。Windows SharePoint Services 解决方案的第二个版本必须具有相同的 SolutionID,升级才能成功。可通过调用带有 upgradesolution 选项的 Stsadm.exe 命令行实用工具使第二个版本进行升级。在解决方案存储区中,您需要提供要升级的解决方案的名称、解决方案的新版本,然后指定是计划升级还是立即升级。您还可以指定一些选项以允许在全局程序集缓存中进行部署,并允许自定义代码访问安全策略。

升级 SharePoint 解决方案指南

在讨论升级 SharePoint 解决方案指南时,我们必须区分基于代码的解决方案(如 Web 部件)和基于架构的解决方案(如自定义列表定义)。

升级 Web 部件解决方案Web 部件是基于代码的解决方案的典型示例。升级基于代码的解决方案往往涉及使用更新过的程序集版本替换 IIS Web 应用程序的专用应用程序文件夹或者全局程序集缓存中的程序集。图 26 汇总了可能的升级途径。

图 26. 升级 Web 部件


升级 Web 部件
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics