Metodtips för tillförlitliga sessioner
I det här avsnittet beskrivs metodtips för tillförlitliga sessioner.
Ange MaxTransferWindowSize
Tillförlitliga sessioner i Windows Communication Foundation (WCF) använder ett överföringsfönster för att lagra meddelanden på klienten och tjänsten. Den konfigurerbara egenskapen MaxTransferWindowSize anger hur många meddelanden som överföringsfönstret kan innehålla.
På avsändaren anger detta hur många meddelanden som överföringsfönstret kan innehålla i väntan på bekräftelser. på mottagaren anger det hur många meddelanden som ska buffrats för tjänsten.
Om du väljer rätt storlek påverkas nätverkets effektivitet och tjänstens optimala kapacitet. I följande avsnitt beskrivs vad du bör tänka på när du väljer ett värde för den här egenskapen och effekten av värdet.
Standardstorleken för överföringsfönstret är åtta meddelanden.
Effektiv användning av nätverket
I det här sammanhanget motsvarar termen nätverk allt som används som grund för kommunikationen mellan en klient (avsändare) och en tjänst (mottagare). Detta omfattar transportanslutningar och eventuella mellanhänder eller bryggor däremellan, inklusive SOAP-routrar eller HTTP-proxyservrar/brandväggar.
Effektiv användning av nätverket säkerställer att nätverkskapaciteten används fullt ut. Både mängden data som kan överföras per sekund via nätverket (datahastighet) och den tid det tar att överföra data från avsändaren till mottagaren (svarstid) påverkar hur effektivt nätverket används.
På avsändaren anger egenskapen MaxTransferWindowSize hur många meddelanden som dess överföringsfönster kan innehålla i väntan på bekräftelser. Om nätverksfördröjningen är hög och för att säkerställa en dynamisk avsändare och effektiv nätverksanvändning bör du öka överföringsfönstrets storlek.
Även om avsändaren till exempel håller jämna steg med datahastigheten kan svarstiden vara hög om det finns flera mellanhänder mellan avsändaren och mottagaren eller om data måste passera genom en förlustfylld mellanhand eller ett nätverk. Avsändaren måste därför vänta på bekräftelser för meddelandena i överföringsfönstret innan de accepterar nya meddelanden som ska skickas på tråden. Ju mindre buffert med hög svarstid, desto mindre effektiv är nätverksanvändningen. Å andra sidan kan en för hög överföringsfönsterstorlek påverka tjänsten eftersom tjänsten kan behöva komma ikapp den höga datahastighet som skickas av klienten.
Köra tjänsten till kapacitet
Så mycket som nätverket används effektivt, helst vill du också att tjänsten ska köras med optimal kapacitet. Egenskapen för överföringsfönstrets storlek på mottagaren anger hur många meddelanden mottagaren kan buffringa. Den här meddelandebuffertningen hjälper inte bara nätverksflödeskontrollen utan gör också att tjänsten kan köras till full kapacitet. Om bufferten till exempel är ett meddelande och meddelanden kommer snabbare än tjänsten kan bearbeta dem, kan nätverket släppa meddelanden och kapaciteten kan vara bortkastad eller underutnyttad.
Om du använder en buffert ökar tillgängligheten för tjänsten eftersom den samtidigt tar emot och buffrar ett meddelande när de tidigare mottagna meddelandena bearbetas.
Vi rekommenderar att du använder samma MaxTransferWindowSize
på både avsändaren och mottagaren.
Aktivera flödeskontroll
Flödeskontroll är en mekanism som säkerställer att avsändaren och mottagaren håller jämna steg med varandra, dvs. Överföringsfönstrets storlek på klienten och tjänsten säkerställer att avsändaren och mottagaren befinner sig inom ett rimligt synkroniseringsfönster.
Vi rekommenderar starkt att du anger egenskapen FlowControlEnabled till true
när du använder en tillförlitlig session mellan en WCF-klient och en WCF-tjänst.
Ställa in MaxPendingChannels
När du skriver en tjänst som möjliggör tillförlitlig sessionskommunikation från olika klienter är det möjligt att låta många klienter upprätta en tillförlitlig session till tjänsten samtidigt. Svaret för tjänsten i dessa situationer beror på egenskapen MaxPendingChannels
.
När avsändaren skapar en tillförlitlig sessionskanal till en mottagare upprättar ett handslag mellan dem en tillförlitlig session. När den tillförlitliga sessionen har upprättats placeras kanalen i en väntande kanalkö för godkännande av tjänsten. Egenskapen MaxPendingChannels
anger hur många kanaler som kan vara i det här tillståndet.
Det är möjligt att tjänsten är i ett tillstånd där den inte kan acceptera fler kanaler. Om kön är full avvisas ett försök att upprätta en tillförlitlig session och klienten måste försöka igen.
Det är också möjligt att de väntande kanalerna i kön finns kvar i kön under en längre tid. Under tiden kan en timeout för inaktivitet på den tillförlitliga sessionen inträffa, vilket gör att kanalen övergår till ett felaktigt tillstånd.
När du skriver en tjänst som betjänar flera klienter samtidigt bör du ange ett värde som passar dina behov. Om du anger ett för högt värde för MaxPendingChannels
egenskapen påverkas din arbetsuppsättning.
Standardvärdet för MaxPendingChannels är fyra kanaler.
Tillförlitliga sessioner och värdtjänster
När du är värd för en tjänst som använder tillförlitliga sessioner bör du ha följande viktiga överväganden i åtanke:
Tillförlitliga sessioner är tillståndskänsliga och tillståndet upprätthålls i AppDomain. Det innebär att alla meddelanden som ingår i en tillförlitlig session måste bearbetas i samma AppDomain. Webbgårdar och webbträdgårdar där storleken på gården eller trädgården är större än en nod kan inte garantera den här begränsningen.
Tillförlitliga sessioner med dubbla HTTP-kanaler (till exempel med )
WsDualHttpBinding
kan kräva mer än standardvärdet för två HTTP-anslutningar per klient. Det innebär att en tillförlitlig duplexsession kan kräva upp till två anslutningar åt varje håll eftersom samtidiga program- och protokollmeddelanden kan överföras åt varje håll när som helst. Under vissa förhållanden, beroende på tjänstens mönster för meddelandeutbyte, innebär det att det är möjligt att blockera en webbaserad tjänst med dubbla HTTP-sessioner och tillförlitliga sessioner. Om du vill öka antalet tillåtna HTTP-anslutningar per klient lägger du till följande i den relevanta konfigurationsfilen (till exempel web.config för tjänsten i fråga):<configuration> <system.net> <connectionManagement> <add name="*" maxconnection="4" /> </connectionManagement> </system.net> </configuration>
Värdet för
maxconnection
attributet är antalet anslutningar som behövs. Minimivärdet i det här fallet bör vara fyra anslutningar.