2012-02-27 11 views
5

Próbuję utworzyć niestandardowe FaultException. Zrobiłem klasę DataContract o nazwie CreateFault.Wyjątek wyjątku dotyczącego niestandardowego błędu WCF niepoprawnie złapany w kliencie

[DataContract] 
public class CreateFault 
{ 
    private string report; 

    public CreateFault(string message) 
    { 
     this.report = message; 
    } 

    [DataMember] 
    public string Message 
    { 
     get { return this.report; } 
     set { this.report = value; } 
    } 
} 

Później zgłaszam błąd w metodzie serwisowej.

W IService1.cs

[OperationContract] 
[FaultContract(typeof(CreateFault))] 
void TestFaultException(); 

aw Service1.cs

public void TestFaultException() 
{ 
    throw new FaultException<CreateFault>(new CreateFault("CreateFault message"), "Message abt exception"); 
} 

ja złapać FaultException w moim klientem.

private void btnTest_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); 
     client.TestFaultException(); 
    } 
    catch (FaultException<CreateFault> ex) 
    { 
     MessageBox.Show(ex.Detail.Message, "Success", MessageBoxButton.OK, MessageBoxImage.Error); 
    } 
    catch (FaultException ex) 
    { 
     MessageBox.Show(ex.Message, "Failure", MessageBoxButton.OK, MessageBoxImage.Error); 
    } 
    catch (Exception ex) 
    { 
    } 
} 

Teraz pojawia się problem. Kiedy tworzę projekt aplikacji usługi WCF w Visual Studio 2010, działa on tak, jak powinien. Błąd jest złowionych w:

catch (FaultException<CreateFault> ex) 

Ale gdy tworzę projekt WCF usług bibliotecznych z moim zwyczajem FaultExceptions klient nie rozpoznaje niestandardowy wyjątek. Zamiast tego błąd pojawia się w:

catch (FaultException ex) 

Dlaczego nie działa z projektem aplikacji usług WCF?

Edit: To co ja się podczas debugowania, gdy łapie wyjątek w

catch (FaultException ex) 

(ex wpisane w oknie Immediate?)

{ "message ABT wyjątkiem"}

[System.ServiceModel.FaultException<WpfApplication1.ServiceReference2.CreateFault>]: {"Message abt exception"} 
base {System.ServiceModel.CommunicationException}: {"Message abt exception"} 
Action: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault" 
Code: {System.ServiceModel.FaultCode} 
Message: "Message abt exception" 
Reason: {Message abt exception} 

Edycja2:

Wystąpił problem. Miałem dwa odniesienia do usług, którzy obaj mieli umowę DataFragment CreateFault. I używał niewłaściwego, gdy uruchomiłem program.

Kiedy zmienia się

catch (FaultException<ServiceReference2.CreateFault> ex) 

pracował

+0

przez wszystkie rachunki powinien złapać wyjątek. Czy możesz sprawdzić, czy wyjątek catch jest ogólny "FaultException " lub po prostu "FaultException". – Coder

+0

jest to, co otrzymuję, gdy wpisuję? Ex w Immediate Window? Ex {"Message abt exception"} [System.ServiceModel.FaultException ]: {"Message abt exception"} podstawowa { System.ServiceModel.CommunicationException}: { "message ABT wyjątkiem"} Działanie: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault" Kod: {System.ServiceModel.FaultCode} wiadomość: "Wiadomość ABT wyjątków" Powód: {Wiadomość ABT wyjątek} –

+0

Wystąpił problem. Miałem dwa odniesienia do usług, którzy obaj mieli umowę DataFragment CreateFault. I używał niewłaściwego, gdy uruchomiłem program. Kiedy zmienia się połowu (FaultException ex) pracował –

Odpowiedz

4

Znaleziony problem. Miałem dwa odniesienia do usług, którzy obaj mieli umowę DataFragment CreateFault. I używał niewłaściwego, gdy uruchomiłem program.

Kiedy zmienia się

catch (FaultException<ServiceReference2.CreateFault> ex) 

pracował

Powiązane problemy