Sharepoint學習筆記—習題系列--70-573習題解析 -(Q147-Q150)

Question 147
You have a Web application named WebApp1.
You have a Feature receiver named FeatureReceiver1. FeatureReceiver1 stores a connection string in the web.config file of WebApp1.
You need to ensure that when FeatureReceiver1 makes configuration changes to web.config, the changes are automatically replicated to all Web servers in the farm.
Which class should you use in FeatureReceiver1?
A. SPDiagnosticsService
B. SPPersistedObject
C. SPWebConfigModification
D. WebConfigurationManager前端

解析:
  本題題意是:你有一個Web Application, 一個Feature Receiver (FeatureReceiver1),此FeatureReceiver1保存了一個配置信息(數據庫鏈接字符串)在Web.config文件中,如今你想要實現的效果是:若是你在FeatureReceiver1中對Web.config保存的那個配置信息做了修改,那麼你但願這個修改會傳播到整個服務器場的全部Web Server上。
  先來了解一下Web.config及其修改。
在Sharepoint中咱們常常須要修改 web.config 文件,才能使咱們的解決方案在 Microsoft SharePoint Foundation 環境中有效。例如,可能須要添加一個 SafeControl 項,註冊 HttpModule,或自定義 SessionState,可是部署 SharePoint Foundation 將須要大量的 web.config 文件。例如,每一個 Web 應用程序對應一個文件,而且每臺前端 Web 服務器中包含每一個這些文件的副本。
爲了更加輕鬆地自定義 web.config 文件,SharePoint Foundation 提供了兩種更改方式。
第一種方式是經過建立包含一組 web.config 修改的 XML 文件以」聲明方式」註冊 web.config 項。爲此,您須要建立一個已部署到 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG 中的自定義 webconfig.XYZ.xml 文件,其中,XYZ 是您用於標識本身的解決方案的惟一 ID。
第二種方式是使用 SharePoint Foundation 對象模型來修改 web.config 設置。 即經過使用 Microsoft.SharePoint.Administration 命名空間的 SPWebConfigModification 類來實現,這使得您可以動態地對實體進行註冊。這些修改保留在配置數據庫中,在那裏,它們充當一種虛擬 web.config,後者其實上充當 SharePoint Foundation Web 應用程序的 .config 文件堆棧的最後一層。在調用 SPWebService.ApplyWebConfigModifications 方法時,所作更改纔會生效。
調用 ApplyWebConfigModifications 方法將安排一個計時器做業以在整個服務器場中部署更改【這句話說明了SPWebConfigModification類操做的範圍是整個服務器場】。若要將 web.config 修改應用於特定的 Web 應用程序,請將此修改添加到 Web 應用程序的 web.config 修改集 (WebConfigModifications) 中。例如,您可使用 oWebSite.Site.WebApplication.WebConfigModifications.Add(MyModification) 將 web.config 修改添加到特定網站的父 Web 應用程序中。即便是將 web.config 修改添加到單個 Web 應用程序,您也仍舊必須調用 ApplyWebConfigModifications。
 經過上面的描述,咱們能夠定位選項C爲本題的正解。
   繼續分析其它備選項提供的各個類,看看它們都提供了什麼樣的功能:
選項A. SPDiagnosticsService 在對 SharePoint 生成的消息進行疑難解答時,從 SharePoint ULS 日誌讀取會頗有用。但開發人員真正須要的是,可以將本身的消息寫入日誌文件。Microsoft 經過使用 SPDiagnosticsService 類使對 SharePoint 2010 中的日誌文件進行寫入變得更加容易。因此此類是用於對Sharepoint日誌文件進行操做的,和本題的要求相距離甚遠。
選項B. 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 提供用於存儲設置的方法和位置,並管理它們對服務器場中的全部服務器和過程(包括緩存刷新)的可用性。 在實際使用中,咱們也可用它來保存用戶的某些配置信息。很顯然,此類與Web.config的操做沒什麼關係。
選項D. WebConfigurationManager 屬於.NET中的傳統概念,在.NET FrameWork中若是須要靈活的操做和讀寫配置文件並非十分方便,通常都會在項目中封裝一個配置文件管理類來進行讀寫操做。而在. NET2.0中使用ConfigurationManager 和WebConfigurationManager 類能夠很好的管理配置文件,ConfigurationManager類在System.Configuration 中,WebConfigurationManager在System.Web.Configuration中。根據MSDN的解釋,對於 Web 應用程序配置,建議使用System.Web.Configuration.WebConfigurationManager 類,而不要使用 System.Configuration.ConfigurationManager 類。web

因此本題目正確選項應該是C
參考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx
http://msdn.microsoft.com/zh-cn/library/gg512103(v=office.14).aspx數據庫


Question 148
You need to create a Web Part that will store and retrieve information for the current subsite.
Which object should you use?
A. SPContext.Current.Site.RootWeb.AllProperties
B. SPContext.Current.Site.RootWeb.Configuration
C. SPContext.Current.Web.Configuration
D. SPContext.Current.Web.Properties緩存

解析:
   本題試圖獲取當前子網站(subsite)的相關信息。
   首先只要一看到SubSite就能夠直接排除與Site相關的選項了【排除選項A.B】,由於Site表明的是網站集(Site Collection),而SubSite表明的是Web.
  再來看選項C.D
  選項C. SPContext.Current.Web.Configuration : 此屬性返回是ID值(16位的整數值),表明網站定義配置信息(Configuration of Site Definition)的ID。
選項D. SPContext.Current.Web. Properties: 用於保存網站的相關設置信息,例如:Windows SharePoint Services的版本,本地語言等等。建議使用AllProperties屬性來返回關於Web Site的全部設置信息,而Properties屬性只是返回其中的部分信息。  .
因此本題目正確選項應該是D
參考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.properties.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spweb_members(v=office.12).aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spweb.allproperties(v=office.12).aspx安全


Question 149
You have a SharePoint site that uses the default search settings.
You create a new Search Center.
You need to ensure that the new Search Center is the default Search Center for the site.
What should you modify?
A. the AllProperties collection of the site
B. the AllWebs collection of the site collection
C. the Cache property of the current HttpContext
D. the Session property of the current HttpContext服務器

解析:
    本題是想要用搜索中心(Search Center)來代替一個SharePoint site原來默認使用的Default Search Settings。
    咱們先來看看如何經過Sharepoint操做界面來實現本題的要求,即:選擇某個Sharepoint Site的 Site Actions→Site Settings 進入到此網站設置信息頁面,在Site Collection Administration欄,點擊Search Settings就能夠設置此Site的相關Search項了。
   因此你能夠看出,關於Search Settings設置是屬於Site的相關設置信息,根據Question148的描述,此類信息是保存在AllProperties屬性或Properties屬性中的。因此選項A 爲本題的答案。
   再來看其它選項
選項B. the AllWebs collection of the site collection 返回某網站集包含的全部Webs對象。
選項C. the Cache property of the current HttpContext  獲取當前應用程序域的 Cache 對象。
選項D. the Session property of the current HttpContext爲當前 HTTP 請求獲取 HttpSessionState 對象
    因此本題目正確選項應該是A
參考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.allproperties.aspx
http://www.novolocus.com/2010/12/22/stupid-spweb-properties/app

 

Question 150
You create a class that inherits the SPPersistedObject class.  The class has a field named Field1.
You need to ensure that Field1 can be serialized and stored in the SharePoint configuration database.
Which two actions should you perform? (Each correct answer presents part of the solution. Choose two)
A. Add the default empty constructor.
B. Mark Field1 with the [Persisted] attribute.
C. Mark Field1 with the [Serializable] attribute.
D. Set the value of the SPWeb.AllowUnsafeUpdate property.
解析:
  本題是關於如何應用SPPersistedObject類的題目。
  咱們知道SPPersistedObject類是用於爲對象提供自動序列化其狀態值並持久保存以及在須要時獲取前面所保存的值並反序列化的相關方法。也即,它屬於定義自定義管理設置方面的類。  在 Windows SharePoint Services 平臺上構建應用程序時,您可能須要建立一個類以定義應用程序的自定義屬性設置並提供用於存儲這些設置的方法。
   下面是一段實現示例:ide

[GuidAttribute("3B60B328-F4D6-4902-BEC6-E904179FA246")]
public class MyObject : SPPersistedObject
{
   [Persisted]
   private string location;

   [Persisted]
   private string field1;

   public MyObject()
   {
   }
   /*The default constructor must be specified for serialization.*/
   public MyObject(string name, SPPersistedObject parent)
      : base(name, parent)
   {
      ;
   }

   public override string DisplayName
   {
      get
      {
         return this. field1;
      }
   }

   public string Field1
   {
      get { return this. field1; }
      set 
      {
         if (this. field1== value)
         {
            return;
          }

          this. field1= value;
      }
   }

   public string Location
   {
      get { return this.location; }
      set { this.location = value; }
   }
}

再來看SPPersistedObject類的進一步描述:
   SPPersistedObject類包含了序列化實現代碼。當建立一個用戶自定義的Persisted對象時,你必須爲其序列化定義一個默認的構造函數(Constructor)
  因此選項A.B符合本題要求。
選項C. Mark Field1 with the [Serializable] attribute. 用於標識你的類、結構、代理或枚舉爲  [Serializable],意在說明此類能夠被序列化。 通常是用於修飾整個類,而不是某個類內部的屬性成員。以下示例:函數

using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

[Serializable]
public class BookRecord {
    public String title;
    public int asin;

    public BookRecord(String title, int asin) {
        this.title = title;
        this.asin = asin;
    }
}


public class SerializeObject {
    public static void Main() {
        BookRecord book = new BookRecord("title",123456789);
        FileStream stream = new FileStream(@"book.obj",FileMode.Create);

        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(stream, book);
        stream.Close();
    }
}

選項D. Set the value of the SPWeb.AllowUnsafeUpdate property. 此屬性是用來標識是否容許更新數據庫的。 一般而言SharePoint 2010 是要阻止開發人員對 GET 請求執行狀態更改操做的。例如,在使用 GET 獲取列表項或 Web 屬性時,不容許 Microsoft ASP.NET 頁更新列表項或 Web 屬性的內容。但若是您的功能設計強制對 GET 請求執行狀態更改操做,則您可經過將當前 Microsoft.SharePoint.SPWeb 類的 AllowUnsafeUpdates 屬性設置爲 true 以禁用此檢查。請記住,在執行操做後重置該屬性,並使用 try-catch-finally 塊以確保異常不會將該屬性保持爲 true。由於此項存在安全隱患,因此,微軟一般建議儘可能避免使用 AllowUnsafeUpdates。
 
因此本題目正確選項應該是A.B
參考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.sppersistedobject.aspx
http://www.chaholl.com/archive/2011/01/30/the-skinny-on-sppersistedobject-and-the-hierarchical-object-store-in.aspx網站

相關文章
相關標籤/搜索