Sdílet prostřednictvím


Dispečer vlastního kanálu

Ukázka CustomChannelDispatcher ukazuje, jak sestavit zásobník kanálu vlastním způsobem implementací ServiceHostBase přímo a jak vytvořit vlastní dispečer kanálu v hostitelském prostředí webu. Dispečer kanálu komunikuje s přijímáním IChannelListener kanálů a načítá zprávy ze zásobníku 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 toho, abyste ukázali, jak nahradit implementaci zásobníku WCF (Windows Communication Foundation) vlastní vrstvou zpracování zpráv nad zásobníkem kanálu. Virtuální metodu InitializeRuntime přepíšete tak, aby se sestavily naslouchací procesy kanálů a dispečer kanálu.

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

Dispečer vlastního kanálu

Dispečer vlastní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 jednoúčelové odpovědi. V 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. HandleRequest V metodě je záhlaví zprávy nejprve zaškrtnuté, abyste zjistili, Action 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 akce SOAP ukázka načte požadovaná data zprávy a vygeneruje odpovídající odpověď na požadavek podobný tomu, co se v ServiceHost tomto případě zobrazuje.

Speciálně jste zpracovali příkaz HTTP-GET tak, že v tomto případě vrátíte vlastní zprávu HTML, abyste mohli procházet službu z prohlížeče a zjistit, ž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 se v klientovi vyžaduje pouze kontrakt služby.

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.