2012-12-17 2 views
2

내 사용자 지정 오차드 모듈에서 나는 로그인 중에 사용자 지정 FtpException을 throw하는 컨트롤러 동작 내에서 일부 ftp 클라이언트 코드를 작성했습니다. try-catch에서 로그인 코드를 래핑했습니다. 오류가있는 경우 알림 메시지를 다시보기로 보냅니다. 문제는 여전히 오류가 발생하고 표준 "죄송합니다. 오류가 발생했습니다. 죄송합니다"오차드 오류 메시지입니다. 나는 오차드 로그에 보면처리 된 과수원 예외 여전히 버블 링

 try 
     { 
      ftpClient.Login(); 
      ftpClient.Upload(fileName); 
     } 
     catch (FtpException ex) 
     { 
      services.Notifier.Error(T("There was an error sending the file - {0}.", ex.Message)); 
      return RedirectToAction("Edit", "Project"); 
     } 
     finally 
     { 
      ftpClient.Close(); 
     } 

     services.Notifier.Information(T("File uploaded successfully.")); 
     return RedirectToAction("Edit", "Project"); 

가, 내가 FTP 예외가 ftpClient.Login() 내에서 발생되는 것을 볼 : 여기 포장하고 코드입니다. catch 블록의 코드가 실행되므로 예외가 처리되었음을 알 수 있습니다. 문제는 처리되지 않은 예외 동작이 여전히 오차드에 의해 표시되고 있다는 것입니다. RedirectToAction이 실행되도록 예외가 멈추게하려면 어떻게해야합니까? 주석에서 설명하고있는 바와 같이

+0

확실히 FtpException (또는 파생 된 유형)이 예외를 throw합니까? – mdm

+0

하지만 catch 블록을 catch로 변경했습니다. System.Exception - 결과가 동일했습니다. – levelnis

+1

좋습니다. 예외가 호출되었을 때 어떤 일이 발생했는지 보려면 단계별 시도를 했습니까? 예외가 ftpClient.Login에 의해 throw되고, catch에 의해 catch되고, * another * 예외가 마지막으로 닫힌 ftpClient를 닫으려고 시도하여 생성 될 수 있습니까? – mdm

답변

2

는, 다음 일어나는 것이 가능하다 :

  1. 실행이 try를 입력하고 Login()에 호출에 도달하고, 예외가 발생합니다.
  2. 실행은 사용자의 ftpClient 개체에서 Close()을 호출하려는 catch 블록으로 점프합니다.
  3. 정확 유형이 ftpClient 인 것은 확실하지 않지만 열 필요가없는 인스턴스 (통해)를 호출하면 Close()을 호출하면 또 다른 예외가 발생합니다. Orchard의 예외 핸들러에 잡히다.
내가, 또는 당신이 로그인 할 수있는 실패를 구별 할 수 있도록 별도의 시도/캐치에 Login 전화를 포장하여 FTP 클라이언트 클래스에 IsOpen 재산의 어떤 종류를 찾고 (또는 추가)에 의해 시작 했죠

및 또 다른 실패. 또는 소스에 액세스 할 수있는 경우 실패하면 Login에 다른 유형의 예외를 throw 할 수 있습니다.

관련 문제