SharePoint【学习笔记】-- 存取Sharepoin配置信息的10条途径

如何保存配置信息,是开发Sharepiont应用必然遇到的问题,这里列举了10条途径,它们有各自不同的适用环境以及优缺点。
   1、使用App/Web的Config文件
   Sharepoint的有关Web.config 文件包含在文件系统中的以下文件夹中:

  • /inetpub/wwwroot/wss/VirtualDirectories/端口号—为SharePoint 内容Web 应用程序定义配置设置的web.config 文件。
  • /inetpub/wwwroot/wss/VirtualDirectories/管理中心的端口号—为SharePoint 管理中心应用程序定义配置设置的web.config 文件。
  • /inetpub/wwwroot/wss/VirtualDirectories/端口号\wpresources —在Web 应用程序的Web 部件资源中使用的web.config 文件。
  • //program/ Files\Common Files\Microsoft Shared\Web Server Extensions\wpresources —在全局程序集缓存的Web 部件资源中使用的web.config 文件。
  • %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG —共同定义用于扩展其他Web 应用程序的配置设置的web.config 文件和其他.config 文件。
  • %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI —为/_vti_bin 虚拟目录定义配置设置的web.config 文件。
  • %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS —为/_layouts 虚拟目录定义配置设置的web.config 文件。 

     在创建SharePoint Foundation Web 应用程序时,顶级web.config 文件位于Web 应用程序的内容根文件夹中,该文件为服务器定义配置设置(例如,Web 部件的HTTP 处理)。

     用于Web 部件资源的另一个web.config 文件位于同一根文件夹中的\wpresources 文件夹中。
     你可以通过编程来修改上面的某些Webconfig文件(如使用 Microsoft.SharePoint.Administration 命名空间的 SPWebConfigModification 类)。

     Web.config这种方式适用于配置信息需要在Web-application的范围内有效的情景,但应用起来略显繁重。


  2、使用SharePoint List
     有人采用在数据库中创建数据表来存取配置信息,这样做也不是不行,但在Sharepoint Solution开发中这并不是好的方法。你可以使用一个Sharepoint List来代替数据库表的方式,因为这样比较简单,你所创建的Sharepoint List可以包含Title与Value两个数据列,这样你就可以把相关配置信息保存到这个List中了。采用这种方式的好处是你无需再开发一个用户管理界面来管理你的配置信息,因为在Sharepoint中这些都是随着List自动具备的,你只需要在这个List上设置相关的Permission就行了(因为不是谁都可以进来查看和修改的)。当然这样做也有不足,那就是你需要另外的配置信息来告诉你上哪儿去找这样的List,感觉好像又绕了一圈回来了。

 

  3、使用 SPList.RootFolder.Properties
 如果想要存取与List相关联的配置信息,你可以使用SPList.RootFolder.Properties。

//Get Value
SPList.RootFolder.Properties["vti_listservertemplate"]=MyValue

//Set Value
string MyValue =SPList.RootFolder.Properties["vti_listservertemplate"]

 


  4、使用Web Part Storage
 我们可以使用类似于[Personalizable(PersonalizationScope.Shared), WebPartStorage(Storage.Shared)] public string title { } 的形式来存取与Web Part有关的配置信息。

复制代码
#region Webpart Properties
[WebBrowsable(true),
Category("Facebook Settings"),
Personalizable(PersonalizationScope.Shared),
WebPartStorage(Storage.Shared),
DefaultValue(""),
WebDisplayName("User Id / User Name"),
WebDescription("Please enter user id")]

public string UserID { getset; }

[WebBrowsable(true),
Category("Facebook Settings"),
Personalizable(PersonalizationScope.Shared),
WebPartStorage(Storage.Shared),
DefaultValue("10"),
WebDisplayName("Wall Count"),
WebDescription("Please enter number of wall you want to display")]

public int WallCount { getset; }

#endregion   
复制代码


  5、使用SPWeb object
  SPWeb object有一个名为Properties的持久性StringDictionary属性,它可以被用来保存与Site有关的特定的配置信息,并且此配置可以在你的整个Farm上都有效。你可以使用如下的代码来操作它:

复制代码
SPWeb  web = ...;  
// set the value 
web.Properties["TheSetting"] = "the value";   

// update the value   
web.Properties.Update();   

// get the value   
string val = web.Properties["TheSetting"];
复制代码

    因此,这种方式用于保存key/value形式的配置信息时很有效,而当需要保存比较复杂的配置信息时,就不那么方便了,你需要把那些相对复杂的配置信息序列存储成XML模式,并进行序列化/反序列化(serialization/deseralization)。当然,你需要取得 Manged Web的permission才有操作这些配置,此外你还需要开发你自己的用户操作界面来管理这些配置信息。

 

  6、使用SPSite object
   SPSite object与SPWeb object不同,它并没有像SPWeb object的Properties那样的属性,因此,如果你想要存取Site Collection级别的配置信息,你可以变通使用SPSite.RootWeb这个特殊的SPWeb object来达到目的。

 
  7、使用SPWebApplication Properties
  如果你想要在Web Application级别存取配置信息,而你又并不想修改web.config,这种情况下,你可以使用SPWebApplication object。SPWebApplication object继承自SPPersisted Object,它也有一个名为Properties的HashTable属性,你可以使用它来存取Key/Value形式的配置信息,对于比较复杂的信息也可以通过序列化来进行处理。示例代码如下: 

SPWebApplication webApp = ...   
object obj = ...   
// set value  
webApp.Add("TheSetting", obj);   

// persist it  
webApp.Update();

这种方式需要用户以Farm Administrator权限进行操作并且你需要构建你自己的操作管理界面。 

 

   8、 使用Custom SPPersistedObjects
  或许使用Custom SPPersistedObjects是最好的方式来存取Web Application的配置信息了,这种方式的好处是在存取较为复杂的配置信息时比较方便,你可以创建一个继承自SPPersistedObject的类,把需要存取的配置设定为此类的属性,并把这些属性标记为Persisted。示例代码如下: 

复制代码
public class TheSettings: SPPersistedObject 
{  
    public TheSettings() {}     
    public TheSettings(string name, SPPersistedObject parent, Guid id): base(name, parent, id) { }        
    [Persisted]  site.RootWeb.RootFolder.Properties.Add("SiteName","YourSite");  
    public string WebServiceUrl;  
 }
复制代码

  然后你可以使用SPWebApplication  GetChild方式来提取你上面所保存的配置信息。 

   TheSettings settigs = webApplication      
  .GetChild<TheSettings>("theSettings");

  你可以创建两个静态方式来方便你的操作。  当然,这种方式仍然需要Farm Administrator,并且你需要创建你自己的管理界面。 

复制代码
  public static TheSettings GetSettings(SPWebApplication webApplication) 
 {        
    TheSettings settings = webApplication.GetChild<TheSettings>("theSettings");         
   if(settings == null) {             
      return TheSettings.CreateNew(webApplication);}       
      return settings;     }     
    public static TheSettings CreateNew(SPWebApplication webApplication) 
      { return new TheSettings("theSettings",  webApplication, Guid.NewGuid());}
复制代码

  

   9、 使用Feature Folder中的XML文件
    你可以把配置信息保存到XML文件中,然后把这个文件放置到对应的Feature Folder下,这种方式的特点是配置信息不依赖于Sharepoint本身,并且一般是不让用户去直接修改的(即:存放的是静态配置信息)。


  10、一个Config Store的Framework
 你可以获取这个Framework(Sharepoint Config Store),这个Framework可以支持你把配置信息保存到List上,并且提供了API来提取你所保存的配置信息,这些配置信息可以是比较复杂的对象,它们被保存为XML格式。

 这里就列举了10个与Sharepoint Solution开发中关于存取配置信息的途径,其中的代码样例只是示意参考,你需要查阅具体的技术文本去使用相关的内容,因为这里只是扫描一下有关存取配置信息的手段,所以应用代码不是重点。

 相信你还使用了其他的手段,请写出来与大家分享。

转载:http://www.cnblogs.com/wsdj-ITtech/archive/2012/04/16/2440653.html

posted @ 2013-02-20 15:54  绿森林  阅读(255)  评论(0编辑  收藏  举报