Question 54
You create custom code to import content to SharePoint sites.
You create a custom site definition by using Microsoft Visual Studio 2010.
You need to ensure that when a new site that uses the site definition is created, the custom code executes after the site is created.
Which class should you add to the project?
A. SPChangeFile
B. SPItemEventReceiver
C. SPWebEventReceiver
D. SPWebProvisioningProvider
解析:
本题想要做的事有2步:1.开发并部署一个Site Definition。 2.在使用此Site Defintion创建了一个新的Site后,运行一段代码达到向此Site导入指定的内容。问题是:使用哪个类可以达到第二步的目的。
选项A. SPChangeFile: 表示对file所作的修改,此file位于list之外或属于list的附件存在。网上可以找到某些关于此对象的应用示例
eg.使用Sharepoint Designer打开一个网站,添加一个新的Page或修改某个ASPX页面(在此页面上没有存放items),然后你可以使用如下的示例代码去捕获到SPFile对象以及其中的内容:
using (siteCollection)
{using (site)
{SPChangeQuery query = new SPChangeQuery(true, true);
SPTimeZone timeZone = site.RegionalSettings.TimeZone;
SPList list = site.Lists["MyDL"];
SPChangeToken start = new SPChangeToken(SPChangeCollection.CollectionScope.Web, site.ID, DateTime.Now.AddDays(-1));
query.ChangeTokenStart = start;
SPChangeCollection changes = site.GetChanges(query);
foreach (SPChange change in changes)
{if (change is SPChangeFile)
{Console.WriteLine("Date: {0}", change.Time.ToString());}
}}}
从上可以看出选项A与本题没什么关系。
选项B. SPItemEventReceiver 此类是常规EventHandler编写继承的基类之一。它提供了一系列捕获发生在Item之上的事件的方法。例如: ItemAdded、ItemAdding、ItemAttachmentAdded、ItemAttachmentAdding、ItemAttachmentDeleted、ItemAttachmentDeleting、ItemCheckedIn、ItemCheckedOut、ItemCheckingIn、ItemCheckingOut、ItemDeleted、ItemDeleting、ItemFileConverted、ItemFileMoved、ItemFileMoving、ItemUncheckedOut、ItemUncheckingOut、ItemUpdating、ItemUpdated等等。很明显,这个与Item的Event相关的类与本题的Site Definition相关动作没有关系。
选项C. SPWebEventReceiver 与选项B类似,此类提供了一系列捕获发生在Web之上的事件的方法,包括:SiteDeleted,SiteDeleting,WebDeleted,WebDeleting,WebMoved,WebMoving在SPWebEventReceiver中你找不到能捕获Site创建的事件的方法。而此类方法是我们解决本题必须的,这很好理解,因为SPWebEventReceiver是针对一个”已经”创建好的Site所提供的方法,它并不能参与Site的创建过程。
选项D. SPWebProvisioningProvider 它的介绍可以参考上一个Question 53。它是本题的答案,因为SPWebProvisioningProvider类可以介入到Site的创建,我们可以在site provisioning handler中加入我们的代码,以在Site创建好之后实现进一步导入用户指定的内容的目的。
所以本题目正确选项应该是D
参考:
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spchangefile.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spwebprovisioningprovider.aspx
Question 55
You create a custom Web Part.
You need to verify whether the Web Part causes any memory leaks.
Which tool should you use?
A. SPDisposeCheck.exe
B. SPMetal.exe
C. Wca.exe
D. WinDbg.exe
解析:
本题主要是考你使用什么工具来检查代码中潜在的内存泄漏。
选项A. SPDisposeCheck.exe SPDisposeCheck是开发Sharepoint项目必不可少的工具之一,用它可以检测出你所写的代码是否正确销毁掉诸如SPSite或者SPWeb之类的“资源消耗大户”(你打开一个spsite或者spweb对象 将占用1M到2M的内存,如果你不断打开此类对象并没有及时关闭,那么你的内存就会很快被消耗掉)。 有关它的具体使用,请参考我的另一篇博文:http://www.cnblogs.com/wsdj-ITtech/archive/2011/11/24/2259773.html
选项B. SPMetal.exe: 是一类用于生成实体类的命令行工具,这些类可向 Microsoft SharePoint Foundation 内容数据库提供面向对象的界面。虽然这些类主要用于 LINQ to SharePoint 查询,但它们也可用于通过利用并发冲突解决方法来添加、删除和更改列表项。此外,还可将它们作为用于引用内容的常规 SharePoint Foundation 对象模型的替代项使用。 所以,此工具并不是用来检查代码内存泄漏的工具。
选项C. Wca.exe 工作流通信活动命令行实用工具:是一个Windows Workflow Foundation 工具。它用于从包含一个或多个 ExternalDataExchangeService 接口的输入程序集中为严格绑定的 HandleExternalEventActivity 活动和 CallExternalMethodActivity 活动派生的类生成代码文件。对于程序集中每个接口的每个方法和事件,活动是使用对应于方法/事件参数的强类型属性创建的。这些严格绑定的活动可通过强类型改善设计体验,并通过放弃使用反射来实现性能的小幅提升。
选项D. WinDbg.exe : WinDbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。WinDbg.exe也可以用来辅助检查内存泄漏,但是,它却无法针对Sharepoint的对象模型来检查Sharepoint代码中潜在的内存泄漏问题。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/zh-cn/library/ee538587(v=office.14).aspx
http://archive.msdn.microsoft.com/SPDisposeCheck
http://msdn.microsoft.com/zh-cn/library/vstudio/bb675220(v=vs.90).aspx
http://www.cnblogs.com/wsdj-ITtech/archive/2011/11/24/2259773.html
Question 56
You are creating a Web Part that will be deployed as a sandboxed solution.
You need to ensure that the Web Part can write debugging information to the SharePoint trace logs.
Which class should the logging component inherit?
A. SPDelegate
B. SPLog
C. SPPersistedObject
D. SPProxyOperation
解析:
本题的意图是想在一个Sandbox Solution中写入信息到Trace Log文件。
我们知道,Sandbox Solution是一种受限的Solution,它是无法操作SharePoint trace logs文件的。但是有的时候,SandBox Solution又的确需要完成一些它自身无权去完成的操作。对于这种情况Sharepoint提供了另外一种途径,即完全信任代理(Full Trust Proxy),这种途径的主要思路就是:通过编写一个继承自SPProxyOperation抽象类的自定类,在此类中实现完全信任模式下的代码功能,然后把它的程序集部署到GAC(global assembly cache),通过此方式把完全信任代理功能暴露给沙盒以沙盒代码调用,这类似于创建了一个警戒区(特区),你可以对此区域的Solution进行特殊的关照。
完全信任代理(Full Trust Proxy)具体的实现可以参考我的博文(共三篇文章):
http://www.cnblogs.com/wsdj-ITtech/archive/2011/09/05/2166617.html
http://www.cnblogs.com/wsdj-ITtech/archive/2011/09/15/2177790.html
http://www.cnblogs.com/wsdj-ITtech/archive/2011/09/16/2177820.html
选项A. SPDelegate: 是一个抽象类,提供所有的升级代理(Upgrade delegates),它受控于Windows SharePoint Services Upgrade Manager。可通过Object属性取得代理的对象。总之它是一个与Windows SharePoint Services升级相关的类。很显然与Sandbox Solution没任何关系。
选项B. SPLog 它也是一个与Windows SharePoint Services升级相关的类,用于操作升级时的Log。所以它也与本题的要求无关。
选项C. SPPersistedObject 用于为对象提供自动序列化其状态值并持久保存以及在需要时获取前面所保存的值并反序列化的相关方法。也即,它属于定义自定义管理设置方面的类。在 Windows SharePoint Services 平台上构建应用程序时,您可能需要创建一个类以定义应用程序的自定义属性设置并提供用于存储这些设置的方法。
Windows SharePoint Services 3.0 中的 Microsoft.SharePoint.Administration 命名空间引入了对象持久性,使用它可将派生自基础 SPPersistedObject 类的类保留到 Windows SharePoint Services 数据库中。
若要创建保留的对象,您可以创建一个类,该类从 SPPersistedObject 或派生自 SPPersistedObject 的 Microsoft.SharePoint.Administration 命名空间中的某个类继承。此类可以定义一个用于存储 Windows SharePoint Services 数据库中的自定义属性设置的对象模型。例如,您可以创建通过某种方式使用 Windows SharePoint Services 的 Windows 服务,这将需要创建一个继承自 SPWindowsService 类的类,以便存储特定于 Windows 服务的设置。已编译的 DLL 将为客户提供一个可用于检索或保存属性的对象模型。Windows SharePoint Services 提供用于存储设置的方法和位置,并管理它们对服务器场中的所有服务器和过程(包括缓存刷新)的可用性。
在实际使用中,我们也可用它来保存用户的某些配置信息。
但很显然,此类也无法完成本题要求的功能。
所以本题目正确选项应该是D
参考:
http://msdn.microsoft.com/en-us/library/ff798433.aspx
http://msdn.microsoft.com/zh-cn/library/gg622616(v=office.14).aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.upgrade.splog.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.administration.sppersistedobject_members.aspx