博客地址 http://blog.csdn.net/foxdave
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
版权声明:本文博客原创文章。博客,未经同意,不得转载。