2015-01-08 2 views
2

질문은 WCF 서비스를 사용하여 데이터베이스에서 정보를 검색하는 Windows Phone 8.1 SL 응용 프로그램과 관련이 있습니다. 데이터베이스에 대한 통신 오류 예외를 어떻게 처리합니까? 서비스가 켜져 있고 액세스 할 수 있지만 서비스가 어떤 이유로 든 데이터베이스에 액세스 할 수 없다고 가정합니다. 이러한 오류 처리가 WCF 측면에 있어야하는지 여부 그렇다면 메시지 상자와 같은 사용자에게 친숙한 표시 정보에 어떻게 써야합니까?이벤트 구동 비동기 WCF 서비스 호출에서 예외 처리

둘째로 : 나는 WCF 서비스에 대한 액세스 부족을 시뮬레이션하기로 결정했습니다. 이를 달성하기 위해 IP 주소를 서비스로 변경했습니다. 응용 프로그램 측면에서이 예외를 처리하고 싶지만 Visual Studio에서 항상 예외 예외가 발생합니다. 서비스와의 통신 오류를 처리하는 데 오류 클래스가 어떤 책임이 있는지 알려주십시오.

public partial class Kurs : PhoneApplicationPage 
{ 
    CenyMiejscaService.CenyMiejscaServiceClient cenyMiejscaUsluga; 
    Dictionary<DateTime, double> kurs; 


    public Kurs() 
    { 
     InitializeComponent(); 

     kurs = new Dictionary<DateTime, double>(); 

     try 
     { 
      cenyMiejscaUsluga = new CenyMiejscaService.CenyMiejscaServiceClient(); 
      cenyMiejscaUsluga.PobierzKursRublaCompleted += cenyMiejscaUsluga_PobierzKursRublaCompleted; 

      cenyMiejscaUsluga.PobierzKursRublaAsync(); 
     } 
     catch(CommunicationException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 

을하지만 비주얼 스튜디오가 발생 유일한 예외가 나타납니다 :

나는 이런 식으로 뭔가를 시도하고 enter image description here

+0

Visual Studio에서 예외를 throw하지 않습니다. .NET은 예외를 던지고 있으며, 당신은 그것을 잡으려고하지 않습니다. –

+0

시도했지만이 비동기 메서드입니다. 그래서 나는 그 예외를 다른 곳에서 잡아야 만한다. 나는 많은 기사를 읽었지만 해결책을 찾을 수 없다. – XardasLord

+0

두 가지 질문이 포함 된 게시물 하나가 아니라 여기에 두 개의 질문 게시물이 필요하다고 생각합니다. –

답변

2

는 오류 처리가 WCF 서비스에 있다고 가정합니다. 오류에 대해 당신은 무엇을 할 수 있습니까? 데이터베이스가 다운되었으므로이를 수정할 수 없으므로 거의 아무 것도 없습니다. WCF 서비스가 수행해야하는 모든 작업은 클라이언트에 오류를 전달합니다. 그러면 클라이언트는 오류를 해석하고 메시지를 표시 할 수 있습니다.

실제로 처리 할 수있는 오류를 처리하십시오.

두 번째 질문에 대해 명확하지 않습니다. 결과적으로 CommunicationException을 잡을 필요가있는 것 같습니다. 어쩌면 InnerException에 유용한 정보가 들어있을 수 있습니다. 그렇지 않으면 할 수있는 일이별로 없습니다. .NET의 예외 계층은 여러 오류를 구별하지 못하기 때문에 심하게 결함이 있습니다.

+0

InnerException도 catch 할 수 없으며 Visual Studio에서 예외가 발생합니다. WCF 서비스에 액세스 할 수없는 이유가있을 때 응용 프로그램이 손상되는 것을 막기를 원합니다. – XardasLord

+0

예외를 잡아 내면 내부 예외를 분석하고 처리하지 않으려면'throw;'를 사용할 수 있습니다. 당신의 질문에 답이 있습니까? – usr

+0

그러나 나는 그것을 처리하고 싶다. 어떤 이유로 응용 프로그램이 서비스에 액세스 할 수 없을 때'MessageBox'를 표시하려고합니다. 'PobierzKursRublaAsync' 메서드가 비동기 적이기 때문에 catch 블록이 사용되지 않는다고 가정합니다. – XardasLord