【发布时间】:2015-07-22 10:23:40
【问题描述】:
此错误在 ASP.NET 网格视图(一个特定页面)中显示商店列表的几秒钟后显示,主要问题是如果开发团队尝试调试本地主机上不会出现此错误Web 应用程序找出数据未正确加载的错误,因此很难找到此问题的根本原因。导航到此特定页面后通过 Internet 访问此应用程序时抛出异常。我已经设法从 IIS 中获取日志以找出此错误的确切发生方法。
Exception information:
Exception type: TargetInvocationException
Exception message: Exception has been thrown by the target of an invocation.
IIS 日志(事件查看器)
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 22/07/2015 12:14:54
Event time (UTC): 22/07/2015 06:44:54
Event ID: 805078a2cfcc4523ad467862037dd16d
Event sequence: 5
Event occurrence: 2
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/1/ROOT/JKHUAT-1-130820210921302025
Trust level: Full
Application Virtual Path: /JKHUAT
Application Path: C:\inetpub\wwwroot\JKHUAT\
Machine name: DMS-APPSRV2
Process information:
Process ID: 4440
Process name: w3wp.exe
Account name: IIS APPPOOL\JKHTest
Exception information:
Exception type: TargetInvocationException
Exception message: Exception has been thrown by the target of an invocation.
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance)
at System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at DevExpress.Web.ASPxClasses.Internal.DataHelper.PerformSelect()
at DevExpress.Web.ASPxClasses.Internal.HybridDataHelper.PerformSelect()
at DevExpress.Web.ASPxClasses.ASPxDataWebControlBase.PerformSelect(String dataHelperName)
at DevExpress.Web.ASPxClasses.ASPxDataWebControlBase.PerformSelect()
at DevExpress.Web.ASPxTreeList.ASPxTreeList.EnsureNodesCreated()
at DevExpress.Web.ASPxTreeList.Internal.TreeListDataHelper.CreateRows()
at DevExpress.Web.ASPxTreeList.Internal.TreeListDataHelper.EnsureRows()
at DevExpress.Web.ASPxTreeList.Internal.TreeListBuilderHelper.Build(ITreeListBuilder builder)
at DevExpress.Web.ASPxTreeList.Internal.TreeListDataTable.CreateControlHierarchy()
at DevExpress.Web.ASPxClasses.Internal.InternalTable.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at DevExpress.Web.ASPxClasses.Internal.InternalTable.DevExpress.Web.ASPxClasses.Internal.IASPxWebControl.EnsureChildControls()
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.DevExpress.Web.ASPxClasses.Internal.IASPxWebControl.EnsureChildControls()
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.CreateChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControl.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControls()
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Page.FindControl(String id)
at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Object reference not set to an instance of an object.
at Zamsana.Vantage.BusinessLogic.OutletCategory.GetTree_CAOC(UserCredential credential) in F:\TFS2013VS2010\JKH\Dev\Zamsana.Vantage.BusinessLogic\Category.cs:line 18
Request information:
Request URL: http://discovery.keells.lk/JKHUAT/OutletView.aspx
Request path: /JKHUAT/OutletView.aspx
User host address: 192.168.254.31
User: UserName
Is authenticated: True
Authentication Type: Forms
Thread account name: IIS APPPOOL\JKHTest
Thread information:
Thread ID: 6
Thread account name: IIS APPPOOL\JKHTest
Is impersonating: False
Stack trace: at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance)
at System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at DevExpress.Web.ASPxClasses.Internal.DataHelper.PerformSelect()
at DevExpress.Web.ASPxClasses.Internal.HybridDataHelper.PerformSelect()
at DevExpress.Web.ASPxClasses.ASPxDataWebControlBase.PerformSelect(String dataHelperName)
at DevExpress.Web.ASPxClasses.ASPxDataWebControlBase.PerformSelect()
at DevExpress.Web.ASPxTreeList.ASPxTreeList.EnsureNodesCreated()
at DevExpress.Web.ASPxTreeList.Internal.TreeListDataHelper.CreateRows()
at DevExpress.Web.ASPxTreeList.Internal.TreeListDataHelper.EnsureRows()
at DevExpress.Web.ASPxTreeList.Internal.TreeListBuilderHelper.Build(ITreeListBuilder builder)
at DevExpress.Web.ASPxTreeList.Internal.TreeListDataTable.CreateControlHierarchy()
at DevExpress.Web.ASPxClasses.Internal.InternalTable.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at DevExpress.Web.ASPxClasses.Internal.InternalTable.DevExpress.Web.ASPxClasses.Internal.IASPxWebControl.EnsureChildControls()
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.DevExpress.Web.ASPxClasses.Internal.IASPxWebControl.EnsureChildControls()
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.Internal.RenderUtils.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control)
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.CreateChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControl.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControls()
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)
at System.Web.UI.Page.FindControl(String id)
at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Custom event details:
参考IIS错误日志显示的方法
public static IQueryable GetTree_CAOC(UserCredential credential)
{
VantageDataContext db = new VantageDataContext();
if (credential.DistributorUID.HasValue)
{
List<int> fullCatUIDList = new List<int>();
List<int> catUIDList = new List<int>();
List<int> dupCatUIDList = new List<int>();
var categoryUID5s = (from di in db.DistributorOutlets
join o in db.Outlets on di.OutletUID equals o.UID
where di.DistributorUID == credential.DistributorUID.Value
&& o.OutletCategory5UID != null
select new
{
CategoryUID = o.OutletCategory5UID
}
).Distinct();
foreach (var categoryUID5 in categoryUID5s)
{
int uid = (int)categoryUID5.CategoryUID;
if (!catUIDList.Contains(uid))
catUIDList.Add(uid);
if (!fullCatUIDList.Contains(uid))
fullCatUIDList.Add(uid);
}
bool flag = true;
while (flag)
{
dupCatUIDList.Clear();
dupCatUIDList.AddRange(catUIDList);
var cats = from ca in db.OutletCategories
where dupCatUIDList.Contains(ca.UID)
&& ca.ParentUID != null
select new { ca.ParentUID };
catUIDList.Clear();
foreach (var cat in cats)
{
int uid = (int)cat.ParentUID;
if (!catUIDList.Contains(uid))
catUIDList.Add(uid);
if (!fullCatUIDList.Contains(uid))
fullCatUIDList.Add(uid);
}
if (catUIDList.Count == 0)
flag = false;
}
var result = from oc in db.OutletCategories
orderby oc.Depth, oc.Description
where fullCatUIDList.Contains(oc.UID)
&& oc.ExpiryDate == null
select new
{
oc.UID,
oc.Description,
oc.ParentUID,
oc.Depth
};
return result;
}
else
{
var result = from oc in db.OutletCategories
orderby oc.Depth, oc.Description
where oc.ExpiryDate == null
select new
{
oc.UID,
oc.Description,
oc.ParentUID,
oc.Depth
};
return result;
}
}
开发团队调试了这段代码,上面的代码块中没有出现空值 知道为什么这个异常会从 ASP.net Web 应用程序中抛出吗?
调用的目标抛出异常
【问题讨论】:
-
当输入参数凭据为空时,我看到的唯一可能的 NullReferenceException。也许这个函数是由匿名用户执行的?
-
@Disappointed 我在调试凭据值不为空时再次检查了代码,并且如果我在调试期间跳过它转到 if (credential.DistributorUID.HasValue,则显示的值也是正确的) 声明和...进一步验证是否有可能修改此方法以在我加载此页面时将其 credential.DistributorUID.Value 显示为警报或其他内容?
-
是的,我知道在调试期间您的凭据不为空(否则您会在调试期间捕获异常)。也许您的凭据是从某些时间相关的存储(如 cookie)中获取的,这就是为什么它可以在生产中发生并且在调试期间无法重现?
-
在你的地方我会添加一些日志,例如最简单的文件日志。比如
GetTree_CAOC方法开头的System.IO.File.Append(YourCredential, YourFilePath)
标签: c# devexpress iis-6 windows-server-2008-r2 asp.net-4.0