Dela via


Middle-Tier Klientapplikationer

I det här avsnittet beskrivs olika problem som är specifika för klientprogram på mellannivå som använder Windows Communication Foundation (WCF).

Ökning av Middle-Tier klientprestanda

Jämfört med tidigare kommunikationstekniker, till exempel webbtjänster som använder ASP.NET, kan skapandet av en WCF-klientinstans vara mer komplex på grund av den omfattande funktionsuppsättningen för WCF. När ett ChannelFactory<TChannel> objekt öppnas kan det till exempel upprätta en säker session med tjänsten, en procedur som ökar starttiden för klientinstansen. Dessa ytterligare funktionsfunktioner påverkar vanligtvis inte klientprogram särskilt mycket eftersom WCF-klienten gör flera anrop och sedan stängs.

Klientprogram på mellannivå kan dock snabbt skapa många WCF-klientobjekt och därmed uppleva ökade initieringskrav. Det finns två huvudsakliga metoder för att öka prestandan för mellannivåprogram när du anropar tjänster:

  • Cacha WCF-klientobjektet och återanvänd det för efterföljande anrop om möjligt.

  • Skapa ett ChannelFactory<TChannel> objekt och använd sedan objektet för att skapa nya WCF-klientkanalobjekt för varje anrop.

Problem att tänka på när du använder dessa metoder är:

  • Om tjänsten upprätthåller ett klientspecifikt tillstånd med hjälp av en session kan du inte återanvända WCF-klienten på mellannivå med begäranden på flera klientnivåer eftersom tjänstens tillstånd är kopplat till mellannivåklientens tillstånd.

  • Om tjänsten måste utföra autentisering per klient måste du skapa en ny klient för varje inkommande begäran på mellannivån i stället för att återanvända WCF-klienten på mellannivå (eller WCF-klientkanalobjektet) eftersom klientautentiseringsuppgifterna för mellannivån inte kan ändras när WCF-klienten (eller ChannelFactory<TChannel>) har skapats.

  • Även om kanaler och klienter som skapats av kanalerna är trådsäkra kanske de inte stöder att fler än ett meddelande skrivs till tråden samtidigt. Om du skickar stora meddelanden, särskilt om du strömmar, kan sändningsåtgärden blockera väntan på att en annan sändning ska slutföras. Detta orsakar två typer av problem: brist på samtidighet och risken för dödläge om kontrollflödet återgår till den tjänst som återanvänder kanalen (det vill säga den delade klienten anropar en tjänst vars kodsökväg resulterar i ett återanrop till den delade klienten). Detta gäller oavsett vilken typ av WCF-klient du återanvänder.

  • Du måste hantera felaktiga kanaler oavsett om du delar kanalen. När kanaler återanvänds kan dock en felaktig kanal stänga ner mer än en väntande begäran eller utsändning.

Ett exempel som visar metodtips för att återanvända en klient för flera begäranden finns i Databindning i en ASP.NET-klient.

Dessutom kan du förbättra startprestandan för de klienter som använder datatyper som kan serialiseras, genom att XmlSerializer generera och kompilera serialiseringskod för dessa datatyper vid körning, vilket kan resultera i långsam uppstarts prestanda. Verktyget servicemodelmetadata (Svcutil.exe) kan förbättra startprestanda för dessa program genom att generera nödvändig serialiseringskod från de kompilerade sammansättningarna för programmet. Mer information finns i Så här: Förbättra starttiden för WCF-klientprogram med hjälp av XmlSerializer.

Se även