Megosztás a következőn keresztül:


Egyéni streamfrissítések

A stream-orientált átvitelek, például a TCP és a Nevesített csövek folyamatos bájtfolyamon működnek az ügyfél és a kiszolgáló között. Ezt a streamet egy Stream objektum valósítja meg. A streamfrissítés során az ügyfél egy opcionális protokollréteget szeretne hozzáadni a csatornaveremhez, és erre kéri a kommunikációs csatorna másik végét. A streamfrissítés lényege, hogy az eredeti Stream objektumot lecseréli egy frissített objektumra.

Létrehozhat például egy tömörítési streamet közvetlenül az átviteli adatfolyam tetejére. Ebben az esetben az eredeti átvitel helyébe egy olyan kerül Stream , amely körbefuttatja a tömörítést Stream az eredetivel.

Több streamfrissítést is alkalmazhat, mindegyik az előzőt tördeli.

A streamfrissítések működése

A streamfrissítési folyamat négy összetevőből áll.

  1. A frissítési stream kezdeményezője elindítja a folyamatot: futásidőben kezdeményezhet egy kérést a kapcsolat másik végéhez a csatorna átviteli rétegének frissítéséhez.

  2. A frissítési stream elfogadója végrehajtja a frissítést: futásidőben megkapja a frissítési kérelmet a másik géptől, és ha lehetséges, elfogadja a frissítést.

  3. A frissítési szolgáltató létrehozza a kezdeményezőt az ügyfélen és az elfogadó a kiszolgálón.

  4. A rendszer hozzáad egy streamfrissítési kötéselemet a szolgáltatás és az ügyfél kötéseihez, és futásidőben hozza létre a szolgáltatót.

Vegye figyelembe, hogy több frissítés esetén a kezdeményező és az elfogadó állapotgépeket ágyaz be, hogy kikényszeríthesse, hogy mely frissítési áttűnések érvényesek az egyes kezdeményezésekre.

Streamfrissítés implementálása

A Windows Communication Foundation (WCF) négy abstract olyan osztályt biztosít, amelyeket megvalósíthat:

Egyéni streamfrissítés implementálásához tegye a következőket. Ez az eljárás minimális streamfrissítési folyamatot valósít meg az ügyfél- és kiszolgálógépeken is.

  1. Hozzon létre egy implementálható osztályt StreamUpgradeInitiator.

    1. Felülbírálja a InitiateUpgrade frissíteni kívánt streambe való beadás módszerét, és adja vissza a frissített streamet. Ez a módszer szinkron módon működik; a frissítés aszinkron módon történő elindításához hasonló módszerek léteznek.

    2. Felülbírálja a GetNextUpgrade metódust a további frissítések ellenőrzéséhez.

  2. Hozzon létre egy implementálható osztályt StreamUpgradeAcceptor.

    1. Felülbírálja a AcceptUpgrade frissíteni kívánt streambe való beadás módszerét, és adja vissza a frissített streamet. Ez a módszer szinkron módon működik; vannak hasonló módszerek a frissítés aszinkron elfogadására.

    2. Bírálja felül a CanUpgrade metódust annak megállapításához, hogy a kért frissítést támogatja-e ez a frissítési elfogadó a frissítési folyamat ezen pontján.

  3. Hozzon létre egy osztályt a implementálásokhoz StreamUpgradeProvider. Felülbírálja a CreateUpgradeAcceptorCreateUpgradeInitiator 2. és 1. lépésben meghatározott elfogadó és kezdeményező példányainak visszaadására vonatkozó módszereket.

  4. Hozzon létre egy implementálható osztályt StreamUpgradeBindingElement.

    1. Bírálja felül a metódust BuildClientStreamUpgradeProvider az ügyfélen és a BuildServerStreamUpgradeProvider szolgáltatáson.

    2. Bírálja felül az BuildChannelFactory ügyfél metódusát és a BuildChannelListener szolgáltatás azon metódusát, amelybe a frissítési kötési elemet BindingParametershozzá szeretné adni.

  5. Adja hozzá az új streamfrissítési kötési elemet a kiszolgáló és az ügyfélgépek kötéseihez.

Biztonsági frissítések

A biztonsági frissítés hozzáadása az általános streamfrissítési folyamat speciális verziója.

A WCF már két kötési elemet biztosít a streambiztonság frissítéséhez. Az átviteli szintű biztonság konfigurálását a WindowsStreamSecurityBindingElement konfigurálható és SslStreamSecurityBindingElement az egyéni kötéshez hozzáadható és konfigurálható adatok foglalja össze. Ezek a kötési elemek kiterjesztik az StreamUpgradeBindingElement ügyfél- és kiszolgálóstream-frissítési szolgáltatókat tartalmazó osztályt. Ezek a kötéselemek olyan metódusokkal rendelkeznek, amelyek létrehozzák a speciális biztonsági stream-frissítési szolgáltatóosztályokat, amelyek nem public, ezért ebben a két esetben mindössze annyit kell tennie, hogy hozzáadja a kötés elemet a kötéshez.

A fenti két kötéselem által nem teljesített biztonsági forgatókönyvek esetében három, biztonsággal kapcsolatos abstract osztály származik a fenti kezdeményező, elfogadó és szolgáltatói alaposztályból:

  1. System.ServiceModel.Channels.StreamSecurityUpgradeInitiator

  2. System.ServiceModel.Channels.StreamSecurityUpgradeAcceptor

  3. System.ServiceModel.Channels.StreamSecurityUpgradeProvider

A biztonsági adatfolyamok frissítésének folyamata ugyanaz, mint korábban, azzal a különbséggel, hogy ebből a három osztályból származna. Felülbírálja a további tulajdonságokat ezekben az osztályokban, hogy biztonsági információkat adjon meg a futtatókörnyezetnek.

Több frissítés

További frissítési kérelmek létrehozásához ismételje meg a fenti folyamatot: hozzon létre további bővítményeket és kötéselemeket StreamUpgradeProvider . Adja hozzá a kötés elemeit a kötéshez. A további kötési elemek egymás után lesznek feldolgozva, kezdve a kötéshez hozzáadott első kötési elemmel. BuildChannelListener Mindegyik BuildChannelFactory frissítési szolgáltató meghatározhatja, hogyan rétegzheti magát a meglévő frissítéskötési paramétereken. Ezt követően a meglévő frissítéskötési paramétert egy új összetett frissítéskötési paraméterre kell cserélnie.

Másik lehetőségként egy frissítésszolgáltató több frissítést is támogathat. Előfordulhat például, hogy olyan egyéni streamfrissítési szolgáltatót szeretne implementálni, amely támogatja a biztonságot és a tömörítést is. Hajtsa végre a következő lépéseket:

  1. Alosztály StreamSecurityUpgradeProvider a kezdeményezőt és az elfogadót létrehozó szolgáltatói osztály írásához.

  2. Alosztályozza a tömörítési StreamSecurityUpgradeInitiator adatfolyam és a biztonságos adatfolyam tartalomtípusainak visszaadására szolgáló metódus felülbírálását GetNextUpgrade .

  3. Alosztályozza az StreamSecurityUpgradeAcceptor egyéni tartalomtípusokat a metódusában CanUpgrade .

  4. A stream minden egyes hívás után frissül.GetNextUpgradeCanUpgrade

Lásd még