c# - 共享点 2010 "unhandled win32 exception occurred in W3WP.EXE"

标签 c# debugging sharepoint-2010

我遇到一个 win32 异常,需要帮助调试。我有一个包含自定义 Web 部件的 SharePoint 页面,当我浏览到该页面时,我收到以下消息:

In w3wp.dmp the assembly instruction at ntdll!RtlReportCriticalFailure+62 in 
C:\Windows\System32\ntdll.dll from Microsoft Corporation has caused an unknown
exception (0xc0000374) on thread 43

Unhandled exception at 0xHEX in w3wp.exe: 0xc0000374: 
A heap has been corrupted

我真的不知道从哪里开始调试这个问题,在互联网上搜索也没有什么结果。

我已保存 DMP 文件并将其加载到调试诊断工具中进行分析。我不知道哪些部分最重要,所以如果有人能告诉我应该发布哪些部分,我会发布它们。

我认为问题出在哪里:

我已经缩小了问题可能的范围。如果我不调用这些方法,我就不会收到错误。我访问 TermStore 的方式有问题吗?

    private void GetTerms()
    {
        using (SPSite site = new SPSite(PhaseListUrl.Value))
        {
            var session = new TaxonomySession(site);
            if (session.TermStores == null || session.TermStores.Count == 0) return;

            OfficeDropdown.Items.Clear();
            OfficeDropdown.Items.Add("");

            var termStore = session
                .TermStores
                .FirstOrDefault(ts => ts.Groups.Any(g => g.Name == TaxonomyName.Value));
            try
            {
                var group = termStore.Groups[TaxonomyName.Value];
                foreach (var ts in group.TermSets)
                {
                    if (!ts.IsAvailableForTagging) continue;

                    AddTerms(site, termStore, ts.Id, ts.Terms);
                }
            }
            catch (NullReferenceException) { OfficeDropdown.Items.Add("ERROR: Check your Org Term Store Name"); }
            catch (ArgumentOutOfRangeException) { OfficeDropdown.Items.Add("ERROR: Check your Org Term Store Name"); }
        }
    }

    private void AddTerms(SPSite site, TermStore termStore, Guid tsId, TermCollection coll)
    {
        foreach (var t in coll)
        {
            if (t.IsAvailableForTagging)
            {
                var wssIds = TaxonomyField.GetWssIdsOfTerm(site, termStore.Id, tsId, t.Id, true, 1000);

                if (wssIds.Length != 0)
                {
                    var id = wssIds[0];
                    var validatedString = string.Format("{0};#{1}{2}{3}", id, t.Name, TaxonomyField.TaxonomyGuidLabelDelimiter, t.Id);
                    OfficeDropdown.Items.Add(new ListItem(t.Name, validatedString));
                }
                else
                {
                    int id = -1;
                    var value = new TaxonomyFieldValue(SPContext.Current.Web.AvailableFields[new Guid("{a64c1f69-c0d6-421a-8c8a-9ef8f459d7a2}")]);
                    value.TermGuid = t.Id.ToString();

                    var dummy = value.ValidatedString;
                    if (dummy != null)
                        id = value.WssId;

                    var validatedString = string.Format("{0};#{1}{2}{3}", id, t.Name, TaxonomyField.TaxonomyGuidLabelDelimiter, t.Id);
                    OfficeDropdown.Items.Add(new ListItem(t.Name, validatedString));
                }
            }
            AddTerms(site, termStore, tsId, t.Terms);
        }
    }

更新:

错误在 TaxonomyField 中。我正在访问术语跨站点集合,但尚未生成 ID。还要注意不是同一个跨站点集合的 TermStore ID(并知道您从哪里调用以及您调用到哪里!)

最佳答案

这里有一些建议。

  1. 打开 ULS 日志查看器并研究日志,如果您点击该页面并收到该错误,它应该记录在那里。

  2. 检查 Web 前端服务器上的应用程序事件日志。

  3. 您是否也尝试过附加到 W3P.exe 进程并调试解决方案? (当然假设不是生产环境)。

关于c# - 共享点 2010 "unhandled win32 exception occurred in W3WP.EXE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14887285/

相关文章:

c# - 如何将复选框列表的多个值传递给代码后面的存储过程?

c++ - 任何查看 C/CPP 应用程序内存数据结构的方法?

.net - 使用SPSite构造函数的FileNotFoundException

c# - 从字符串 EOT 逗号 ETX 中删除控制字符序列

c# - 如何在 Unity3d MonoDevelop 中使用继承?

c# - 如何从两个日期中获取工作周

c++ - 搜索具有特定签名调用的函数?

java - 如何获取正在运行的应用程序的 Java 调用堆栈

java - 如何使用 REST API - Java 从 SharePoint 2010 获取更新的数据?

c# - Sharepoint 2010、ClientContext 和 401 未经授权