12

我在我的 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()”时,我的代码也运行良好(但当然,我不希望这样)。

任何人有任何线索?提前致谢!

4

4 回答 4

1

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

我已经看到了一些错误,使用 MessageBox.Show() 命令将允许代码正常工作。

于 2013-08-01T01:12:03.230 回答
0

此问题可能与平台本身有关。您可以将其报告给 Microsoft Connect,希望您能很快得到答复。

于 2013-07-03T20:56:54.537 回答
0

您的项目中是否有任何参考程序集是偶然的 32 位并在该方法的范围内被引用?如果是这样,那将是一个很好的例子,说明为什么在 64 中运行会导致未定义的行为。我之前在另一个项目中被这个咬过,并且有神秘的应用程序崩溃。

于 2013-07-12T03:29:06.770 回答
0

使用 64 位机器时,我在 VS2012 中看到了类似的行为,通过将平台显式设置为 x64(而不是“任何 CPU”)以及禁用(取消选中)任何“启用调试器'。我无法解释为什么这些黑客会奏效。

您可以在 Menu:Build->Configuration Manager ... 中创建一个新的“活动解决方案平台”。

调试设置可以在 Menu:Project->proj properties 中找到。

我很想知道为什么会这样,或者其他人是否找到了类似的解决方法来解决围绕异常的无法解释的行为问题。

于 2013-08-22T15:50:10.983 回答