Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Var noga med att hantera fel korrekt när du kontaktar mellanhänder för att se till att tjänstekanalerna hos mellanhanden stängs korrekt.
Tänk på följande scenario. En klient ringer till en mellanhand som sedan anropar en bakgrundstjänst. Serverdelstjänsten definierar inget felkontrakt, så eventuella fel som genereras från den tjänsten behandlas som ett ospecificerat fel. Serverdelstjänsten genererar en ApplicationException och WCF avbryter tjänstesidans kanal korrekt. Sedan ApplicationException framträder som en FaultException som kastas till mellanhanden. Mellanhanden kastar om ApplicationException igen. WCF tolkar detta som ett icke-skrivet fel från mellanhanden och vidarebefordrar det till klienten. När felet tas emot, stänger både mellanhanden och klienten sina klientkanaler. Mellanhandens servicekanal förblir dock öppen eftersom WCF inte vet att felet är kritiskt.
Det bästa sättet i det här scenariot är att identifiera om felet som kommer från tjänsten är allvarligt och om så är fallet bör intermediären bryta kanalen på tjänstsidan enligt följande kodfragment.
catch (Exception e)
{
bool faulted = service.State == CommunicationState.Faulted;
service.Abort();
if (faulted)
{
throw new ApplicationException(e.Message);
}
else
{
throw;
}
}