Aanbevolen procedures voor betrouwbare sessies
In dit onderwerp worden aanbevolen procedures voor betrouwbare sessies besproken.
MaxTransferWindowSize instellen
Betrouwbare sessies in Windows Communication Foundation (WCF) gebruiken een overdrachtsvenster voor het opslaan van berichten op de client en service. De configureerbare eigenschap MaxTransferWindowSize geeft aan hoeveel berichten het overdrachtsvenster kan bevatten.
Op de afzender geeft dit aan hoeveel berichten het overdrachtsvenster kan bevatten terwijl wordt gewacht op bevestigingen; op de ontvanger wordt aangegeven hoeveel berichten moeten worden gebufferd voor de service.
Het kiezen van de juiste grootte heeft invloed op de efficiëntie van het netwerk en de optimale capaciteit van de service. In de volgende secties wordt beschreven wat u moet overwegen bij het kiezen van een waarde voor deze eigenschap en de impact van de waarde.
De standaardgrootte van het overdrachtsvenster is acht berichten.
Efficiënt gebruik van het netwerk
In deze context komt het termennetwerk overeen met alles wat wordt gebruikt als basis voor communicatie tussen een client (afzender) en een service (ontvanger). Dit omvat de transportverbindingen en tussenliggende of bruggen, waaronder SOAP-routers of HTTP-proxy's/firewalls.
Efficiënt gebruik van het netwerk zorgt ervoor dat de netwerkcapaciteit volledig wordt gebruikt. Zowel de hoeveelheid gegevens die per seconde kan worden overgedragen via het netwerk (gegevenssnelheid) als de tijd die nodig is om gegevens van de afzender over te dragen naar de ontvanger (latentie) beïnvloeden hoe effectief het netwerk wordt gebruikt.
Op de afzender geeft de eigenschap MaxTransferWindowSize aan hoeveel berichten het overdrachtsvenster kan bevatten terwijl er wordt gewacht op bevestigingen. Als de netwerklatentie hoog is en om ervoor te zorgen dat een responsieve afzender en effectief netwerkgebruik worden gebruikt, moet u de grootte van het overdrachtsvenster verhogen.
Zelfs als de afzender de gegevenssnelheid bijhoudt, kan latentie hoog zijn als er meerdere tussenpersonen bestaan tussen de afzender en ontvanger of de gegevens moeten worden doorgegeven via een verliestussenpersoon of netwerk. De afzender moet dus wachten op bevestigingen voor de berichten in het overdrachtsvenster voordat nieuwe berichten worden geaccepteerd die op de draad moeten worden verzonden. Hoe kleiner de buffer met hoge latentie, hoe minder effectief het netwerkgebruik. Aan de andere kant kan een te hoge overdrachtsvenstergrootte van invloed zijn op de service, omdat de service mogelijk de hoge snelheid van gegevens moet inhalen die door de client worden verzonden.
De service uitvoeren op capaciteit
Net zoals het netwerk efficiënt wordt gebruikt, wilt u in het ideale voorbeeld ook dat de service op optimale capaciteit wordt uitgevoerd. De eigenschap overdrachtvenstergrootte op de ontvanger geeft aan hoeveel berichten de ontvanger kan bufferen. Deze berichtbuffering helpt niet alleen bij het beheer van de netwerkstroom, maar zorgt er ook voor dat de service volledig kan worden uitgevoerd. Als de buffer bijvoorbeeld één bericht is en berichten sneller binnenkomen dan de service kan verwerken, kan het netwerk berichten en capaciteit verspild of onderbenut raken.
Door een buffer te gebruiken, wordt de beschikbaarheid van de service verhoogd naarmate deze gelijktijdig een bericht ontvangt en buffert tijdens het verwerken van de eerder ontvangen berichten.
We raden u aan hetzelfde MaxTransferWindowSize
te gebruiken voor zowel de afzender als de ontvanger.
Stroombeheer inschakelen
Stroombeheer is een mechanisme dat ervoor zorgt dat de afzender en ontvanger elkaar in de hoogte houden, dat wil gezegd, de berichten worden verbruikt en zo snel worden uitgevoerd als ze worden geproduceerd. De grootte van het overdrachtsvenster op de client en service zorgt ervoor dat de afzender en ontvanger zich binnen een redelijk synchronisatievenster bevinden.
We raden u ten zeerste aan de eigenschap FlowControlEnabled in te true
stellen wanneer u een betrouwbare sessie gebruikt tussen een WCF-client en een WCF-service.
MaxPendingChannels instellen
Bij het schrijven van een service die betrouwbare sessiecommunicatie van verschillende clients mogelijk maakt, is het mogelijk om veel clients tegelijkertijd een betrouwbare sessie met de service tot stand te brengen. De reactie van de service in deze situaties is afhankelijk van de MaxPendingChannels
eigenschap.
Wanneer de afzender een betrouwbaar sessiekanaal voor een ontvanger maakt, wordt er een betrouwbare sessie tot stand brengen met een handshake ertussen. Nadat de betrouwbare sessie tot stand is gebracht, wordt het kanaal in een wachtrij geplaatst voor acceptatie door de service. De MaxPendingChannels
eigenschap geeft aan hoeveel kanalen deze status kunnen hebben.
Het is mogelijk dat de service zich in een status bevindt waarin niet meer kanalen kunnen worden geaccepteerd. Als de wachtrij vol is, wordt een poging om een betrouwbare sessie tot stand te brengen geweigerd en moet de client het opnieuw proberen.
Het is ook mogelijk dat de in behandeling zijnde kanalen in de wachtrij gedurende langere tijd in de wachtrij blijven. In de tussentijd kan er een time-out voor inactiviteit op de betrouwbare sessie optreden, waardoor het kanaal wordt overgezet naar een defecte status.
Wanneer u een service schrijft die meerdere clients tegelijk services, moet u een waarde instellen die geschikt is voor uw behoeften. Het instellen van een te hoge waarde voor de MaxPendingChannels
eigenschap is van invloed op uw werkset.
De standaardwaarde voor MaxPendingChannels vier kanalen is.
Betrouwbare sessies en hosting
Wanneer u een service host die gebruikmaakt van betrouwbare sessies, moet u rekening houden met de volgende belangrijke overwegingen:
Betrouwbare sessies zijn stateful en de status wordt onderhouden in het AppDomain. Dit betekent dat alle berichten die deel uitmaken van een betrouwbare sessie moeten worden verwerkt in hetzelfde AppDomain. Webfarms en webtuinen waar de grootte van de boerderij of tuin groter is dan één knooppunt, kan deze beperking niet garanderen.
Betrouwbare sessies die gebruikmaken van dubbele HTTP-kanalen (bijvoorbeeld met behulp van
WsDualHttpBinding
) kunnen meer dan de standaardwaarde van twee HTTP-verbindingen per client vereisen. Dit betekent dat voor een duplex betrouwbare sessie maximaal twee verbindingen nodig zijn, omdat gelijktijdige toepassings- en protocolberichten op elk gewenst moment op elk gewenst moment worden overgebracht. Onder bepaalde voorwaarden, afhankelijk van het berichtuitwisselingspatroon van de service, betekent dit dat het mogelijk is om een web-gehoste service te blokkeren met behulp van dubbele HTTP- en betrouwbare sessies. Als u het aantal toegestane HTTP-verbindingen per client wilt verhogen, voegt u het volgende toe aan het relevante configuratiebestand (bijvoorbeeld web.config van de betreffende service):<configuration> <system.net> <connectionManagement> <add name="*" maxconnection="4" /> </connectionManagement> </system.net> </configuration>
De waarde van het
maxconnection
kenmerk is het aantal benodigde verbindingen. Het minimum in dit geval moet vier verbindingen zijn.