windows服务c#中出现未处理的异常

本文关键字:未处理 异常 服务 windows | 更新日期: 2023-09-27 18:25:42

我遇到了一些真正的麻烦。我真的希望有人能在这里帮助我。

我有一个Windows服务,它应该以一定的频率运行。我的服务与我们供应商的一些网络服务进行通信。

我的问题是让我的服务变得强大,以防这些服务因故障等而不可用。

我试图通过尝试接球来控制这种情况。

/***************************************************************************************************/
/* Code snippet: Unable to compile. (it says: The name 'xyz' does not exist in the current context)*/
try  
{
  var xyz = new xyz.ExternalService().GetRelevantData();
}
catch(Exception e)
{
  ...handle the exception
}
/* Code snippet: Unable to compile. (it says: The name 'xyz' does not exist in the current context)*/
/***************************************************************************************************/

但编译器不会接受这一点(它说:"xyz"这个名称在当前上下文中不存在),因为我需要另一个解决方案。我遇到了currentDomain.UnhandledException,我想使用这个功能。不幸的是,我无法用它来处理异常。

有人能帮我解决问题吗?

关于下面被零除法的代码,我打算用代替除法

var xyz = new xyz.ExternalService().GetRelevantData();

我相信那会解决我的问题。

/*********************************************************************/
/* Code snippet: currentDomain.UnhandledException : Division by zero.*/
    public void divisionbyzero()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
        int i = 0;
        int m = 12;
        double x = 0;
        try
        {
            x = m * i;
        }
        catch (Exception e)
        {
            writeToLog(e.ToString());                
        }
        x = m / i;
    }
/*********************************************************************/
/* Code snippet: currentDomain.UnhandledException : Division by zero.*/

当除法完成时,我想捕获带有"UnhandledException"的异常。但不幸的是,这并没有发生。

带有以下代码上下文的新部分:我希望这是有意义的:

/*****************************************************************/        
/****Code snippet: called from Windows service OnTimedEvent *****/        
    static void MyHandler(object sender, UnhandledExceptionEventArgs args)
    {
        Exception e = (Exception)args.ExceptionObject;
        File.AppendAllText("C:''lab''logs''log.txt", "" + e.Message + ""); 
    }
    private void writeToLog(Exception e)
    {
        File.AppendAllText("C:''lab''logs''log.txt", "" + e.Message + "");
    }
    public void divisionbyzero() // this is called in Windows service in OnTimedEvent.
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

        int ii = 0;
        int mm = 12;
        double xx = 0;
        try
        {
            xx = mm * ii;
        }
        catch (Exception excep)
        {
        File.AppendAllText("C:''lab''logs''log.txt", "" + excep.ToString() + ""); 
        }
        xx = mm / ii; // This is the exception I would like (currentDomain.UnhandledException) to handle
    }
/****Code snippet: called from Windows service OnTimedEvent ************/        
/***********************************************************************/ 

我一直在网上搜索:这家伙也有同样的问题,你可能想读一下:http://go4answers.webhost4life.com/Example/getting-appdomainunhandledexception-74589.aspx

windows服务c#中出现未处理的异常

您需要以下代码来创建实例:

var xyz = new xyz().ExternalService().GetRelevantData();

现在xyz将被视为一个函数!我猜你的代码中有这个函数!

然后如下所示:

try  
{
  var xyz = new xyz().ExternalService().GetRelevantData();
}
catch(Exception e)
{
  ...handle the exception
}

因此,从您的评论来看,这就是您的问题:

try  
{
  var xyz = new xyz.ExternalService().GetRelevantData();
}
catch(Exception e)
{
  //but I want to use xyz here
  ...handle the exception
}

所以,在更高的范围内定义xyz,所以它在catch中可见;

var xyz = new Xyz();
try
{
    var someValue = xyz.DoSomething();
}
catch(Exception e)
{
    //xyz is still visible here.
}

问题已解决:

var xyz = new xyz().ExternalService();
try  
{
    xyz.GetRelevantData();
}
catch(Exception e)
{
    ...handle the exception
}

感谢您的所有帖子:-)。