Dela via


UDP-aktivering

UdpActivation-exemplet baseras på exemplet Transport: UDP. Det utökar exemplet Transport: UDP för att stödja processaktivering med hjälp av Windows Process Activation Service (WAS).

Urvalet består av tre huvuddelar:

  • En UDP-protokollaktivator, en fristående process som tar emot UDP-meddelanden för program som ska aktiveras.

  • En klient som använder den anpassade UDP-transporten för att skicka meddelanden.

  • En tjänst (som hanteras i en arbetsprocess som aktiveras av WAS) som tar emot meddelanden via den anpassade UDP-transporten.

UDP-protokollaktivator

UDP Protocol Activator är en brygga mellan WCF-klienten och WCF-tjänsten. Den tillhandahåller datakommunikation via UDP-protokollet på transportlagret. Den har två huvudfunktioner:

  • WAS Listener Adapter (LA), som samarbetar med WAS för att aktivera processer som svar på inkommande meddelanden.

  • UDP Protocol Listener, som accepterar UDP-meddelanden för program som ska aktiveras.

Aktivatorn måste köras som ett fristående program på serverdatorn. Normalt implementeras WAS-lyssnarkort (till exempel NetTcpActivator och NetPipeActivator) i långvariga Windows-tjänster. För enkelhetens skull implementerar det här exemplet dock protokollaktivatorn som ett fristående program.

WAS-lyssnaradapter

WAS Listener Adapter för UDP implementeras i UdpListenerAdapter klassen . Det är modulen som interagerar med WAS för att utföra programaktivering för UDP-protokollet. Detta uppnås genom att anropa följande API:er för webhost:

  • WebhostRegisterProtocol

  • WebhostUnregisterProtocol

  • WebhostOpenListenerChannelInstance

  • WebhostCloseAllListenerChannelInstances

Efter att du först anropat WebhostRegisterProtocoltar lyssnarkortet emot återanropet ApplicationCreated från WAS för alla program som registrerats i applicationHost.config (finns i %windir%\system32\inetsrv). I det här exemplet hanterar vi bara programmen med UDP-protokollet (med protokoll-ID som "net.udp") aktiverat. Andra implementeringar kan hantera detta på olika sätt om sådana implementeringar svarar på dynamiska konfigurationsändringar i programmet (till exempel en programövergång från inaktiverad till aktiverad).

När återanropet ConfigManagerInitializationCompleted tas emot anger det att WAS har slutfört alla meddelanden för initieringen av protokollet. För närvarande är lyssnarkortet redo att bearbeta aktiveringsbegäranden.

När en ny begäran kommer första gången för ett program anropar WebhostOpenListenerChannelInstance lyssnarkortet till WAS, vilket startar arbetsprocessen om den inte har startats ännu. Sedan läses protokollhanterarna in och kommunikationen mellan lyssnarkortet och det virtuella programmet kan starta.

Lyssnarkortet är registrerat i %SystemRoot%\System32\inetsrv\ApplicationHost.config i <listenerAdapters> avsnittet enligt följande:

<add name="net.udp" identity="S-1-5-21-2127521184-1604012920-1887927527-387045" />

Protokolllyssnare

UDP-protokolllyssnaren är en modul i protokollaktivatorn som lyssnar på en UDP-slutpunkt för det virtuella programmets räkning. Den implementeras i klassen UdpSocketListener. Slutpunkten representeras som IPEndpoint för vilken portnumret extraheras från bindningen av protokollet för platsen.

Kontrolltjänst

I det här exemplet använder vi WCF för att kommunicera mellan aktivatorn och WAS-arbetsprocessen. Den tjänst som finns i aktivatorn kallas för kontrolltjänsten.

Protokollhanterare

När lyssnarkortet anropar WebhostOpenListenerChannelInstancestartar WAS-processhanteraren arbetsprocessen om den inte startas. Programhanteraren i arbetsprocessen läser sedan in UDP Process Protocol Handler (PPH) med begäran för den ListenerChannelId. PPH i tur och ordning anropar IAdphManager.StartAppDomainProtocolListenerChannel för att starta UDP AppDomain Protocol Handler (ADPH).

HostedUDPTransportConfiguration

Informationen registreras i web.config på följande sätt:

<serviceHostingEnvironment>
<add name="net.udp" transportConfigurationType="Microsoft.ServiceModel.Samples.Hosting.HostedUdpTransportConfiguration, UdpActivation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6fa904d2da1848d6" />
</serviceHostingEnvironment>

Särskild installation för det här exemplet

Det här exemplet kan bara skapas och köras i Windows Vista, Windows Server 2008 eller Windows 7. Om du vill köra exemplet måste du först konfigurera alla komponenter korrekt. Använd följande steg för att installera exemplet.

Så här konfigurerar du det här exemplet

  1. Installera ASP.NET 4.0 med hjälp av följande kommando.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Skapa projektet i Windows Vista. Efter kompilering utför den även följande åtgärder i fasen efter bygget:

    • Installerar UDP-bindningen till webbplatsen "Standardwebbplats".

    • Skapar det virtuella programmet "ServiceModelSamples" för att peka på den fysiska sökvägen: "%SystemDrive%\inetpub\wwwroot\servicemodelsamples".

    • Det aktiverar även "net.udp"-protokoll för det här virtuella programmet.

  3. Starta användargränssnittsprogrammet "WasNetActivator.exe". Klicka på fliken Installation , markera följande kryssrutor och klicka sedan på Installera för att installera dem:

    • UDP-lyssnarkort

    • UDP-protokollhanterare

  4. Klicka på fliken Aktivering i användargränssnittsprogrammet "WasNetActivator.exe". Klicka på startknappen för att starta lyssnarkortet. Nu är du redo att köra programmet.

    Kommentar

    När du är klar med det här exemplet måste du köra Cleanup.bat för att ta bort net.udp-bindningen från standardwebbplatsen.

Exempel på användning

Efter kompilering genereras fyra olika binärfiler:

  • Client.exe: Klientkoden. App.config kompileras till klientkonfigurationsfilen Client.exe.config.

  • UDPActivation.dll: biblioteket som innehåller alla större UDP-implementeringar.

  • Service.dll: Tjänstkoden. Detta kopieras till katalogen \bin för det virtuella programmet ServiceModelSamples. Tjänstfilen är Service.svc och konfigurationsfilen är Web.config. Efter kompileringen kopieras de till följande plats: %SystemDrive%\Inetpub\wwwroot\ServiceModelSamples.

  • WasNetActivator: UDP-aktiveringsprogrammet.

  • Kontrollera att alla nödvändiga delar är korrekt installerade. Följande steg visar hur du kör exemplet:

  1. Kontrollera att följande Windows-tjänster har startats:

    • Windows Process Activation Service (WAS).

    • Internet Information Services (IIS): W3SVC.

  2. Starta sedan aktivatorn WasNetActivator.exe. Under fliken Aktivering är det enda protokollet, UDP, valt i listrutan. Klicka på startknappen för att starta aktivatorn.

  3. När aktivatorn har startats kan du köra klientkoden genom att köra Client.exe från ett kommandofönster. Följande är exempelutdata:

    Testing Udp Activation.
    Start the status service.
    Sending UDP datagrams.
    Type a word that you want to say to the server: Hello, world!
        Sending datagram: Hello, world![0]
        Sending datagram: Hello, world![1]
        Sending datagram: Hello, world![2]
        Sending datagram: Hello, world![3]
        Sending datagram: Hello, world![4]
    Calling UDP duplex contract (ICalculatorContract).
        0 + 0 = 0
        1 + 2 = 3
        2 + 4 = 6
        3 + 6 = 9
        4 + 8 = 12
    Getting status and dump server traces:
        Operation 'Hello' is called: Hello, world![0]
        Operation 'Hello' is called: Hello, world![1]
        Operation 'Hello' is called: Hello, world![2]
        Operation 'Hello' is called: Hello, world![3]
        Operation 'Hello' is called: Hello, world![4]
        Operation 'Add' is called: 0 + 0
        Operation 'Add' is called: 1 + 2
        Operation 'Add' is called: 2 + 4
        Operation 'Add' is called: 3 + 6
        Operation 'Add' is called: 4 + 8
    Press <ENTER> to complete test.