Sdílet prostřednictvím


Vlastní upgrady streamů

Přenosy orientované na datové proudy, jako jsou TCP a pojmenované kanály, pracují s nepřetržitým proudem bajtů mezi klientem a serverem. Tento datový proud je realizován objektem Stream . V upgradu datového proudu chce klient přidat do zásobníku kanálu volitelnou vrstvu protokolu a požádá o to druhý konec komunikačního kanálu. Upgrade datového proudu spočívá v nahrazení původního Stream objektu upgradovaným objektem.

Můžete například vytvořit stream komprese přímo nad přenosovým proudem. V tomto případě je původní doprava Stream nahrazena jedním, který zabalí kompresi Stream kolem původní.

Můžete použít více upgradů datových proudů, přičemž každý z nich zabalí předchozí upgrade.

Jak fungují upgrady streamu

Proces upgradu streamu má čtyři komponenty.

  1. Iniciátor streamu upgradu zahájí proces: za běhu může zahájit požadavek na druhý konec jeho připojení k upgradu přenosové vrstvy kanálu.

  2. Akceptátor streamu upgradu provede upgrade: za běhu obdrží požadavek na upgrade z jiného počítače a pokud je to možné, přijme upgrade.

  3. Zprostředkovatel upgradu vytvoří iniciátor v klientovi a acceptor na serveru.

  4. Element vazby upgradu datového proudu se přidá do vazeb ve službě a klientovi a vytvoří zprostředkovatele za běhu.

Všimněte si, že v případě několika upgradů zapouzdřují iniciátor a akceptátor stavové počítače, které vynucují, které přechody upgradu jsou platné pro každou iniciaci.

Implementace upgradu streamu

Windows Communication Foundation (WCF) poskytuje čtyři abstract třídy, které můžete implementovat:

Pokud chcete implementovat vlastní upgrade streamu, postupujte následovně. Tento postup implementuje minimální proces upgradu datového proudu na klientských i serverových počítačích.

  1. Vytvořte třídu, která implementuje StreamUpgradeInitiator.

    1. Přepište metodu InitiateUpgrade , která se má provést v datovém proudu, který se má upgradovat, a vrátit upgradovaný stream. Tato metoda funguje synchronně; existují podobné metody, jak inicializovat upgrade asynchronně.

    2. Přepište metodu GetNextUpgrade a zkontrolujte další upgrady.

  2. Vytvořte třídu, která implementuje StreamUpgradeAcceptor.

    1. Přepište metodu AcceptUpgrade , která se má provést v datovém proudu, který se má upgradovat, a vrátit upgradovaný stream. Tato metoda funguje synchronně; existují podobné metody, jak upgrade přijmout asynchronně.

    2. Přepište metodu CanUpgrade , která určuje, jestli je požadovaný upgrade podporován tímto akceptátorem upgradu v tomto okamžiku v procesu upgradu.

  3. Vytvořte třídu implements StreamUpgradeProvider. CreateUpgradeAcceptor Přepište a CreateUpgradeInitiator metody pro vrácení instancí akceptátoru a iniciátoru definovaného v krocích 2 a 1.

  4. Vytvořte třídu, která implementuje StreamUpgradeBindingElement.

    1. Přepište metodu BuildClientStreamUpgradeProvider na klientovi a metodu BuildServerStreamUpgradeProvider ve službě.

    2. Přepsat metodu BuildChannelFactory na klientovi a metodu BuildChannelListener ve službě přidat element vazby upgradu do BindingParameters.

  5. Přidejte nový element vazby upgradu datového proudu do vazeb na serveru a klientských počítačích.

Upgrady zabezpečení

Přidání upgradu zabezpečení je specializovaná verze obecného procesu upgradu streamu.

WCF již poskytuje dva prvky vazby pro upgrade zabezpečení datových proudů. Konfigurace zabezpečení na úrovni přenosu je zapouzdřena WindowsStreamSecurityBindingElement a SslStreamSecurityBindingElement kterou lze nakonfigurovat a přidat do vlastní vazby. Tyto prvky vazby rozšiřují třídu, která vytváří zprostředkovatele upgradu datového StreamUpgradeBindingElement proudu klienta a serveru. Tyto prvky vazby mají metody, které vytvářejí specializované třídy zprostředkovatele upgradu datového proudu zabezpečení, které nejsou public, takže pro tyto dva případy stačí jen přidat element vazby do vazby.

Pro scénáře zabezpečení, které nejsou splněny výše dvěma prvky vazby, jsou tři třídy související se abstract zabezpečením odvozeny od výše uvedeného iniciátoru, akceptátoru a základní třídy zprostředkovatele:

  1. System.ServiceModel.Channels.StreamSecurityUpgradeInitiator

  2. System.ServiceModel.Channels.StreamSecurityUpgradeAcceptor

  3. System.ServiceModel.Channels.StreamSecurityUpgradeProvider

Proces implementace upgradu datového proudu zabezpečení je stejný jako předtím, s rozdílem, který byste odvozovali z těchto tří tříd. Přepište další vlastnosti v těchto třídách a zadejte informace o zabezpečení modulu runtime.

Více upgradů

Pokud chcete vytvořit další žádosti o upgrade, zopakujte výše uvedený proces: vytvořte další rozšíření StreamUpgradeProvider a prvky vazby. Přidejte do vazby prvky vazby. Další prvky vazby se zpracovávají postupně, počínaje prvním prvkem vazby přidaným do vazby. BuildChannelListener Každý BuildChannelFactory poskytovatel upgradu může určit, jak se má vrstvit na všech předem existujících parametrech vazby upgradu. Potom by měl nahradit existující parametr vazby upgradu novým parametrem vazby složeného upgradu.

Alternativně může jeden poskytovatel upgradu podporovat více upgradů. Můžete například chtít implementovat vlastního poskytovatele upgradu streamu, který podporuje zabezpečení i kompresi. Proveďte následující kroky:

  1. Podtřída StreamSecurityUpgradeProvider pro zápis třídy zprostředkovatele, která vytvoří iniciátor a acceptor.

  2. Podtřídu StreamSecurityUpgradeInitiator nezapomeňte přepsat metodu GetNextUpgrade tak, aby vracela typy obsahu pro stream komprese a zabezpečený datový proud v pořadí.

  3. Podtřída StreamSecurityUpgradeAcceptor , která rozumí vlastním typům obsahu ve své CanUpgrade metodě.

  4. Stream se upgraduje po každém volání GetNextUpgrade a CanUpgrade.

Viz také