Delen via


UDP-activering

Het UdpActivation-voorbeeld is gebaseerd op het voorbeeld Transport: UDP . Het breidt het transport uit: UDP-voorbeeld ter ondersteuning van procesactivering met behulp van de Windows Process Activation Service (WAS).

Het voorbeeld bestaat uit drie belangrijke onderdelen:

  • Een UDP Protocol Activator, een zelfstandig proces dat UDP-berichten ontvangt namens toepassingen die moeten worden geactiveerd.

  • Een client die gebruikmaakt van het aangepaste UDP-transport om berichten te verzenden.

  • Een service (gehost in een werkproces geactiveerd door WAS) dat berichten ontvangt via het aangepaste UDP-transport.

UDP Protocol Activator

De UDP Protocol Activator is een brug tussen de WCF-client en de WCF-service. Het biedt gegevenscommunicatie via het UDP-protocol op de transportlaag. Het heeft twee belangrijke functies:

  • WAS Listener Adapter (LA), die samenwerkt met WAS om processen te activeren als reactie op binnenkomende berichten.

  • UDP Protocol Listener, die UDP-berichten accepteert namens toepassingen die moeten worden geactiveerd.

De activator moet worden uitgevoerd als een zelfstandig programma op de servercomputer. Normaal gesproken worden WAS-listeneradapters (zoals de NetTcpActivator en de NetPipeActivator) geïmplementeerd in langlopende Windows-services. Voor eenvoud en duidelijkheid implementeert dit voorbeeld echter de protocolactivator als een zelfstandige toepassing.

WAS Listener Adapter

De WAS Listener Adapter voor UDP wordt geïmplementeerd in de UdpListenerAdapter klasse. Het is de module die communiceert met WAS om toepassingsactivering uit te voeren voor het UDP-protocol. Dit wordt bereikt door de volgende Webhost-API's aan te roepen:

  • WebhostRegisterProtocol

  • WebhostUnregisterProtocol

  • WebhostOpenListenerChannelInstance

  • WebhostCloseAllListenerChannelInstances

Na de eerste aanroep WebhostRegisterProtocolontvangt de listeneradapter de callback ApplicationCreated van WAS voor alle toepassingen die zijn geregistreerd in applicationHost.config (in %windir%\system32\inetsrv). In dit voorbeeld verwerken we alleen de toepassingen met het UDP-protocol (met de protocol-id als 'net.udp') ingeschakeld. Andere implementaties kunnen dit anders afhandelen als dergelijke implementaties reageren op dynamische configuratiewijzigingen in de toepassing (bijvoorbeeld een toepassingsovergang van uitgeschakeld naar ingeschakeld).

Wanneer de callback ConfigManagerInitializationCompleted wordt ontvangen, geeft dit aan dat WAS alle meldingen voor de initialisatie van het protocol heeft voltooid. Op dit moment is de listeneradapter klaar om activeringsaanvragen te verwerken.

Wanneer een nieuwe aanvraag voor de eerste keer voor een toepassing binnenkomt, wordt de listeneradapter aangeroepen WebhostOpenListenerChannelInstance naar WAS, waardoor het werkproces wordt gestart als deze nog niet is gestart. Vervolgens worden de protocolhandlers geladen en kan de communicatie tussen de listeneradapter en de virtuele toepassing worden gestart.

De listener-adapter is geregistreerd in %SystemRoot%\System32\inetsrv\ApplicationHost.config in de <listenerAdapters> sectie als volgt:

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

Protocollistener

De UDP-protocollistener is een module in de protocolactivator die luistert naar een UDP-eindpunt namens de virtuele toepassing. Het is geïmplementeerd in de klasse UdpSocketListener. Het eindpunt wordt weergegeven als IPEndpoint waarvoor het poortnummer wordt geëxtraheerd uit de binding van het protocol voor de site.

Control Service

In dit voorbeeld gebruiken we WCF om te communiceren tussen de activator en het WAS-werkproces. De service die zich in de activator bevindt, wordt de Control Service genoemd.

Protocolhandlers

Nadat de listeneradapter is aangeroepen WebhostOpenListenerChannelInstance, start de WAS-procesbeheerder het werkproces als dit niet is gestart. De toepassingsbeheerder in het werkproces laadt vervolgens de UDP Process Protocol Handler (PPH) met de aanvraag hiervoor ListenerChannelId. De PPH roept op zijn beurt aan IAdphManager.StartAppDomainProtocolListenerChannel om de UDP AppDomain Protocol Handler (ADPH) te starten.

HostedUDPTransportConfiguration

De informatie wordt als volgt geregistreerd in web.config:

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

Speciale installatie voor dit voorbeeld

Dit voorbeeld kan alleen worden gebouwd en uitgevoerd op Windows Vista, Windows Server 2008 of Windows 7. Als u het voorbeeld wilt uitvoeren, moet u eerst alle onderdelen correct instellen. Gebruik de volgende stappen om het voorbeeld te installeren.

Dit voorbeeld instellen

  1. Installeer ASP.NET 4.0 met de volgende opdracht.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Bouw het project op Windows Vista. Na de compilatie worden ook de volgende bewerkingen uitgevoerd in de fase na de build:

    • Hiermee wordt de UDP-binding geïnstalleerd op de site 'Standaardwebsite'.

    • Hiermee maakt u de virtuele toepassing ServiceModelSamples om naar het fysieke pad te verwijzen: %SystemDrive%\inetpub\wwwroot\servicemodelsamples.

    • Het maakt ook het protocol 'net.udp' voor deze virtuele toepassing mogelijk.

  3. Start de gebruikersinterfacetoepassing 'WasNetActivator.exe'. Klik op het tabblad Setup , schakel de volgende selectievakjes in en klik vervolgens op Installeren om ze te installeren:

    • UDP Listener Adapter

    • UDP-protocolhandlers

  4. Klik op het tabblad Activering van de gebruikersinterfacetoepassing 'WasNetActivator.exe'. Klik op de knop Start om de listeneradapter te starten. Nu bent u klaar om het programma uit te voeren.

    Notitie

    Wanneer u klaar bent met dit voorbeeld, moet u Cleanup.bat uitvoeren om de net.udp-binding te verwijderen van de standaardwebsite.

Voorbeeld van gebruik

Na de compilatie zijn er vier verschillende binaire bestanden gegenereerd:

  • Client.exe: de clientcode. De App.config wordt gecompileerd in het clientconfiguratiebestand Client.exe.config.

  • UDPActivation.dll: de bibliotheek met alle belangrijke UDP-implementaties.

  • Service.dll: de servicecode. Dit wordt gekopieerd naar de map \bin van de virtuele toepassing ServiceModelSamples. Het servicebestand is Service.svc en het configuratiebestand is Web.config. Na de compilatie worden ze gekopieerd naar de volgende locatie: %SystemDrive%\Inetpub\wwwroot\ServiceModelSamples.

  • WasNetActivator: het UDP-activatorprogramma.

  • Zorg ervoor dat alle vereiste onderdelen correct zijn geïnstalleerd. De volgende stappen laten zien hoe u het voorbeeld uitvoert:

  1. Zorg ervoor dat de volgende Windows-services zijn gestart:

    • Windows Process Activation Service (WAS).

    • Internet Information Services (IIS): W3SVC.

  2. Start vervolgens de activator, WasNetActivator.exe. Op het tabblad Activering wordt het enige protocol, UDP, geselecteerd in de vervolgkeuzelijst. Klik op de knop Start om de activator te starten.

  3. Zodra de activator is gestart, kunt u de clientcode uitvoeren door Client.exe uit te voeren vanuit een opdrachtvenster. Hier volgt de voorbeelduitvoer:

    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.