【问题标题】:External component has thrown an exception外部组件引发的异常
【发布时间】:2011-07-16 05:16:34
【问题描述】:

我有一个使用 C# 的 ASP.NET 网站,它使用 DLLImport 调用 C++ 方法。一切正常,突然我不断收到此错误:

外部组件抛出异常。描述:一个未处理的 执行当前 Web 请求期间发生异常。 请查看堆栈跟踪以获取有关错误的更多信息和 它起源于代码。

异常详细信息:System.Runtime.InteropServices.SEHException: 外部组件抛出异常。

源错误:在执行过程中产生了未处理的异常 执行当前的 Web 请求。有关原产地的信息 可以使用异常来识别异常的位置和位置 下面的堆栈跟踪。

【问题讨论】:

  • 你能发布完整的堆栈跟踪吗?事件查看器中是否有与此错误相关的内容?
  • 堆栈跟踪仅指向调用 C++ 方法的 C# 方法。你认为这可能是因为 C++ dll 被缓存了,我必须清理 asp.net 临时文件?
  • 也许,尤其是在服务器上没有其他任何变化的情况下。我猜您尝试了 iisreset 或至少回收了应用程序池?
  • 是否有提供更详细信息的内部异常?
  • 每次我执行 IISRESET 时它都会消失,并在我第二次运行该方法时重新出现。好像被缓存了有什么办法可以避免这个问题?

标签: c# asp.net c++


【解决方案1】:

显然,异常源自 C++ 代码中的某处。请参阅this 以了解 SEHException。您可以使用 ErrorCode 属性来获取实际错误。如果是常见的 HRESULT 代码,您可以通过互联网搜索获取详细信息,如果是自定义代码,则可能需要联系 C++ 组件作者了解更多详细信息。

【讨论】:

  • 每次我执行 IISRESET 时它都会消失,并在我第二次运行该方法时重新出现。好像被缓存了有什么办法可以避免这个问题?
  • @KnowledgeSeeker,你可能会草草下结论!错误的原因可以是任何东西 - 例如,您可能不正确地使用组件,此后第二次调用由于无效状态等而失败。唯一知道的方法是检查组件返回的错误代码 - 这可能会给您一些想法。
  • 我调用它一次,一切正常。我调用它两次,它的工作原理。然后它随机停止工作,唯一的解决方案是 IIS。如何从异常中获取错误代码?
  • @KnowledgeSeeke,正如我在答案中所说,用户ErrorCode异常对象的属性。
  • 0x80004005 表示访问被拒绝。在 C++ 中,我正在阅读一些文件,但我认为这些文件仍然被锁定。你知道如何卸载 C++ DLL 或如何释放 C++ 持有的所有锁吗?
猜你喜欢
  • 2013-04-19
  • 2015-12-05
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多