2015-12-04 2 views
-1

У меня есть некоторые реальные проблемы. Я очень надеюсь, что кто-то сможет мне помочь.UnhandledException в службе windows C#

У меня есть служба Windows, которая должна работать с определенной частотой. My Service связывается с некоторыми веб-сервисами наших поставщиков.

Моя проблема делает моя служба надежной, в случае, если эти услуги недоступны из-за поломки и т.д.

Я пытался контролировать это с помощью попытке поймать.

/***************************************************************************************************/ 
/* 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)*/ 
/***************************************************************************************************/ 

Но компилятор не будет принимать это (он говорит: Имя «хуг» не существует в текущем контексте), 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

+1

_ "Но компилятор не примет этого" _ - в чем была ошибка? – MickyD

+1

Это поможет, если вы разместите точный код и ошибку компилятора, но ...как слепое предположение: вы объявляете xyz (var xyz = ...) внутри try/catch, тогда он не виден вне его (или вы повторно объявляете его внутри try/catch, и вы уже объявили его снаружи). –

+0

@AdrianoRepetti: Я не заново декларирую. Im только объявление один раз. Но Im только в состоянии сделать эту конкретную декларацию без попытки try-catch. Как я могу обработать исключение из-за сбоя при объявлении? –

ответ

0

Проблема решена:

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

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

Спасибо за все ваши посты :-).

2

Вам нужно ниже код, чтобы создать экземпляр:

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

Теперь xyz будет рассматриваться как функция! И я догадываюсь, что у вас есть эта функция в вашем коде!

Затем поместите его как показано ниже:

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

catch(Exception e) 
{ 
    ...handle the exception 
} 
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. 
} 
+0

Я вижу вашу точку зрения , Я попробую –

+0

о уаге хух, класс определяются по формуле: общественного xyzClass частичных классов: объект, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { ... } Im worryied если этому код дампы, если нет контакта с сервером. Я не прав? –