WCF - Overhead kaste FaultExceptions i din tjeneste

stemmer
3

Jeg postet et spørsmål om bruk av meldinger versus Feil Unntak å kommunisere forretningsregler mellom tjenester.

Jeg var under inntrykk av det gjennomført overhead å kaste dette unntaket over ledningen, men vurderer det er bare en melding som blir serialisert og deserialisert, de var faktisk ett og det samme.

Men dette fikk meg til å tenke på å kaste unntak generelt eller mer spesifikt kaste FaultExceptions.

Nå innenfor min tjeneste, hvis jeg bruker

throw new FaultException

å kommunisere en enkel business regel som Din konto har ikke blitt aktivert, Hva overhead gjør dette nå gjennomføre? Er det det samme overhead som å kaste regelmessige unntak i .NET? eller gjør WCF tjenesten håndtere disse mer effektivt med bruk av feil kontrakter.

Så i min bruker eksempel, som er den optimale / foretrukne måten å skrive min tjeneste metode

alternativ A

public void AuthenticateUser()
{
    throw new FaultException(Your account has not been activated);
}

alternativ b

public AutheticateDto AutheticateUser()
{
     return new AutheticateDto() { 
          Success = false,
          Message = Your account has not been activated};
}
Publisert på 19/09/2008 klokken 04:31
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Det er på samme måte som en normal unntak, og benytter den samme innpakning koden som en normal unntaket vil ikke samle inn en feil, inkludert avkveiling av stabelen.

Som unntak SOAP feil bør ikke, etter min mening, brukes til programflyten, men å indikere feil.

Svarte 19/09/2008 kl. 04:44
kilden bruker

stemmer
4

Vel ... Generelt bør du ikke kaste unntak for forventede forhold, eller noe du forventer å skje regelmessig. De er massivt tregere enn å gjøre vanlige metoder. For eksempel hvis du forventer en fil åpen til å mislykkes, ikke kaste en som unntak opp til den som ringer, passerer bak en feilkode, eller gi en "CanOpenFile" metode for å gjøre testen.

Riktignok er selve meldingsteksten ikke mye, men en ekte unntak kastes og håndteres (muligens mer kostbart på grunn av IIS), og deretter real unntak blir kastet igjen for kunden når feilen er deserialisert. Så, dobbel hit.

Ærlig talt, hvis det er et lavt volum av samtaler, så har du sannsynligvis ikke vil ta noen merkbar hit, men er ikke en god idé likevel. Hvem ønsker å sette forretningslogikk i en catch-blokken :)

Microsoft: Unntak og ytelse, og Alternatives

Utvikler Fusion: Performance, med eksempel

Svarte 19/09/2008 kl. 04:50
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more