Custom Channel Dispatcher
Exemplet CustomChannelDispatcher visar hur du skapar kanalstacken på ett anpassat sätt genom att implementera ServiceHostBase direkt och hur du skapar en anpassad kanalavsändare i webbvärdmiljön. Kanalutskickaren interagerar med IChannelListener för att acceptera kanaler och hämtar meddelanden från kanalstacken. Det här exemplet innehåller också ett grundläggande exempel som visar hur du skapar en kanalstack i en webbvärdmiljö med hjälp VirtualPathExtensionav .
Custom ServiceHostBase
Det här exemplet implementerar bastypen ServiceHostBase i stället för ServiceHost att visa hur du ersätter WCF-stackimplementeringen (Windows Communication Foundation) med ett anpassat lager för meddelandehantering ovanpå kanalstacken. Du åsidosätter den virtuella metoden InitializeRuntime för att skapa kanallyssnare och kanalutskickaren.
Om du vill implementera en webbhanterad tjänst hämtar du tjänsttillägget VirtualPathExtension från Extensions samlingen och lägger till BindingParameterCollection det i så att transportlagret vet hur kanallyssnaren ska konfigureras baserat på värdmiljöinställningarna, d.v.s. IIS-inställningarna (Internet Information Services)/Windows Process Activation Service (WAS).
Custom Channel Dispatcher
Den anpassade kanalutskickaren utökar typen ChannelDispatcherBase. Den här typen implementerar programmeringslogik på kanalnivå. I det här exemplet stöds endast IReplyChannel för exchange-mönster för begärandesvarsmeddelanden, men den anpassade kanalutskickaren kan enkelt utökas till andra kanaltyper.
Avsändaren öppnar först kanallyssnaren och accepterar sedan singleton-svarskanalen. Med kanalen börjar den skicka meddelanden (begäranden) i en oändlig loop. För varje begäran skapas ett svarsmeddelande och skickas tillbaka till klienten.
Skapa ett svarsmeddelande
Meddelandebearbetningen implementeras i typen MyServiceManager
. HandleRequest
I metoden Action
kontrolleras meddelandets huvud först för att se om begäran stöds. En fördefinierad SOAP-åtgärd http://tempuri.org/HelloWorld/Hello
definieras för att tillhandahålla meddelandefiltrering. Detta liknar tjänstkontraktskonceptet i WCF-implementeringen av ServiceHost.
För rätt SOAP-åtgärdsfall hämtar exemplet begärda meddelandedata och genererar ett motsvarande svar på begäran som liknar det som visas i fallet ServiceHost .
Du hanterade särskilt HTTP-GET-verbet genom att returnera ett anpassat HTML-meddelande, i det här fallet så att du kan bläddra i tjänsten från en webbläsare för att se att den är korrekt kompilerad. Om SOAP-åtgärden inte matchar skickar du tillbaka ett felmeddelande som anger att begäran inte stöds.
Klienten för det här exemplet är en vanlig WCF-klient som inte förutsätter något från tjänsten. Så tjänsten är speciellt utformad för att matcha vad du får från en vanlig WCF-implementeringServiceHost . Därför krävs endast ett tjänstkontrakt på klienten.
Använda exemplet
När du kör klientprogrammet genereras följande utdata direkt.
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
Du kan också bläddra i tjänsten från en webbläsare så att ett HTTP-GET-meddelande bearbetas på servern. På så sätt får du tillbaka välformaterad HTML-text.