【问题标题】:System.AccessViolationException unknown moduleSystem.AccessViolationException 未知模块
【发布时间】:2016-11-16 20:32:24
【问题描述】:

我的 WebAPI 中目前有一个控制器,它返回数据库中某些项目的列表:

如下:

public ICollection<TherapyGroup> OffUnit()
{                
      return _context.TherapyGroups.OrderBy(g => g.Name)
                     .Where(x => x.GroupTypeOffUnitOnUnit == TherapyGroup.OffUnit)
                     .ToList();               
}

当我针对本地数据库进行测试时,一切正常;但是,当我为远程数据库切换数据库字符串时,它会引发 System.AccessViolationException。基于断点,数据正在从数据库中正常返回,当方法返回到 MVC 中的 WebApi 时,似乎问题正在发生。这已成为一个非常令人沮丧的问题,我希望得到任何帮助来解决它。

弹出的错误窗口:

【问题讨论】:

  • 能否提供您看到的异常的堆栈跟踪信息?
  • 我没有看到堆栈跟踪...请注意,违规发生在未知模块中。
  • 请在您的代码中添加 try catch 块。然后把更多的细节。
  • 在 .net 中,每当您遇到异常时,您都会获得堆栈跟踪。你的情况不太可能有很大不同。
  • Here 可能会提供一些帮助。

标签: c# asp.net asp.net-web-api


【解决方案1】:

使用 HandleProcessCorruptedStateExceptions 属性装饰您想要捕获这些异常的方法。详情请见https://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035

[HandleProcessCorruptedStateExceptions] 
[SecurityCritical]
public ICollection<TherapyGroup> OffUnit()
{
      try
      {
          return _context.TherapyGroups.OrderBy(g => g.Name).Where(x => x.GroupTypeOffUnitOnUnit == TherapyGroup.OffUnit).ToList();
      }
      catch (Exception e)
      {
          // set break point to see the stack trace.
          Debug.WriteLine(e.InnnerException);
          return null;
      }
}

【讨论】:

  • 我已经做到了。它似乎没有达到断点。这表明问题是在返回后发生的。
  • @CodyShort,您可以在配置文件中添加&lt;legacyCorruptedStateExceptionsPolicy enabled="true" /&gt;。也请看here
  • 我想我要提出问题了。我相信 sql server v10(远程)和 v9(本地)中的数据类型在某些方面有所不同(也许是日期时间?)我拿了这个对象并用字符串来准备一个返回对象,事情正在工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
相关资源
最近更新 更多