由SharePoint 2010的Session引发的Access Violation异常
一个客户的SharePoint w3wp.exe经常crash, 抓来的dump里一堆Access Violation(AV)的mini dump, 最后是一个terminate process的full dump.
配置了一个ADPlus的config文件, 抓来了AV的full dump.
发现是由于客户自己写的这样一段代码抛出了AV异常.
HttpContext.Current.Session["Dummy"] = "1";
明显这是由于HttpSessionState对象为空导致的异常. 那么为什么这个SharePoint 2010 Web application中的HttpSessionState拿不到呢?
答案是因为SharePoint 2010和SharePoint 2007中, ASP.NET Session State都是默认关掉了的.
AsiaTech: Microsoft APGC Internet Developer Support Team发表了一篇文章, 描述了发生在MOSS 2007中的类似问题的解决方案. 那么SharePoint 2010里, 这篇文章的解决方案是否适用呢?
答案是不完全. SharePoint 2010中要想使用ASP.NET Session State的话, 需要开启SharePoint Server ASP.NET Session State Service这个service application. 而这个service application在界面上是无法开启的, 必须通过powershell.
开启的命令如下:
Enable-SPSessionStateService –DefaultProvision
如果想把session state的数据库放到另外的数据库服务器中, 可以变换命令的参数, 如下:
Enable-SPSessionStateService -DatabaseServer YourDBServerName -DatabaseName YourDBName
运行上面的命令之后, 已创建的web application的web.config会被自动添加如下的两行:
<sessionState mode="SQLServer" timeout="60" allowCustomSqlDatabase="true" sqlConnectionString="Data Source=sql;Initial Catalog=SessionStateService_b61bfc5803714dad8a5b86e820e42e0e;Integrated Security=True;Enlist=False;Connect Timeout=15" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
有了Session State Service Application, 要在某个web application中开启session state, 你还得修改它的web.config文件, 把false改为true如下:
好了, 这样改过之后, 这种AV的错误就不会再出现了.
参考资料
===========================
Enable ASP.NET Session State on SharePoint 2010 Application
Using Session State in SharePoint 2010
http://blogs.msdn.com/b/markarend/archive/2010/05/27/using-session-state-in-sharepoint-2010.aspx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2010-07-19 如何在WinDBG中切换当前的线程?
2009-07-19 [转]Effective C# 原则7: 选择恒定的原子值类型数据