【问题标题】:Exception message: Exception has been thrown by the target of an invocation.ASP.NET Web Application (.NET Framework 4 )异常消息:调用的目标已引发异常。ASP.NET Web 应用程序(.NET Framework 4)
【发布时间】: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


【解决方案1】:

感谢您的反馈@disappointed,我能够确认凭据值变为NULL,并且我得到了另一个构建,对上述凭据值进行了硬编码,然后网格正确加载了数据而没有给出任何错误,所以我决定修改下面提到的代码,它对我有用!

 public static IQueryable GetTree_CAOC(UserCredential credential)
    {
        VantageDataContext db = new VantageDataContext();

        if (credential.DistributorUID.HasValue)
        {
            int DistributorUID = credential.DistributorUID.Value;
            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 == DistributorUID
                                      && 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;
        }
    }  

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 2018-11-08
    • 2018-02-14
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多