Windows服务中的UnhandledException c#

时间:2015-12-04 12:37:52

标签: c# web-services windows-services

我有一些真正的麻烦。我真的希望有人能够帮助我。

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

我的问题是让我的服务更健壮,以防这些服务因崩溃等原因而无法使用。

我试图用try catch来控制它。

/***************************************************************************************************/
/* 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'在当前上下文中不存在),hense我需要另一个解决方案。 我碰到了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

3 个答案:

答案 0 :(得分:2)

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

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

现在xyz将被视为一项功能!我猜你在你的代码中有这个功能!

然后按如下所示:

try  
{
  var xyz = new xyz().ExternalService().GetRelevantData();
}

catch(Exception e)
{
  ...handle the exception
}

答案 1 :(得分:1)

从你的评论中看,这是你的问题:

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.
}

答案 2 :(得分:0)

问题解决了:

long long int

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