调试通过的解决方案部署到生产服务器出现错误—未将对象引用设置到对象的实例

今天将一个在测试环境中测试通过的WSP解决方案部署到生产环境时出现如下错误:

Event code: 3005 
Event message: 发生了未处理的异常。
Event time: 2012/3/5 15:11:36
Event time (UTC): 2012/3/5 7:11:36
Event ID: 53e61463a2404804abd431d6c573ebd7
Event sequence: 75
Event occurrence: 1
Event detail code: 0

Application information:
Application domain: /LM/W3SVC/1082957370/ROOT-1-129754049971294831
Trust level: WSS_Minimal
Application Virtual Path: /
Application Path: C:\inetpub\wwwroot\wss\VirtualDirectories\80\
Machine name: XXXX

Process information:
Process ID: 5832
Process name: w3wp.exe
Account name: User2

Exception information:
Exception type: NullReferenceException
Exception message: 未将对象引用设置到对象的实例。

Request information:
Request URL: http://XXXX/_layouts/XXXX.aspx?para=XX&IsDlg=1
Request path: /_layouts/XXXX.aspx
User host address: ***.***.***.***
User: User1
Is authenticated: True
Authentication Type: Negotiate
Thread account name: User2

Thread information:
Thread ID: 10
Thread account name: User2
Is impersonating: True
Stack trace: 在 Microsoft.Office.Server.WebControls.MetaDataNavTree.OnUnload(EventArgs e)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Control.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Page.UnloadRecursive(Boolean dispose)
在 System.Web.UI.Page.ProcessRequestCleanup()
在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
在 System.Web.UI.Page.ProcessRequest()
在 System.Web.UI.Page.ProcessRequest(HttpContext context)
在 ASP._layouts_hrmuserprofilemanagementwebpart_empinfomation_aspx.ProcessRequest(HttpContext context)
在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


Custom event details:

首先测试环境和生产环境站点结构一模一样,只是服务器场管理员,网站管理员等不同,另外此WSP解决方案里面有提升权限的代码,生产环境中User1为普通用户,User2为应用程序管理员,User3为该生产环境的服务器场管理员,并且可以确定不是代码发生的错误,由此可判断发生此错误定为用户权限的问题。

从错误信息中可以看出,本来是User1发出的请求,但是经权限提升后进程是有User2在运行,则证明是User2权限不足,因为所有提升权限的代码必须是场管理员来运行,所以User2必须要为场管理员中的一员。

现在就很清楚了,只要把User2加入到生产环境的场管理员里面,然后重启一下IIS,就可以解决上述的问题了。

作者:Statmoon
         
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2012-03-05 16:49  Statmoon  阅读(3944)  评论(0编辑  收藏  举报