奇怪的.Net运行时错误:system.servicemodel.fault

时间:2011-09-19 10:10:25

标签: c# .net runtime error-log

我们一直看到这个错误在我们的系统事件日志中突然出现了惊人的数量。它涉及一个非常简单的命令行应用程序(实际上是四到五行实际处理代码),它在同一台机器上使用Web服务。我修改了应用程序配置,似乎解决了问题,但现在又回来了 该错误仅出现在事件查看器中,看起来有点像这样:

  

事件类型:错误
  事件来源:.NET Runtime 2.0错误报告
  活动类别:无
  事件ID:5000
  日期:19/09/2011
  时间:09:26:04
  用户:N / A
  电脑:SQL
  描述:   EventType clr20r3,P1 estimatorcli.exe,P2 1.0.0.0,P3 4e410f1b,P4   mscorlib,P5 2.0.0.0,P6 4d8c128c,P7 420e,P8 51,P9   system.servicemodel.fault,P10 NIL。

对不起,如果这太多了 谷歌搜索并未带回大量信息,只是对EventType的一些模糊引用。我已经尝试过调试,很多时候,程序在我的XP64开发机器上运行正常(服务器运行2003 Ent64)。但是,当我更新服务引用时,Visual Studio会创建两个对Web服务的引用,当我尝试运行应用程序时,它会抛出一个令人讨厌的错误,似乎表明该应用程序无法确定它所引用的引用正在使用。删除app.config文件中的多余引用似乎可以解决这个问题,但我已经完成了这个并将已编译的应用程序移动到服务器,但仍然出现此错误。我还发现有趣的是,当应用程序是为.Net 3.5编写时,错误被列为.Net 2.0;服务器安装了.Net 3.5SP1 这可能是Visual Studio的错误吗?如果是这样,可以绕过它吗? 谢谢。
更新:通过堆栈跟踪,我能够发现错误是我的错;我没有将足够的参数传递给存储过程。回想一下,我猜整个框架都可以正常工作,我只是希望错误更易于阅读!

2 个答案:

答案 0 :(得分:2)

这通常是.NET运行时如何通知您应用程序中未捕获的异常。

由于您有一个“简单的命令行应用程序”,请尝试放置一个try / catch块,同时将异常写入控制台,事件日志或某个文件。

示例:

public static int main(String[] args)
{
    try 
    {
       // other code

       return 0;
    }
    catch (Exception ex)
    {
       Console.Error.WriteLine(ex);

       // Save to file, in case this is an application that runs in the background
       // Make sure the directory exists and is writable though.
       System.IO.File.WriteAllText("C:\\TEMP\\Exception.txt", ex.ToString());

       return 1;
    }
}

答案 1 :(得分:0)

  1. 尝试捕获异常并记录
  2. 尝试使用AppDomain.CurrentDomain.UnhandledException来捕获意外异常并记录日志。