UDP-AktivierungUDP Activation

Dieses Beispiel basiert auf der Transport: UDP Beispiel.This sample is based on the Transport: UDP sample. Es erweitert die Transport: UDP Stichprobe, die prozessaktivierung mit dem Windows Process Activation Service (WAS) unterstützen.It extends the Transport: UDP sample to support process activation using the Windows Process Activation Service (WAS).

Das Beispiel besteht im Wesentlichen aus drei Teilen:The sample consists of three major pieces:

  • Einem UDP-Protokoll-Aktivierer, welcher ein eigenständiger Prozess ist, der für zu aktivierende Anwendungen UDP-Nachrichten empfängt.A UDP Protocol Activator, a standalone process that receives UDP messages on behalf of applications that are to be activated.

  • Einem Client, der mit dem benutzerdefinierten UDP-Transport Nachrichten sendet.A client that uses the UDP custom transport to send messages.

  • Einem Dienst, der in einem von WAS aktivierten Workerprozess gehostet wird und Nachrichten über den benutzerdefinierten UDP-Transport empfängt.A service (hosted in a worker process activated by WAS) that receives messages over the UDP custom transport.

UDP-Protokoll-AktiviererUDP Protocol Activator

Der UDP-Protokoll-Aktivierer ist eine Brücke zwischen dem WCF-Client und der WCF-Dienst.The UDP Protocol Activator is a bridge between the WCF client and the WCF service. Er bietet Datenkommunikation über das UDP-Protokoll auf der Transportebene.It provides data communication through the UDP protocol at the transport layer. Seine zwei Hauptfunktionen sind:It has two major functions:

  • WAS-Listeneradapter (LA), der mit WAS zusammenarbeitet, um als Antwort auf eingehende Nachrichten Prozesse zu aktivieren.WAS Listener Adapter (LA), which collaborates with WAS to activate processes in response to incoming messages.

  • UDP-Protokolllistener, der für zu aktivierende Anwendungen UDP-Nachrichten entgegennimmt.UDP Protocol Listener, which accepts UDP messages on behalf of applications that are to be activated.

Der Aktivierer muss auf dem Server als eigenständiges Programm ausgeführt werden.The activator must be running as a standalone program on the server machine. WAS-Listeneradapter (wie der NetTcpActivator und der NetPipeActivator) werden meist in Windows-Diensten mit langer Laufzeit implementiert.Normally, WAS listener adapters (such as the NetTcpActivator and the NetPipeActivator) are implemented in long-running Windows services. Im vorliegenden Beispiel wird der Protokollaktivierer aber aus Gründen der Einfachheit und Übersichtlichkeit als eigenständige Anwendung implementiert.However, for simplicity and clarity, this sample implements the protocol activator as a standalone application.

WAS-ListeneradapterWAS Listener Adapter

Der WAS-Listeneradapter für UDP ist in der UdpListenerAdapter-Klasse implementiert.The WAS Listener Adapter for UDP is implemented in the UdpListenerAdapter class. Das ist das Modul, das mit WAS interagiert, um Anwendungen für das UDP-Protokoll zu aktivieren.It is the module that interacts with WAS to perform application activation for the UDP protocol. Dies erfolgt durch Aufrufen der folgenden Webhost-APIs:This is achieved by calling the following Webhost APIs:

  • WebhostRegisterProtocol

  • WebhostUnregisterProtocol

  • WebhostOpenListenerChannelInstance

  • WebhostCloseAllListenerChannelInstances

Nach dem ersten Aufrufen von WebhostRegisterProtocol empfängt der Listeneradapter den ApplicationCreated-Rückruf von WAS für alle in applicationHost.config (die sich unter %windir%\system32\inetsrv befindet) registrierten Anwendungen.After initially calling WebhostRegisterProtocol, the listener adapter receives the callback ApplicationCreated from WAS for all of the applications registered in applicationHost.config (located in %windir%\system32\inetsrv). In diesem Beispiel werden nur die Anwendungen mit aktiviertem UDP-Protokoll verarbeitet (mit der Protokoll-ID als "net.udp").In this sample, we only handle the applications with the UDP protocol (with the protocol id as "net.udp") enabled. In anderen Implementierungen kann dies anders gehalten werden, wenn diese Implementierungen auf dynamische Konfigurationsänderungen bei der Anwendung reagieren (wie zum Beispiel der Übergang einer Anwendung von aktiviert zu deaktiviert).Other implementations may handle this differently if such implementations respond to dynamic configuration changes to the application (for example, an application transition from disabled to enabled).

Wenn der ConfigManagerInitializationCompleted-Rückruf empfangen wird, zeigt dies an, dass WAS sämtliche Benachrichtigungen für die Initialisierung des Protokolls abgeschlossen hat.When the callback ConfigManagerInitializationCompleted is received, it indicates that WAS has finished all of the notifications for the initialization of the protocol. Ab diesem Zeitpunkt ist der Listeneradapter bereit, Aktivierungsanforderungen zu verarbeiten.At this time, the listener adapter is ready to process activation requests.

Wenn eine neue Anforderung für eine Anwendung zum ersten Mal eingeht, ruft der Listeneradapter WebhostOpenListenerChannelInstance in WAS auf, wodurch der Workerprozess gestartet wird (wenn er nicht bereits gestartet ist).When a new request comes in the first time for an application, the listener adapter calls WebhostOpenListenerChannelInstance into WAS, which starts the worker process if it is not started yet. Anschließend werden die Protokollhandler geladen, und die Kommunikation zwischen dem Listeneradapter und der virtuellen Anwendung kann beginnen.Then the protocol handlers are loaded and the communication between the listener adapter and the virtual application can start.

Der Listeneradapter registriert ist, in der %SystemRoot%\System32\inetsrv\ApplicationHost.config in der <listenerAdapters> im Abschnitt wie folgt:The listener adapter is registered in the %SystemRoot%\System32\inetsrv\ApplicationHost.config in the <listenerAdapters> section as following:

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

ProtokolllistenerProtocol Listener

Der UDP-Protokolllistener ist ein Modul innerhalb des Protokollaktivierers, der für die virtuelle Anwendung einen UDP-Endpunkt überwacht.The UDP protocol listener is a module inside the protocol activator that listens at a UDP endpoint on behalf of the virtual application. Er ist in der UdpSocketListener-Klasse implementiert.It is implemented in the class UdpSocketListener. Der Endpunkt liegt als IPEndpoint vor, bei dem die Portnummer aus der Bindung des Protokolls für die Site extrahiert wird.The endpoint is represented as IPEndpoint for which the port number is extracted from the binding of the protocol for the site.

SteuerungsdienstControl Service

In diesem Beispiel verwenden wir WCF für die Kommunikation zwischen dem Aktivierer und WAS-Workerprozess an.In this sample, we use WCF to communicate between the activator and the WAS worker process. Der Dienst, der sich im Aktivierer befindet, wird als "Steuerungsdienst" bezeichnet.The service that resides in the activator is called the Control Service.

ProtokollhandlerProtocol Handlers

Nachdem der Listeneradapter WebhostOpenListenerChannelInstance aufgerufen hat, startet der WAS-Prozess-Manager den Workerprozess (falls dieser noch nicht gestartet ist).After the listener adapter calls WebhostOpenListenerChannelInstance, the WAS process manager starts the worker process if it is not started. Anschließend lädt der im Workerprozess befindliche Anwendungs-Manager den UDP-Prozessprotokollhandler (PPH) mit der Anforderung nach dieser ListenerChannelId.The application manager inside the worker process then loads the UDP Process Protocol Handler (PPH) with the request for that ListenerChannelId. Der PPH wiederum ruft IAdphManager.StartAppDomainProtocolListenerChannelThe PPH in turns calls IAdphManager.StartAppDomainProtocolListenerChannel der UDP-AppDomain-Protokollhandler (ADPH) zu starten.to start the UDP AppDomain Protocol Handler (ADPH).

HostedUDPTransportConfigurationHostedUDPTransportConfiguration

Diese Informationen werden wie folgt in der Web.config registriert:The information is registered in the Web.config as follows:

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

Spezielle Einrichtung für dieses BeispielSpecial Setup for This Sample

Dieses Beispiel kann nur unter Windows Vista, Windows Server 2008 oder Windows 7 erstellt und ausgeführt werden.This sample can be only built and run on Windows Vista, Windows Server 2008, or Windows 7. Zum Ausführen des Beispiels müssen Sie zuerst sämtliche Komponenten ordnungsgemäß einrichten.To run the sample, you must first get all of the components set up correctly. Gehen Sie folgendermaßen vor, um das Beispiel zu installieren.Use the following steps to install the sample.

So richten Sie dieses Beispiel einTo set up this sample

  1. Installieren Sie ASP.NETASP.NET 4.0 mithilfe des folgenden Befehls.Install ASP.NETASP.NET 4.0 using the following command.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable  
    
  2. Erstellen Sie das Projekt unter Windows Vista.Build the project on Windows Vista. Nach dem Kompilieren führt es in der Postbuildphase auch die folgenden Vorgänge aus:After compilation, it also performs the following operations in the post-build phase:

    • Es installiert die UDP-Bindung für die Site „Default Web Site“.Installs the UDP binding to the site "Default Web Site".

    • Es erstellt den "ServiceModelSamples" der virtuellen Anwendung so, dass er auf den physischen Pfad zeigt: "%SystemDrive%\inetpub\wwwroot\servicemodelsamples".Creates the virtual application "ServiceModelSamples" to point to the physical path: "%SystemDrive%\inetpub\wwwroot\servicemodelsamples".

    • Außerdem aktiviert es für diese virtuelle Anwendung das "net.udp"-Protokoll.It also enables "net.udp" protocol for this virtual application.

  3. Starten Sie die Benutzeroberflächenanwendung "WasNetActivator.exe".Start the user interface application "WasNetActivator.exe". Klicken Sie auf die Setup Registerkarte, überprüfen Sie die folgenden Kontrollkästchen aus, und klicken Sie dann auf installieren , diese zu installieren:Click the Setup tab, check the following check boxes and then click Install to install them:

    • UDP-ListeneradapterUDP Listener Adapter

    • UDP-ProtokollhandlerUDP Protocol Handlers

  4. Klicken Sie auf die Aktivierung Registerkarte Benutzeroberflächenanwendung "WasNetActivator.exe".Click the Activation tab of the user interface application "WasNetActivator.exe". Klicken Sie auf die starten Schaltfläche, um den Listeneradapter zu starten.Click the Start button to start the listener adapter. Nun können Sie das Programm ausführen.Now you are ready to run the program.

    Hinweis

    Wenn Sie die Arbeit mit diesem Beispiel abgeschlossen haben, müssen Sie Cleanup.bat ausführen, um die net.udp-Bindung aus der „Default Web Site“ zu entfernen.When you are finished with this sample, you must run Cleanup.bat to remove the net.udp binding from the "Default Web Site".

Verwendung des BeispielsSample Usage

Nach dem Kompilieren liegen vier verschiedene Binärdateien vor:After compilation, there are four different binaries generated:

  • Client.exe: Der Clientcode.Client.exe: The client code. Die App.config ist in die Client.exe-Clientkonfigurationsdatei hinein kompiliert.The App.config is compiled into the client configuration file Client.exe.config.

  • UDPActivation.dll: Die Bibliothek, die alle wichtigen UDP-Implementierungen enthält.UDPActivation.dll: the library that contains all of the major UDP implementations.

  • Service.dll: Der Dienstcode.Service.dll: The service code. Diese wird in das Verzeichnis \bin der virtuellen Anwendung ServiceModelSamples kopiert.This is copied to the \bin directory of the virtual application ServiceModelSamples. Die Dienstdatei ist Service.svc, und die Konfigurationsdatei ist Web.config. Nach dem Kompilieren werden sie an den folgenden Speicherort kopiert: %SystemDrive%\Inetpub\wwwroot\ServiceModelSamples.The service file is Service.svc and the configuration file is Web.config. After compilation, they are copied to the following location: %SystemDrive%\Inetpub\wwwroot\ServiceModelSamples.

  • WasNetActivator: Das UDP-Aktiviererprogramm.WasNetActivator: The UDP activator program.

  • Stellen Sie sicher, dass alle erforderlichen Bestandteile ordnungsgemäß installiert sind.Ensure that all of the required pieces are installed correctly. Die folgenden Schritte zeigen, wie das Beispiel ausgeführt wird:The following steps show how to run the sample:

  1. Stellen Sie sicher, dass die folgenden Windows-Dienste gestartet sind:Ensure that the following Windows services have been started:

    • WAS (Windows Process Activation Service)Windows Process Activation Service (WAS).

    • Internetinformationsdienste (IIS): W3SVC.Internet Information Services (IIS): W3SVC.

  2. Starten Sie anschließend den Aktivierer (WasNetActivator.exe).Then start the activator, WasNetActivator.exe. Klicken Sie unter der Aktivierung Registerkarte, das einzige Protokoll UDP, in der Dropdownliste ausgewählt ist.Under the Activation tab, the only protocol, UDP, is selected in the drop down list. Klicken Sie auf die starten Schaltfläche, um den Aktivierer zu starten.Click the Start button to start the activator.

  3. Wenn der Aktivierer gestartet ist, können Sie den Clientcode ausführen, indem Sie in einem Befehlsfenster die Client.exe ausführen.Once the activator is started, you can run the client code by running Client.exe from a command window. Nachfolgend ist die Ausgabe des Beispiels aufgeführt:The following is the sample output:

    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.  
    

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Extensibility\Transport\UdpActivation

Siehe auchSee Also