【发布时间】:2013-06-15 22:43:43
【问题描述】:
我的 c# webservice 应用程序遇到问题。异常不再在某个时刻处理。应用程序只是停止而没有任何进一步的消息/故障异常。这就是发生的事情:
问题:
- 在方法的 catch 部分中,我抛出了一个新异常,其中包含 有关例外情况的其他信息;
- 底层异常来自我的应用程序的另一部分; 异常的“堆栈”约为 20,但这似乎不是 这里有个问题;
- 在使用 VS2012 开发服务器(我假设是 32 位)或 32 位模式下的 IIS 时,调用方法会按预期拾取抛出的异常(最终导致我的 web 服务的 FaultException)
到目前为止我已采取的步骤或其他可能有用的信息:
- 我可以轻松重现异常;它只是停止工作 每次我运行我的代码时都完全相同。不幸的是我的 项目太大/太复杂,无法在此处展示。
- 起初我认为一方面是 VS2012 开发服务器与另一方面是 IIS 之间的差异导致了我的问题。 但是,当我在 IIS 中将我的应用程序池配置为 32 位时, 一切正常。迁移到 64 位会导致此行为。
- 内存使用似乎不是问题;在我的应用程序中,我使用(大)xml 输入文件。对这些文件(大小)的更改没有 影响我的问题。
- 我尝试使用为 Web 服务提供的诊断工具。这些并没有真正帮助我,因为我可以看到会发生什么(或者我应该说 不会发生)在 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()”时,我的代码也运行良好(当然,我不希望这样)。
有人知道吗?提前致谢!
【问题讨论】:
-
你能用一个简短但完整的控制台应用程序重现这个吗?您说您可以在您的应用程序中重现它 - 在您的应用程序的上下文中重现它not 并且在网络服务中重现它not 会非常有帮助。
-
@dirk - 可以在 应用程序简单地停止而没有任何进一步的消息/故障异常 上进行说明吗?那时你可以在调试器中看到什么?
-
@Henk Holterman - 什么都没有。我只能按 VS 中的“停止”按钮。就这样。 EventViewer 中也没有任何内容。而且(显然),网络服务停止响应(我正在使用 SoapUI 对其进行测试)。
-
除非访问您的环境,否则无法说出原因。我猜应该是 IIS 上的 64 位模块吃异常。如果您熟悉 WinDbg + SOS,您可以对其进行实时调试。要从专家那里获得一些帮助,您可以通过support.microsoft.com 打开支持案例以咨询 Microsoft。
-
我有兴趣查看可疑代码生成的 IL。
标签: c# .net exception-handling 32bit-64bit