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
您需要以下代码来创建实例:
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
}
感谢您的所有帖子:-)。