Delen via


Overdracht van streamingberichten

WcF-transporten (Windows Communication Foundation) ondersteunen twee modi voor het overdragen van berichten:

  • Bij overdrachten met buffers wordt het hele bericht in een geheugenbuffer opgeslagen totdat de overdracht is voltooid. Een gebufferd bericht moet volledig worden bezorgd voordat een ontvanger het kan lezen.

  • Gestreamde overdrachten maken het bericht beschikbaar als een stream. De ontvanger begint met het verwerken van het bericht voordat het volledig wordt bezorgd.

  • Gestreamde overdrachten kunnen de schaalbaarheid van een service verbeteren door de vereiste voor grote geheugenbuffers te elimineren. Of het wijzigen van de overdrachtsmodus de schaalbaarheid verbetert, is afhankelijk van de grootte van de berichten die worden overgedragen. Grote berichtgrootten geven de voorkeur aan het gebruik van gestreamde overdrachten.

Standaard maken de HTTP-, TCP/IP- en benoemde pijptransporten gebruik van gebufferde overdrachten. In dit document wordt beschreven hoe u deze transporten kunt overschakelen van een gebufferde overdrachtsmodus naar de gestreamde overdrachtsmodus en de gevolgen hiervan.

Streamed Transfers inschakelen

Het selecteren tussen gebufferde en gestreamde overdrachtsmodi wordt uitgevoerd op het bindingselement van het transport. Het bindingselement heeft een TransferMode eigenschap die kan worden ingesteld op Buffered, Streamedof StreamedRequestStreamedResponse. Als u de overdrachtsmodus instelt om streamingcommunicatie in beide richtingen mogelijk te Streamed maken. Door de overdrachtsmodus in te stellen op StreamedRequest of StreamedResponse wordt streamingcommunicatie alleen in de aangegeven richting ingeschakeld.

De BasicHttpBindingeigenschap , NetTcpBindingen NetNamedPipeBinding bindingen maken de TransferMode eigenschap beschikbaar. Voor andere transporten moet u een aangepaste binding maken om de overdrachtsmodus in te stellen.

De beslissing om gebufferde of gestreamde overdrachten te gebruiken, is een lokale beslissing van het eindpunt. Voor HTTP-transporten wordt de overdrachtsmodus niet doorgegeven aan een verbinding of aan servers en andere tussenpersonen. Het instellen van de overdrachtsmodus wordt niet weergegeven in de beschrijving van de service-interface. Nadat u een clientklasse voor een service hebt gegenereerd, moet u het configuratiebestand bewerken voor services die zijn bedoeld voor gebruik met gestreamde overdrachten om de modus in te stellen. Voor TCP- en benoemde pijptransporten wordt de overdrachtsmodus doorgegeven als een beleidsverklaring.

Zie Voor codevoorbeelden : Streaming inschakelen.

Asynchrone streaming inschakelen

Als u asynchrone streaming wilt inschakelen, voegt u het DispatcherSynchronizationBehavior eindpuntgedrag toe aan de servicehost en stelt u de eigenschap in AsynchronousSendEnabled op true.

Deze versie van WCF heeft ook de mogelijkheid toegevoegd van echte asynchrone streaming aan de verzendzijde. Dit verbetert de schaalbaarheid van de service in scenario's waarin het streamingberichten naar meerdere clients is, waarvan sommige traag zijn in het lezen; mogelijk als gevolg van netwerkcongestie of helemaal niet leest. In deze scenario's blokkeert WCF niet langer afzonderlijke threads op de service per client. Dit zorgt ervoor dat de service veel meer clients kan verwerken, waardoor de schaalbaarheid van de service wordt verbeterd.

Beperkingen voor gestreamde overdrachten

Als u de gestreamde overdrachtsmodus gebruikt, wordt de uitvoeringstijd extra beperkingen afgedwongen.

Bewerkingen die plaatsvinden in een gestreamd transport, kunnen een contract hebben met maximaal één invoer- of uitvoerparameter. Deze parameter komt overeen met de hele hoofdtekst van het bericht en moet een Message, een afgeleid type Streamof een IXmlSerializable implementatie zijn. Het hebben van een retourwaarde voor een bewerking is gelijk aan het hebben van een uitvoerparameter.

Sommige WCF-functies, zoals betrouwbare berichten, transacties en SOAP-berichtniveaubeveiliging, zijn afhankelijk van bufferberichten voor verzendingen. Het gebruik van deze functies kan de prestatievoordelen die zijn opgedaan met streaming verminderen of elimineren. Als u een gestreamd transport wilt beveiligen, gebruikt u alleen beveiliging op transportniveau of gebruikt u beveiliging op transportniveau plus berichtbeveiliging met alleen verificatie.

SOAP-headers worden altijd gebufferd, zelfs wanneer de overdrachtsmodus is ingesteld op gestreamd. De kopteksten voor een bericht mogen niet groter zijn dan de grootte van het MaxBufferSize transportquotum. Zie Transportquota voor meer informatie over deze instelling.

Verschillen tussen gebufferde en gestreamde overdrachten

Als u de overdrachtsmodus wijzigt van gebufferd naar gestreamd, wordt ook de systeemeigen kanaalvorm van tcp- en benoemde pijptransporten gewijzigd. Voor gebufferde overdrachten is IDuplexSessionChannelde systeemeigen kanaalshape . Voor gestreamde overdrachten zijn IRequestChannel de systeemeigen kanalen en IReplyChannel. Als u de overdrachtsmodus wijzigt in een bestaande toepassing die deze transporten rechtstreeks gebruikt (dat wil zeggen, niet via een servicecontract), moet u de verwachte kanaalvorm voor kanaalfactory's en listeners wijzigen.

Zie ook