Beste praktijken: Tussenpersonen

Zorg ervoor dat fouten correct worden afgehandeld bij het aanroepen van tussenpersonen, zodat de servicekantkanalen bij de tussenpersonen goed worden gesloten.

Houd rekening met het volgende scenario. Een client roept een intermediair aan die vervolgens een back-endservice aanroept. De back-endservice definieert geen foutcontract, dus eventuele fouten die uit die service worden gegenereerd, worden behandeld als een ongedefinieerde fout. De back-endservice genereert een ApplicationException en WCF beëindigt correct het kanaal aan de servicezijde. De ApplicationException verschijnt dan als een FaultException die naar de tussenpersoon geworpen wordt. De intermediair gooit de ApplicationException. WCF interpreteert dit als een niet-getypte fout van de intermediair en stuurt deze door naar de client. Zodra de fout wordt ontvangen, veroordelen zowel de intermediair als de cliënt hun kanalen aan de cliëntzijde. Het kanaal aan de servicezijde van de intermediair blijft echter open omdat WCF niet weet dat de fout dodelijk is.

De aanbevolen procedure in dit scenario is om te detecteren of de fout die afkomstig is van de service onherstelbaar is en als dit het geval is, moet de intermediair zijn kanaal aan de servicezijde laten falen, zoals te zien is in het volgende codefragment.

catch (Exception e)  
{  
    bool faulted = service.State == CommunicationState.Faulted;  
    service.Abort();  
    if (faulted)  
    {  
        throw new ApplicationException(e.Message);  
    }  
    else  
    {  
        throw;  
    }  
}  

Zie ook