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ł
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
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} –
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ł –