Sdílet prostřednictvím


Kurz: Hostování a spuštění základní služby Windows Communication Foundation

Tento kurz popisuje třetí z pěti úloh potřebných k vytvoření základní aplikace WCF (Windows Communication Foundation). Přehled kurzů najdete v tématu Kurz: Začínáme s aplikacemi Windows Communication Foundation.

Další úlohou vytvoření aplikace WCF je hostování služby WCF v konzolové aplikaci. Služba WCF zveřejňuje jeden nebo více koncových bodů, z nichž každá zveřejňuje jednu nebo více operací služby. Koncový bod služby určuje následující informace:

  • Adresa, kde najdete službu.
  • Vazba obsahující informace popisující způsob komunikace klienta se službou.
  • Kontrakt, který definuje funkce, které služba poskytuje svým klientům.

V tomto kurzu se naučíte:

  • Vytvořte a nakonfigurujte projekt konzolové aplikace pro hostování služby WCF.
  • Přidejte kód pro hostování služby WCF.
  • Aktualizujte konfigurační soubor.
  • Spusťte službu WCF a ověřte, že je spuštěná.

Vytvoření a konfigurace projektu konzolové aplikace pro hostování služby

  1. Vytvoření projektu konzolové aplikace v sadě Visual Studio:

    1. V nabídce Soubor vyberte Otevřít>projekt nebo řešení a přejděte k dříve vytvořenému řešení GettingStarted (GettingStarted.sln). Vyberte Otevřít.

    2. V nabídce Zobrazení vyberte Průzkumník řešení.

    3. V okně Průzkumník řešení vyberte řešení GettingStarted (horní uzel) a pak v místní nabídce vyberte Přidat>nový projekt.

    4. V okně Přidat nový projekt na levé straně vyberte kategorii Plocha Systému Windows v části Visual C# nebo Visual Basic.

    5. Vyberte šablonu konzolové aplikace (.NET Framework) a jako název zadejte GettingStartedHost. Vyberte OK.

  2. Přidejte odkaz do projektu GettingStartedHost do projektu GettingStartedLib :

    1. V okně Průzkumník řešení vyberte složku Reference v projektu GettingStartedHost a pak v místní nabídce vyberte Přidat odkaz.

    2. V dialogovém okně Přidat odkaz v části Projekty na levé straně okna vyberte Řešení.

    3. V prostřední části okna vyberte GettingStartedLib a pak vyberte OK.

      Tato akce zpřístupní typy definované v projektu GettingStartedLib pro projekt GettingStartedHost .

  3. Do sestavení přidejte odkaz v projektu System.ServiceModel GettingStartedHost:

    1. V okně Průzkumník řešení vyberte složku Reference v projektu GettingStartedHost a pak v místní nabídce vyberte Přidat odkaz.

    2. V okně Přidat odkaz v části Sestavení na levé straně okna vyberte Framework.

    3. Vyberte System.ServiceModel a pak vyberte OK.

    4. Řešení uložte výběrem možnosti Uložit>vše.

Přidání kódu pro hostování služby

Pokud chcete službu hostovat, přidejte kód, který provede následující kroky:

  1. Vytvořte identifikátor URI pro základní adresu.
  2. Vytvořte instanci třídy pro hostování služby.
  3. Vytvořte koncový bod služby.
  4. Povolte výměnu metadat.
  5. Otevřete hostitele služby a naslouchejte příchozím zprávům.

Proveďte následující změny kódu:

  1. Otevřete soubor Program.cs nebo Module1.vb v projektu GettingStartedHost a nahraďte jeho kód následujícím kódem:

    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
    

    Informace o tom, jak tento kód funguje, najdete v části Kroky programu hostování služby.

  2. Aktualizujte vlastnosti projektu:

    1. V okně Průzkumník řešení vyberte složku GettingStartedHost a pak v místní nabídce vyberte Vlastnosti.

    2. Na stránce Vlastností GettingStartedHost vyberte kartu Aplikace:

      • V případě projektů jazyka C# vyberte v seznamu objektů po spuštění položku GettingStartedHost.Program.

      • V případě projektů jazyka Visual Basic vyberte v seznamu objektů po spuštění možnost Service.Program.

    3. V nabídce Soubor vyberte Uložit vše.

Ověřte, že služba funguje.

  1. Sestavte řešení a pak spusťte konzolovou aplikaci GettingStartedHost v sadě Visual Studio.

    Služba musí být spuštěná s oprávněními správce. Vzhledem k tomu, že jste otevřeli Visual Studio s oprávněními správce, spustí se při spuštění gettingStartedHost v sadě Visual Studio i aplikace s oprávněními správce. Jako alternativu můžete otevřít nový příkazový řádek jako správce (v místní nabídce vyberte Další>spuštění jako správce ) a spustit GettingStartedHost.exe v něm.

  2. Otevřete webový prohlížeč a přejděte na stránku služby na adrese http://localhost:8000/GettingStarted/.

    Poznámka:

    Služby, jako je tato, vyžadují správné oprávnění k registraci adres HTTP na počítači pro naslouchání. Správa istratorové účty mají toto oprávnění, ale účty bez oprávnění správce musí mít udělená oprávnění pro obory názvů HTTP. Další informace o konfiguraci rezervací oboru názvů najdete v tématu Konfigurace HTTP a HTTPS.

Kroky programu hostování služeb

Kroky v kódu, který jste přidali k hostování služby, jsou popsány takto:

  • Krok 1: Vytvořte instanci Uri třídy, která bude obsahovat základní adresu služby. Adresa URL, která obsahuje základní adresu, má volitelný identifikátor URI, který identifikuje službu. Základní adresa je formátována takto: <transport>://<machine-name or domain><:optional port #>/<optional URI segment>. Základní adresa služby kalkulačky používá přenos HTTP, localhost, port 8000 a segment identifikátoru URI GettingStarted.

  • Krok 2: Vytvořte instanci ServiceHost třídy, kterou použijete k hostování služby. Konstruktor má dva parametry: typ třídy, která implementuje kontrakt služby a základní adresu služby.

  • Krok 3: Vytvoření ServiceEndpoint instance Koncový bod služby se skládá z adresy, vazby a kontraktu služby. Konstruktor ServiceEndpoint se skládá z typu rozhraní kontraktu služby, vazby a adresy. Kontrakt služby je ICalculator, který jste definovali a implementovali v typu služby. Vazba pro tuto ukázku je , což je WSHttpBindingintegrovaná vazba a připojuje se ke koncovým bodům, které odpovídají specifikacím WS-*. Další informace o vazbách WCF naleznete v tématu Přehled vazeb WCF. Adresu připojíte k základní adrese a identifikujete koncový bod. Kód určuje adresu jako CalculatorService a plně kvalifikovanou adresu koncového bodu jako http://localhost:8000/GettingStarted/CalculatorService.

    Důležité

    Pro rozhraní .NET Framework verze 4 a novější je přidání koncového bodu služby volitelné. Pokud pro tyto verze nepřidáte kód nebo konfiguraci, WCF přidá jeden výchozí koncový bod pro každou kombinaci základní adresy a kontraktu implementované službou. Další informace o výchozích koncových bodech najdete v tématu Zadání adresy koncového bodu. Další informace o výchozích koncových bodech, vazbách a chování najdete v tématu Zjednodušená konfigurace a zjednodušená konfigurace pro služby WCF.

  • Krok 4: Povolení výměny metadat Klienti používají výměnu metadat k vygenerování proxy pro volání operací služby. Chcete-li povolit výměnu metadat, vytvořte ServiceMetadataBehavior instanci, nastavte její HttpGetEnabled vlastnost na truea přidejte ServiceMetadataBehavior objekt do Behaviors kolekce ServiceHost instance.

  • Krok 5: Otevřete ServiceHost , abyste naslouchali příchozím zprávům. Aplikace čeká, až stisknete Enter. Po vytvoření instance ServiceHostaplikace se spustí blok try/catch. Další informace o bezpečném zachytávání výjimek vyvolaných ServiceHostpomocí funkce Zavřít a Přerušit k uvolnění prostředků klienta WCF.

Důležité

Když přidáte knihovnu služby WCF, Visual Studio ji hostuje za vás, pokud ji ladíte spuštěním hostitele služby. Abyste se vyhnuli konfliktům, můžete sadě Visual Studio zabránit v hostování knihovny služeb WCF.

  1. V Průzkumník řešení vyberte projekt GettingStartedLib a v místní nabídce zvolte Vlastnosti.
  2. Vyberte Možnosti WCF a zrušte zaškrtnutí políčka Spustit hostitele služby WCF při ladění jiného projektu ve stejném řešení.

Další kroky

V tomto kurzu jste se naučili, jak:

  • Vytvořte a nakonfigurujte projekt konzolové aplikace pro hostování služby WCF.
  • Přidejte kód pro hostování služby WCF.
  • Aktualizujte konfigurační soubor.
  • Spusťte službu WCF a ověřte, že je spuštěná.

V dalším kurzu se dozvíte, jak vytvořit klienta WCF.