Vlastní dispečer kanálu

Ukázka CustomChannelDispatcher demonstruje, jak sestavit zásobník kanálů vlastním způsobem přímou implementací a jak v prostředí webového hostitele vytvořit vlastní dispečer kanálů. Dispečer kanálu interaguje s IChannelListener pro přijímání kanálů a načítá zprávy ze stohu kanálů. Tato ukázka také poskytuje základní ukázku, která ukazuje, jak vytvořit zásobník kanálů ve webovém hostitelském prostředí pomocí VirtualPathExtension.

Custom ServiceHostBase

Tato ukázka implementuje základní typ ServiceHostBase místo ServiceHost k demonstrování, jak nahradit implementaci zásobníku Windows Communication Foundation (WCF) vlastní vrstvou zpracování zpráv nad kanálovým zásobníkem. Virtuální metodu InitializeRuntime přepíšete, abyste vytvořili procesy naslouchání kanálu a směrovač kanálu.

Pokud chcete implementovat službu hostované webem, získejte rozšíření VirtualPathExtension služby z Extensions kolekce a přidejte ji do BindingParameterCollection tak, aby transportní vrstva věděla, jak nakonfigurovat naslouchací proces kanálu na základě nastavení hostitelského prostředí, tj. nastavení Internetové informační služby (IIS) / Služba aktivace procesu systému Windows (WAS).

Vlastní dispečer kanálu

Dispečer konfigurovaného kanálu rozšiřuje typ ChannelDispatcherBase. Tento typ implementuje logiku programování na úrovni kanálu. V této ukázce je podporován pouze IReplyChannel model výměny zpráv s žádostí a odpovědí, ale vlastní dispečer kanálu je možné snadno rozšířit na jiné typy kanálů.

Dispečer nejprve otevře naslouchací proces kanálu a pak přijme kanál odpovědi singletonu. Díky kanálu začne posílat zprávy (žádosti) v nekonečné smyčce. Pro každou žádost vytvoří zprávu odpovědi a odešle ji zpět klientovi.

Vytvoření zprávy odpovědi

Zpracování zpráv je implementováno v typu MyServiceManager. V metodě HandleRequest je záhlaví zprávy Action nejprve zkontrolováno, aby se zjistilo, jestli je požadavek podporovaný. Předdefinovaná akce http://tempuri.org/HelloWorld/Hello SOAP je definována tak, aby poskytovala filtrování zpráv. To se podobá konceptu kontraktu služby v implementaci ServiceHostWCF .

Pro správný případ použití akce SOAP ukázka načte požadovaná data zprávy a vygeneruje odpovídající odpověď na požadavek, která je podobná tomu, co se v ServiceHost tomto případě zobrazuje.

Speciálně jste zpracovali příkaz HTTP-GET vrácením vlastní zprávy HTML, v tomto případě tak, abyste mohli službu procházet z prohlížeče, abyste viděli, že je správně zkompilovaná. Pokud se akce SOAP neshoduje, odešlete zpět zprávu o chybě, která indikuje, že požadavek není podporovaný.

Klient této ukázky je normální klient WCF, který nepředpokládá nic ze služby. Služba je tedy speciálně navržená tak, aby odpovídala tomu, co získáte z normální implementace WCFServiceHost . V důsledku toho je na klientovi vyžadována pouze smlouva o službě.

Použití ukázky

Spuštění klientské aplikace přímo vytvoří následující výstup.

Client is talking to a request/reply WCF service.
Type what you want to say to the server: Howdy
Server replied: You said: Howdy. Message id: 1
Server replied: You said: Howdy. Message id: 2
Server replied: You said: Howdy. Message id: 3
Server replied: You said: Howdy. Message id: 4
Server replied: You said: Howdy. Message id: 5

Službu můžete také procházet z prohlížeče, aby se na serveru zpracovávala zpráva HTTP-GET. Tím se vrátí dobře naformátovaný text HTML.