標籤:sharepoint
SharePoint啟用Session可以使用Powershell,戳這裡;可以修改webconfig。
本篇敘述的重點是通過feature去控制啟用session和關閉session。
建立一個空的SharePoint項目,編寫FeatureEventHandler的FeatureActivated和FeatureDeactivating的處理邏輯
public override void FeatureActivated(SPFeatureReceiverProperties properties) { SPWebApplication application = (SPWebApplication)properties.Feature.Parent; try { Config.Update(application); application.Update(); application.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications(); } catch { Config.Restore(application); } } public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { SPWebApplication application = (SPWebApplication)properties.Feature.Parent; try { Config.Restore(application); application.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications(); } catch { } }這裡Config是關於Session的處理類,因為啟用和禁用Session本質上還是修改IIS網站的配置,所以擷取WebApplication對象,通過代碼修改webconfig內容。
Config類的代碼如下
class Config { private static void ExecUpdate(SPWebApplication webApp, string name, string path, string value, Microsoft.SharePoint.Administration.SPWebConfigModification.SPWebConfigModificationType type) { SPWebConfigModification modification = new SPWebConfigModification(); modification.Name = name; modification.Path = path; modification.Value = value; modification.Sequence = 0; modification.Type = type; modification.Owner = "SP_MIP_Team_EnableSession"; SPWebConfigModification item = modification; webApp.WebConfigModifications.Add(item); } public static void Restore(SPWebApplication webApp) { webApp.Update(); List<SPWebConfigModification> configModificationsToRemove = new List<SPWebConfigModification>(); foreach (SPWebConfigModification spWebConfigModification in webApp.WebConfigModifications) { if (spWebConfigModification.Owner == "SP_MIP_Team_EnableSession") { configModificationsToRemove.Add(spWebConfigModification); } } foreach (SPWebConfigModification configModification in configModificationsToRemove) { webApp.WebConfigModifications.Remove(configModification); } webApp.Update(); } public static void Update(SPWebApplication webApp) { string name = null; string path = null; string value = null; name = "add[@name='Session'][@type='System.Web.SessionState.SessionStateModule']"; path = "/configuration/system.web/httpModules"; value = "<add name='Session' type='System.Web.SessionState.SessionStateModule' />"; ExecUpdate(webApp, name, path, value, SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode); name = "enableSessionState"; path = "/configuration/system.web/pages"; value = "true"; ExecUpdate(webApp, name, path, value, SPWebConfigModification.SPWebConfigModificationType.EnsureAttribute); name = "add[@name='session'][@type='System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a']"; path = "/configuration/system.webServer/modules"; value = "<add name='session' type='System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' />"; ExecUpdate(webApp, name, path, value, SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode); } }這裡利用SPWebApplication對象來記錄WebConfigModifications,即webconfig的修改,這樣做的好處是可以方便地還原通過代碼修改的webconfig
SharePoint開發 - 使用Session(代碼修改webconfig)