Udostępnij za pośrednictwem


Aktywacja UDP

Przykład UdpActivation jest oparty na przykładzie Transport: UDP. Rozszerzenie przykładu Transport: UDP w celu obsługi aktywacji procesów przy użyciu usługi aktywacji procesów systemu Windows (WAS).

Próbka składa się z trzech głównych elementów:

  • Aktywator protokołu UDP, autonomiczny proces, który odbiera komunikaty UDP w imieniu aplikacji, które mają zostać aktywowane.

  • Klient, który używa niestandardowego transportu UDP do wysyłania komunikatów.

  • Usługa (hostowana w procesie roboczym aktywowana przez usługę WAS), która odbiera komunikaty za pośrednictwem transportu niestandardowego UDP.

Aktywator protokołu UDP

Aktywacja protokołu UDP to most między klientem programu WCF a usługą WCF. Zapewnia komunikację danych za pośrednictwem protokołu UDP w warstwie transportu. Ma dwie główne funkcje:

  • Adapter odbiornika WAS (LA), który współpracuje z WAS w celu aktywowania procesów w odpowiedzi na komunikaty przychodzące.

  • Odbiornik protokołu UDP, który akceptuje komunikaty UDP w imieniu aplikacji, które mają zostać aktywowane.

Aktywacja musi być uruchomiona jako autonomiczny program na maszynie serwera. Zwykle karty odbiornika WAS (takie jak NetTcpActivator i NetPipeActivator) są implementowane w długotrwałych usługach systemu Windows. Jednak dla uproszczenia i jasności ten przykład implementuje aktywację protokołu jako autonomiczną aplikację.

Adapter odbiornika WAS

Adapter odbiornika WAS dla protokołu UDP jest implementowany w UdpListenerAdapter klasie . Jest to moduł, który współdziała z usługą WAS w celu przeprowadzenia aktywacji aplikacji dla protokołu UDP. Jest to osiągane przez wywołanie następujących interfejsów API hosta internetowego:

  • WebhostRegisterProtocol

  • WebhostUnregisterProtocol

  • WebhostOpenListenerChannelInstance

  • WebhostCloseAllListenerChannelInstances

Po początkowym wywołaniu WebhostRegisterProtocoladapter odbiornika odbiera wywołanie zwrotne ApplicationCreated z was dla wszystkich aplikacji zarejestrowanych w pliku applicationHost.config (znajdującym się w lokalizacji %windir%\system32\inetsrv). W tym przykładzie obsługujemy tylko aplikacje z włączonym protokołem UDP (z identyfikatorem protokołu "net.udp"). Inne implementacje mogą obsługiwać to inaczej, jeśli takie implementacje reagują na dynamiczne zmiany konfiguracji w aplikacji (na przykład przejście aplikacji z wyłączonej na włączoną).

Po odebraniu wywołania zwrotnego ConfigManagerInitializationCompleted wskazuje, że funkcja WAS zakończyła wszystkie powiadomienia dotyczące inicjowania protokołu. Obecnie karta odbiornika jest gotowa do przetwarzania żądań aktywacji.

Gdy nowe żądanie pojawia się po raz pierwszy dla aplikacji, karta odbiornika wywołuje WebhostOpenListenerChannelInstance element WAS, który uruchamia proces roboczy, jeśli jeszcze nie został uruchomiony. Następnie programy obsługi protokołu są ładowane, a komunikacja między kartą odbiornika a aplikacją wirtualną może się rozpocząć.

Karta odbiornika jest zarejestrowana w folderze %SystemRoot%\System32\inetsrv\ApplicationHost.config w <listenerAdapters> sekcji w następujący sposób:

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

Odbiornik protokołu

Odbiornik protokołu UDP jest modułem wewnątrz aktywatora protokołu, który nasłuchuje w punkcie końcowym UDP w imieniu aplikacji wirtualnej. Jest on implementowany w klasie UdpSocketListener. Punkt końcowy jest reprezentowany jako IPEndpoint numer portu wyodrębniony z powiązania protokołu dla lokacji.

Usługa sterowania

W tym przykładzie używamy programu WCF do komunikacji między aktywatorem a procesem roboczym WAS. Usługa, która znajduje się w aktywatorze, jest nazywana usługą sterowania.

Programy obsługi protokołów

Po wywołaniu WebhostOpenListenerChannelInstanceadaptera odbiornika menedżer procesów WAS uruchamia proces roboczy, jeśli nie został uruchomiony. Menedżer aplikacji wewnątrz procesu roboczego ładuje następnie program obsługi protokołu UDP Process Protocol (PPH) z żądaniem dla tego ListenerChannelId. Funkcja PPH w kolei wywołuje metodę IAdphManager.StartAppDomainProtocolListenerChannel aby uruchomić program obsługi protokołu UDP AppDomain (ADPH).

HostedUDPTransportConfiguration

Informacje są rejestrowane w pliku Web.config w następujący sposób:

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

Specjalna konfiguracja dla tego przykładu

Ten przykład można skompilować i uruchomić tylko w systemie Windows Vista, Windows Server 2008 lub Windows 7. Aby uruchomić przykład, należy najpierw prawidłowo skonfigurować wszystkie składniki. Aby zainstalować przykład, wykonaj następujące kroki.

Aby skonfigurować ten przykład

  1. Zainstaluj ASP.NET 4.0 przy użyciu następującego polecenia.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Skompiluj projekt w systemie Windows Vista. Po kompilacji wykonuje również następujące operacje w fazie po kompilacji:

    • Instaluje powiązanie UDP z witryną "Domyślna witryna sieci Web".

    • Tworzy aplikację wirtualną "ServiceModelSamples", aby wskazywała ścieżkę fizyczną: "%SystemDrive%\inetpub\wwwroot\servicemodelsamples".

    • Włącza również protokół "net.udp" dla tej aplikacji wirtualnej.

  3. Uruchom aplikację interfejsu użytkownika "WasNetActivator.exe". Kliknij kartę Instalator , zaznacz następujące pola wyboru, a następnie kliknij przycisk Zainstaluj , aby je zainstalować:

    • Adapter odbiornika UDP

    • Programy obsługi protokołu UDP

  4. Kliknij kartę Aktywacja aplikacji interfejsu użytkownika "WasNetActivator.exe". Kliknij przycisk Start, aby uruchomić kartę odbiornika. Teraz możesz przystąpić do uruchamiania programu.

    Uwaga

    Po zakończeniu pracy z tym przykładem należy uruchomić Cleanup.bat, aby usunąć powiązanie net.udp z domyślnej witryny sieci Web.

Przykład użycia

Po kompilacji są generowane cztery różne pliki binarne:

  • Client.exe: kod klienta. Plik konfiguracji App.config jest kompilowany w pliku konfiguracji klienta Client.exe.config.

  • UDPActivation.dll: biblioteka zawierająca wszystkie główne implementacje protokołu UDP.

  • Service.dll: kod usługi. Jest to kopiowane do katalogu \bin aplikacji wirtualnej ServiceModelSamples. Plik usługi to Service.svc, a plik konfiguracji to Web.config. Po kompilacji są one kopiowane do następującej lokalizacji: %SystemDrive%\Inetpub\wwwroot\ServiceModelSamples.

  • WasNetActivator: program aktywujący UDP.

  • Upewnij się, że wszystkie wymagane elementy są poprawnie zainstalowane. W poniższych krokach pokazano, jak uruchomić przykład:

  1. Upewnij się, że zostały uruchomione następujące usługi systemu Windows:

    • Usługa aktywacji procesów systemu Windows (WAS).

    • Internet Information Services (IIS): W3SVC.

  2. Następnie uruchom aktywator, WasNetActivator.exe. Na karcie Aktywacja na liście rozwijanej jest wybrany jedyny protokół UDP. Kliknij przycisk Start, aby uruchomić aktywator.

  3. Po uruchomieniu aktywatora można uruchomić kod klienta, uruchamiając Client.exe w oknie polecenia. Poniżej przedstawiono przykładowe dane wyjściowe:

    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.