gpt4 book ai didi

c# - .net c# 异常处理在 64 位模式下失败

转载 作者:可可西里 更新时间:2023-11-01 08:29:35 26 4
gpt4 key购买 nike

我的 C# Web 服务应用程序遇到问题。异常不再在某个时刻被处理。应用程序直接停止,没有任何进一步的消息/故障异常。这是发生了什么:

问题:

  • 在一个方法的 catch 部分,我抛出一个新的异常包含有关异常(exception)情况的其他信息;
  • 底层异常来 self 应用程序的另一部分;异常的“堆栈”大约是 20,但这似乎不是这里有一个问题;
  • 当使用 VS2012 开发服务器(我假设是 32 位)或 32 位模式的 IIS 时,抛出的异常被调用方法按预期拾取(最终导致我的网络服务出现 FaultException)

到目前为止我采取的步骤或其他可能有用的信息:

  • 我可以很容易地重现异常;它只是停止工作每次我运行我的代码时,都是完全相同的点。不幸的是我的不过项目太大/太复杂,无法在此处展示。
  • 一开始我假设是 VS2012 开发服务器和 IIS 之间的差异导致了我的问题。但是,当我在 IIS 中将我的应用程序池配置为 32 位时,一切正常。移至 64 位会导致此行为。
  • 内存使用似乎不是问题;在我的应用程序中,我使用(大)xml 输入文件。对这些文件(的大小)的更改没有对我的问题的影响。
  • 我尝试使用为网络服务提供的诊断工具。这些并没有真正帮助我,因为我可以看到会发生什么(或者我应该说不会发生)在 VS2012 中调试我的应用程序时;

它来了!我的原始代码如下所示:

try
{
//some code here throws an exception
}
catch (Exception ex)
{
throw new Exception("some message", ex); //after this line no activity anymore
}

当我将其更改为:

Exception myex = null;
try
{
//some code here throws an exception
}
catch (Exception ex)
{
myex = new Exception("some message", ex);
return null;
}
finally
{
if (myex!=null) throw myex;
}

我的问题解决了!?有人对此行为有解释吗?我希望依靠正常的异常处理机制。

另一条评论:当我在 try{} 部分之前放置一个“throw new Exception()”时,我的代码也运行良好(当然,我不希望这样)。

有人知道吗?提前致谢!

最佳答案

你是从后台 worker 运行这个吗?我认为您可能会遇到线程在第一部分代码中锁定的问题,但随后返回 null 允许线程在您的第二部分代码中完成。

我在这些相同的行中看到了一些错误,其中使用 MessageBox.Show() 命令将允许代码正常工作。

关于c# - .net c# 异常处理在 64 位模式下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com