- 浏览: 16817094 次
- 性别:
- 来自: 济南
-
最新评论
-
wu1236:
ef0793cd94337324b6fefc4c9474af5 ...
Android ApiDemos示例解析(87):Media->MediaPlayer -
77219634:
0127bf2236bee4dd1f632ce430f1af1 ...
本博客文章都为转载,没有任何版权! -
77219634:
0127bf2236bee4dd1f632ce430f1af1 ...
VPLEX - EMC的RAC -
77219634:
0127bf2236bee4dd1f632ce430f1af1 ...
qTip2 Show -
77219634:
0127bf2236bee4dd1f632ce430f1af1 ...
SecureCRT中文乱码、复制粘贴乱码解决办法(修改版)
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 解决方案添加到服务器场中可用的解决方案存储区。解决方案存储区是配置数据库的一部分,其中存储了多种 .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 参数计划部署。
allowgacdeployment 和 allowcaspolicies 参数也非常重要,稍后会对它们详加论述。简言之,默认情况下 allowgacdeployment 为 true,表示支持 Windows SharePoint Services 在全局程序集缓存中部署程序集。allowcaspolicies 参数支持创建自定义代码访问安全 (CAS) 策略文件,并在目标网站集的 Web.config 文件中激活该策略文件。
通过 Windows SharePoint Services 3.0 对象模型部署解决方案
在 SPSolution 实例级别,可以使用两种方法以编程方式部署解决方案:Deploy 和 DeployLocal。这两种方法均可接受 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 解决方案

下面是一个使用 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 文件、图片等)。
要手动创建解决方案文件,需要执行以下基本步骤:
-
将所有单个解决方案文件收集到某个文件夹中。如何执行此步骤没有具体的指导说明,但最佳实践是将不同类型的解决方案文件分别放到它们各自的子文件夹中。
-
创建一个 .ddf 文件(Diamond Directive File 的缩写),该文件定义了 Windows SharePoint Services 解决方案文件的结构。此文件中包含了决定输出 .wsp 文件的各解决方案文件的列表。
-
执行命令行实用程序 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 部件

要 在 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 部件会导致意外问题。不过,该错误是意料之中的。打开 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>
在上面的代码中,IPermission 和 Assembly 元素区域对于检查而言很重要。首先,IPermission 元素请求与 Web 服务(假设此 Web 服务承载于 http://moss:95 IIS Web Application 之上)进行通信所需的权限。其次,Assembly 元素包含了存在问题的程序集的详细信息:名称、版本和必须从通过 secutil.exe 实用程序生成的 keyblob.txt 文件中检索的 Blob。
将 这些更改应用于指令清单文件时,必须重新生成 Windows SharePoint Services 解决方案,并将其重新添加到解决方案存储区中。部署解决方案时,您会注意到页面底部会出现一条警告(请参见图 23),表明该解决方案包含代码访问安全策略,如果继续部署该解决方案,此安全策略就会生效。如果管理员并未看到此类问题,则可继续操作,然后 Web 部件就可以使用了。
图 23. 带有代码访问安全策略的 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 部件

使用 Windows SharePoint Services 3.0 对象模型
收回解决方案的最后一种方法是通过 Windows SharePoint Services 3.0 对象模型。SPSolution 类公开了 Retract 和 RetractLocal 方法。可以使用 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 解决方案

假 设已将 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 部件

相关推荐
Windows SharePoint Services 3.0 with SP1 或者 Microsoft Office SharePoint Server 2007 with SP1 (MOSS) 最后自然是开发环境的安装: Visual Studio 2005 with SP 1 Visual Studio 2005 Extensions for Windows ...
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
# 基于Python的KMeans和EM算法结合图像分割项目 ## 项目简介 本项目结合KMeans聚类和EM(期望最大化)算法,实现对马赛克图像的精准分割。通过Gabor滤波器提取图像的多维特征,并利用KMeans进行初步聚类,随后使用EM算法优化聚类结果,最终生成高质量的分割图像。 ## 项目的主要特性和功能 1. 图像导入和预处理: 支持导入马赛克图像,并进行灰度化、滤波等预处理操作。 2. 特征提取: 使用Gabor滤波器提取图像的多维特征向量。 3. 聚类分析: 使用KMeans算法对图像进行初步聚类。 利用KMeans的聚类中心初始化EM算法,进一步优化聚类结果。 4. 图像生成和比较: 生成分割后的图像,并与原始图像进行比较,评估分割效果。 5. 数值比较: 通过计算特征向量之间的余弦相似度,量化分割效果的提升。 ## 安装使用步骤 ### 假设用户已经下载了项目的源码文件 1. 环境准备:
HCIP第一次作业:静态路由综合实验
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
内容概要:本文详细介绍了Johnson-SU分布的参数计算与优化过程,涵盖位置参数γ、形状参数δ、尺度参数ξ和伸缩参数λ的计算方法,并实现了相应的Python代码。文中首先导入必要的库并设置随机种子以确保结果的可复现性。接着,分别定义了四个参数的计算函数,其中位置参数γ通过加权平均值计算,形状参数δ基于局部均值和标准差的比值,尺度参数ξ结合峰度和绝对偏差,伸缩参数λ依据偏态系数。此外,还实现了Johnson-SU分布的概率密度函数(PDF),并使用负对数似然函数作为目标函数,采用L-BFGS-B算法进行参数优化。最后,通过弹性网络的贝叶斯优化展示了另一种参数优化方法。; 适合人群:具有Python编程基础,对统计学和机器学习有一定了解的研究人员或工程师。; 使用场景及目标:①需要对复杂数据分布进行建模和拟合的场景;②希望通过优化算法提升模型性能的研究项目;③学习如何实现和应用先进的统计分布及优化技术。; 阅读建议:由于涉及较多数学公式和编程实现,建议读者在阅读时结合相关数学知识,同时动手实践代码,以便更好地理解和掌握Johnson-SU分布及其优化方法。
TSP问题的3种智能优化方法求解(研究生课程《智能优化算法》结课大作业).zip
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
自动发布Java项目(Tomcat)Shell脚本
# 基于webpack和Vue的前端项目构建方案 ## 项目简介 本项目是基于webpack和Vue构建的前端项目方案,借助webpack强大的打包能力以及Vue的开发特性,可用于快速搭建现代化的前端应用。项目不仅完成了基本的webpack与Vue的集成配置,还在构建速度优化和代码规范性方面做了诸多配置。 ## 项目的主要特性和功能 1. 打包功能运用webpack进行模块打包,支持将scss转换为css,借助babel实现语法转换。 2. Vue开发支持集成Vue框架,能使用Vue单文件组件的开发模式。 3. 构建优化采用threadloader实现多进程打包,cacheloader缓存资源,极大提高构建速度开启热更新功能,开发更高效。 4. 错误处理与优化提供不同环境下的错误映射配置,便于定位错误利用webpackbundleanalyzer分析打包体积。
Hands-On Large Language Models - Jay Alammar 袋鼠书 《动手学大语言模型》PDF
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
# 基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统 ## 项目简介 本项目是一个基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统。系统通过Arduino Feather M0采集传感器数据,并通过WiFi将数据传输到Raspberry Pi。Raspberry Pi运行BalenaOS,集成了MySQL、PHP、NGINX、Apache和Grafana等工具,用于数据的存储、处理和可视化。项目适用于环境监测、物联网设备监控等场景。 ## 项目的主要特性和功能 1. 传感器数据采集使用Arduino Feather M0和AM2315传感器采集温度和湿度数据。 2. WiFi数据传输Arduino Feather M0通过WiFi将采集到的数据传输到Raspberry Pi。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
# 基于Arduino的WiFi按钮项目 ## 一、项目简介 本项目是一个基于ESP8266芯片的Arduino项目,主要实现WiFi连接、电压检测、LED灯控制以及向服务器发送POST请求等功能。通过简单的按钮操作,可以实现与服务器通信并获取相关信息,同时能检测电池电压并提示用户。 ## 二、项目的主要特性和功能 1. WiFi连接项目能够自动连接到指定的WiFi网络。 2. 电压检测通过ADC(模数转换器)检测电池电压,并在电压低于阈值时发出警告。 3. LED灯控制通过控制LED灯的亮灭来提示用户不同的状态信息(如连接成功、电压低等)。 4. 服务器通信项目可以向指定的服务器发送POST请求并处理返回的HTTP响应。 ## 三、安装使用步骤 1. 环境准备确保已安装Arduino IDE和ESP8266插件。 2. 下载源码下载项目的源码文件并解压。 3. 打开项目在Arduino IDE中打开解压后的main.cpp文件。
该资源为scipy-0.10.1-cp26-cp26mu-manylinux1_x86_64.whl,欢迎下载使用哦!