Udostępnij za pośrednictwem


Samouczek: hostowanie i uruchamianie podstawowej usługi Windows Communication Foundation

W tym samouczku opisano trzeci z pięciu zadań wymaganych do utworzenia podstawowej aplikacji windows Communication Foundation (WCF). Aby zapoznać się z omówieniem samouczków, zobacz Samouczek: rozpoczynanie pracy z aplikacjami Windows Communication Foundation.

Następnym zadaniem tworzenia aplikacji WCF jest hostowanie usługi WCF w aplikacji konsolowej. Usługa WCF uwidacznia co najmniej jeden punkt końcowy, z których każdy uwidacznia co najmniej jedną operację usługi. Punkt końcowy usługi określa następujące informacje:

  • Adres, w którym można znaleźć usługę.
  • Powiązanie zawierające informacje opisujące, jak klient musi komunikować się z usługą.
  • Kontrakt definiujący funkcjonalność dostarczaną przez usługę klientom.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Utwórz i skonfiguruj projekt aplikacji konsolowej na potrzeby hostowania usługi WCF.
  • Dodaj kod do hostowania usługi WCF.
  • Zaktualizuj plik konfiguracji.
  • Uruchom usługę WCF i sprawdź, czy jest uruchomiona.

Tworzenie i konfigurowanie projektu aplikacji konsolowej na potrzeby hostowania usługi

  1. Utwórz projekt aplikacji konsolowej w programie Visual Studio:

    1. W menu Plik wybierz pozycję Otwórz>projekt/rozwiązanie i przejdź do utworzonego wcześniej rozwiązania GettingStarted (GettingStarted.sln). Wybierz Otwórz.

    2. Z menu Widok wybierz pozycję Eksplorator rozwiązań.

    3. W oknie Eksplorator rozwiązań wybierz rozwiązanie GettingStarted (górny węzeł), a następnie wybierz pozycję Dodaj>nowy projekt z menu skrótów.

    4. W oknie Dodawanie nowego projektu po lewej stronie wybierz kategorię Pulpit systemu Windows w obszarze Visual C# lub Visual Basic.

    5. Wybierz szablon Aplikacja konsolowa (.NET Framework) i wprowadź ciąg GettingStartedHost jako nazwę. Wybierz przycisk OK.

  2. Dodaj odwołanie w projekcie GettingStartedHost do projektu GettingStartedLib :

    1. W oknie Eksplorator rozwiązań wybierz folder References w projekcie GettingStartedHost, a następnie wybierz pozycję Dodaj odwołanie z menu skrótów.

    2. W oknie dialogowym Dodawanie odwołania w obszarze Projekty po lewej stronie okna wybierz pozycję Rozwiązanie.

    3. Wybierz pozycję GettingStartedLib w środkowej sekcji okna, a następnie wybierz przycisk OK.

      Ta akcja sprawia, że typy zdefiniowane w projekcie GettingStartedLib są dostępne dla projektu GettingStartedHost .

  3. Dodaj odwołanie w projekcie GettingStartedHost do System.ServiceModel zestawu:

    1. W oknie Eksplorator rozwiązań wybierz folder References w projekcie GettingStartedHost, a następnie wybierz pozycję Dodaj odwołanie z menu skrótów.

    2. W oknie Dodawanie odwołania w obszarze Zestawy po lewej stronie okna wybierz pozycję Struktura.

    3. Wybierz pozycję System.ServiceModel, a następnie wybierz przycisk OK.

    4. Zapisz rozwiązanie, wybierając pozycję Plik>Zapisz wszystko.

Dodawanie kodu do hostowania usługi

Aby hostować usługę, należy dodać kod, aby wykonać następujące czynności:

  1. Utwórz identyfikator URI dla adresu podstawowego.
  2. Utwórz wystąpienie klasy do hostowania usługi.
  3. Utwórz punkt końcowy usługi.
  4. Włącz wymianę metadanych.
  5. Otwórz hosta usługi, aby nasłuchiwać przychodzących komunikatów.

Wprowadź następujące zmiany w kodzie:

  1. Otwórz plik Program.cs lub Module1.vb w projekcie GettingStartedHost i zastąp jego kod następującym kodem:

    using System;
    using System.ServiceModel;
    using System.ServiceModel.Description;
    using GettingStartedLib;
    
    namespace GettingStartedHost
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Step 1: Create a URI to serve as the base address.
                Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/");
    
                // Step 2: Create a ServiceHost instance.
                ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
    
                try
                {
                    // Step 3: Add a service endpoint.
                    selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");
    
                    // Step 4: Enable metadata exchange.
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;
                    selfHost.Description.Behaviors.Add(smb);
    
                    // Step 5: Start the service.
                    selfHost.Open();
                    Console.WriteLine("The service is ready.");
    
                    // Close the ServiceHost to stop the service.
                    Console.WriteLine("Press <Enter> to terminate the service.");
                    Console.WriteLine();
                    Console.ReadLine();
                    selfHost.Close();
                }
                catch (CommunicationException ce)
                {
                    Console.WriteLine("An exception occurred: {0}", ce.Message);
                    selfHost.Abort();
                }
            }
        }
    }
    
    Imports System.ServiceModel
    Imports System.ServiceModel.Description
    Imports GettingStartedLib.GettingStartedLib
    
    Module Service
    
        Class Program
            Shared Sub Main()
                ' Step 1: Create a URI to serve as the base address.
                Dim baseAddress As New Uri("http://localhost:8000/GettingStarted/")
    
                ' Step 2: Create a ServiceHost instance.
                Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress)
               Try
    
                    ' Step 3: Add a service endpoint.
                    selfHost.AddServiceEndpoint( _
                        GetType(ICalculator), _
                        New WSHttpBinding(), _
                        "CalculatorService")
    
                    ' Step 4: Enable metadata exchange.
                    Dim smb As New ServiceMetadataBehavior()
                    smb.HttpGetEnabled = True
                    selfHost.Description.Behaviors.Add(smb)
    
                    ' Step 5: Start the service.
                    selfHost.Open()
                    Console.WriteLine("The service is ready.")
    
                    ' Close the ServiceHost to stop the service.
                    Console.WriteLine("Press <Enter> to terminate the service.")
                    Console.WriteLine()
                    Console.ReadLine()
                    selfHost.Close()
    
                Catch ce As CommunicationException
                    Console.WriteLine("An exception occurred: {0}", ce.Message)
                    selfHost.Abort()
                End Try
            End Sub
        End Class
    
    End Module
    

    Aby uzyskać informacje o sposobie działania tego kodu, zobacz Service hosting program steps (Kroki programu hostingu usługi).

  2. Zaktualizuj właściwości projektu:

    1. W oknie Eksplorator rozwiązań wybierz folder GettingStartedHost, a następnie wybierz pozycję Właściwości z menu skrótów.

    2. Na stronie Właściwości GettingStartedHost wybierz kartę Aplikacja:

      • W przypadku projektów języka C# wybierz pozycję GettingStartedHost.Program z listy obiektów startowych.

      • W przypadku projektów Visual Basic wybierz pozycję Service.Program z listy obiektów startowych.

    3. W menu Plik wybierz pozycję Zapisz wszystko.

Sprawdź, czy usługa działa

  1. Skompiluj rozwiązanie, a następnie uruchom aplikację konsolową GettingStartedHost z poziomu programu Visual Studio.

    Usługa musi być uruchamiana z uprawnieniami administratora. Ponieważ program Visual Studio został otwarty z uprawnieniami administratora, po uruchomieniu polecenia GettingStartedHost w programie Visual Studio aplikacja jest również uruchamiana z uprawnieniami administratora. Alternatywnie możesz otworzyć nowy wiersz polecenia jako administrator (wybierz pozycję Więcej>Uruchom jako administrator z menu skrótów) i uruchom GettingStartedHost.exe w nim.

  2. Otwórz przeglądarkę internetową i przejdź do strony usługi pod adresem http://localhost:8000/GettingStarted/.

    Uwaga

    Usługi takie jak ten wymagają odpowiedniego uprawnienia do rejestrowania adresów HTTP na maszynie do nasłuchiwania. Administracja istrator konta mają to uprawnienie, ale konta inne niż administrator muszą mieć uprawnienia dla przestrzeni nazw HTTP. Aby uzyskać więcej informacji na temat konfigurowania rezerwacji przestrzeni nazw, zobacz Konfigurowanie protokołów HTTP i HTTPS.

Kroki programu hostingu usług

Kroki w kodzie dodanym do hostowania usługi są opisane w następujący sposób:

  • Krok 1. Utworzenie wystąpienia Uri klasy w celu przechowywania podstawowego adresu usługi. Adres URL zawierający adres podstawowy ma opcjonalny identyfikator URI identyfikujący usługę. Adres podstawowy jest sformatowany w następujący sposób: <transport>://<machine-name or domain><:optional port #>/<optional URI segment>. Podstawowy adres usługi kalkulatora używa transportu HTTP, localhost, portu 8000 i segmentu identyfikatora URI GettingStarted.

  • Krok 2. Utwórz wystąpienie ServiceHost klasy , które jest używane do hostowania usługi. Konstruktor przyjmuje dwa parametry: typ klasy, która implementuje kontrakt usługi i podstawowy adres usługi.

  • Krok 3. Tworzenie ServiceEndpoint wystąpienia. Punkt końcowy usługi składa się z adresu, powiązania i kontraktu usługi. Konstruktor ServiceEndpoint składa się z typu interfejsu kontraktu usługi, powiązania i adresu. Kontrakt usługi to ICalculator, który został zdefiniowany i zaimplementowany w typie usługi. Powiązanie dla tego przykładu to WSHttpBinding, który jest wbudowanym powiązaniem i łączy się z punktami końcowymi zgodnymi ze specyfikacjami usług WS-*. Aby uzyskać więcej informacji na temat powiązań WCF, zobacz Omówienie powiązań WCF. Adres jest dołączany do adresu podstawowego w celu zidentyfikowania punktu końcowego. Kod określa adres jako CalculatorService i w pełni kwalifikowany adres punktu końcowego jako http://localhost:8000/GettingStarted/CalculatorService.

    Ważne

    W przypadku programu .NET Framework w wersji 4 lub nowszej dodanie punktu końcowego usługi jest opcjonalne. W przypadku tych wersji, jeśli nie dodasz kodu lub konfiguracji, program WCF dodaje jeden domyślny punkt końcowy dla każdej kombinacji adresu podstawowego i kontraktu zaimplementowanego przez usługę. Aby uzyskać więcej informacji na temat domyślnych punktów końcowych, zobacz Określanie adresu punktu końcowego. Aby uzyskać więcej informacji na temat domyślnych punktów końcowych, powiązań i zachowań, zobacz Uproszczona konfiguracja i Uproszczona konfiguracja dla usług WCF.

  • Krok 4. Włączanie wymiany metadanych. Klienci używają wymiany metadanych do generowania serwerów proxy do wywoływania operacji usługi. Aby włączyć wymianę ServiceMetadataBehavior metadanych, utwórz wystąpienie, ustaw jego HttpGetEnabled właściwość na true, a następnie dodaj ServiceMetadataBehavior obiekt do Behaviors kolekcji ServiceHost wystąpienia.

  • Krok 5. Otwórz, ServiceHost aby nasłuchiwać przychodzących komunikatów. Aplikacja czeka na naciśnięcie klawisza Enter. Po utworzeniu wystąpienia ServiceHostaplikacji program wykonuje blok try/catch. Aby uzyskać więcej informacji na temat bezpiecznego przechwytywania wyjątków zgłaszanych przez ServiceHostusługę , zobacz Use Close and Abort to release WCF client resources (Używanie zamykania i przerwania w celu wydania zasobów klienta programu WCF).

Ważne

Po dodaniu biblioteki usługi WCF program Visual Studio hostuje ją w przypadku debugowania go przez uruchomienie hosta usługi. Aby uniknąć konfliktów, możesz uniemożliwić programowi Visual Studio hostowanie biblioteki usług WCF.

  1. Wybierz projekt GettingStartedLib w Eksplorator rozwiązań i wybierz pozycję Właściwości z menu skrótów.
  2. Wybierz pozycję Opcje programu WCF i usuń zaznaczenie pola wyboru Uruchom hosta usługi WCF podczas debugowania innego projektu w tym samym rozwiązaniu.

Następne kroki

W tym samouczku zawarto informacje na temat wykonywania następujących czynności:

  • Utwórz i skonfiguruj projekt aplikacji konsolowej na potrzeby hostowania usługi WCF.
  • Dodaj kod do hostowania usługi WCF.
  • Zaktualizuj plik konfiguracji.
  • Uruchom usługę WCF i sprawdź, czy jest uruchomiona.

Przejdź do następnego samouczka, aby dowiedzieć się, jak utworzyć klienta WCF.