Dela via


Självstudie: Hantera och köra en grundläggande Windows Communication Foundation-tjänst

I den här självstudien beskrivs den tredje av fem uppgifter som krävs för att skapa ett grundläggande WCF-program (Windows Communication Foundation). En översikt över självstudierna finns i Självstudie: Kom igång med Windows Communication Foundation-program.

Nästa uppgift för att skapa ett WCF-program är att vara värd för en WCF-tjänst i ett konsolprogram. En WCF-tjänst exponerar en eller flera slutpunkter, som var och en exponerar en eller flera tjänståtgärder. En tjänstslutpunkt anger följande information:

  • En adress där du kan hitta tjänsten.
  • En bindning som innehåller den information som beskriver hur en klient måste kommunicera med tjänsten.
  • Ett kontrakt som definierar de funktioner som tjänsten tillhandahåller sina klienter.

I den här självstudien lär du dig att:

  • Skapa och konfigurera ett konsolappprojekt för att vara värd för en WCF-tjänst.
  • Lägg till kod som värd för WCF-tjänsten.
  • Uppdatera konfigurationsfilen.
  • Starta WCF-tjänsten och kontrollera att den körs.

Skapa och konfigurera ett konsolappprojekt för att vara värd för tjänsten

  1. Skapa ett konsolappprojekt i Visual Studio:

    1. På menyn Arkiv väljer du Öppna>projekt/lösning och bläddrar till lösningen GettingStarted som du skapade tidigare (GettingStarted.sln). Välj Öppna.

    2. På menyn Visa väljer du Solution Explorer.

    3. I fönstret Solution Explorer väljer du lösningen GettingStarted (översta noden) och väljer sedan Lägg till>nytt projekt på snabbmenyn.

    4. I fönstret Lägg till nytt projekt till vänster väljer du kategorin Windows Desktop under Visual C# eller Visual Basic.

    5. Välj mallen Konsolapp (.NET Framework) och ange GettingStartedHost som Namn. Välj OK.

  2. Lägg till en referens i projektet GettingStartedHost i Projektet GettingStartedLib :

    1. I fönstret Solution Explorer väljer du mappen Referenser under projektet GettingStartedHost och väljer sedan Lägg till referens på snabbmenyn.

    2. I dialogrutan Lägg till referens går du till Projekt till vänster i fönstret och väljer Lösning.

    3. Välj GettingStartedLib i mitten av fönstret och välj sedan OK.

      Den här åtgärden gör de typer som definierats i Projektet GettingStartedLib tillgängliga för Projektet GettingStartedHost .

  3. Lägg till en referens i projektet GettingStartedHost i System.ServiceModel sammansättningen:

    1. I fönstret Solution Explorer väljer du mappen Referenser under projektet GettingStartedHost och väljer sedan Lägg till referens på snabbmenyn.

    2. I fönstret Lägg till referens går du till Sammansättningar till vänster i fönstret och väljer Ramverk.

    3. Välj System.ServiceModel och välj sedan OK.

    4. Spara lösningen genom att välja Spara>alla.

Lägg till kod som värd för tjänsten

Som värd för tjänsten lägger du till kod för att utföra följande steg:

  1. Skapa en URI för basadressen.
  2. Skapa en klassinstans för att vara värd för tjänsten.
  3. Skapa en tjänstslutpunkt.
  4. Aktivera metadatautbyte.
  5. Öppna tjänstvärden för att lyssna efter inkommande meddelanden.

Gör följande ändringar i koden:

  1. Öppna filen Program.cs eller Module1.vb i Projektet GettingStartedHost och ersätt koden med följande kod:

    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
    

    Information om hur den här koden fungerar finns i Steg för tjänstvärdprogram.

  2. Uppdatera projektegenskaperna:

    1. I fönstret Solution Explorer väljer du mappen GettingStartedHost och väljer sedan Egenskaper på snabbmenyn.

    2. På sidan Egenskaper för GettingStartedHost väljer du fliken Program :

      • För C#-projekt väljer du GettingStartedHost.Program i listan Startobjekt .

      • För Visual Basic-projekt väljer du Service.Program i listan Startobjekt .

    3. På Arkiv-menyn väljer du Spara alla.

Kontrollera att tjänsten fungerar

  1. Skapa lösningen och kör sedan konsolprogrammet GettingStartedHost inifrån Visual Studio.

    Tjänsten måste köras med administratörsbehörighet. Eftersom du har öppnat Visual Studio med administratörsbehörighet körs även programmet med administratörsbehörighet när du kör GettingStartedHost i Visual Studio. Alternativt kan du öppna en ny kommandotolk som administratör (välj Mer>kör som administratör på snabbmenyn) och köra GettingStartedHost.exe i den.

  2. Öppna en webbläsare och bläddra till tjänstens sida på http://localhost:8000/GettingStarted/.

    Kommentar

    Tjänster som den här kräver rätt behörighet för att registrera HTTP-adresser på datorn för att lyssna. Administratörskonton har den här behörigheten, men icke-administratörskonton måste beviljas behörighet för HTTP-namnområden. Mer information om hur du konfigurerar namnområdesreservationer finns i Konfigurera HTTP och HTTPS.

Steg för tjänstvärdprogram

Stegen i koden som du lade till som värd för tjänsten beskrivs på följande sätt:

  • Steg 1: Skapa en instans av Uri klassen för att lagra tjänstens basadress. En URL som innehåller en basadress har en valfri URI som identifierar en tjänst. Basadressen formateras på följande sätt: <transport>://<machine-name or domain><:optional port #>/<optional URI segment>. Basadressen för kalkylatortjänsten använder HTTP-transport, localhost, port 8000 och URI-segmentet GettingStarted.

  • Steg 2: Skapa en instans av ServiceHost klassen som du använder för att vara värd för tjänsten. Konstruktorn tar två parametrar: typen av klass som implementerar tjänstkontraktet och tjänstens basadress.

  • Steg 3: Skapa en ServiceEndpoint instans. En tjänstslutpunkt består av en adress, en bindning och ett tjänstkontrakt. Konstruktorn ServiceEndpoint består av gränssnittstypen för tjänstkontraktet, en bindning och en adress. Tjänstkontraktet är ICalculator, som du definierade och implementerade i tjänsttypen. Bindningen för det här exemplet är WSHttpBinding, som är en inbyggd bindning och ansluter till slutpunkter som överensstämmer med WS-*-specifikationerna. Mer information om WCF-bindningar finns i Översikt över WCF-bindningar. Du lägger till adressen till basadressen för att identifiera slutpunkten. Koden anger adressen som CalculatorService och den fullständigt kvalificerade adressen för slutpunkten som http://localhost:8000/GettingStarted/CalculatorService.

    Viktigt!

    För .NET Framework version 4 och senare är det valfritt att lägga till en tjänstslutpunkt. Om du inte lägger till din kod eller konfiguration för dessa versioner lägger WCF till en standardslutpunkt för varje kombination av basadress och kontrakt som implementeras av tjänsten. Mer information om standardslutpunkter finns i Ange en slutpunktsadress. Mer information om standardslutpunkter, bindningar och beteenden finns i Förenklad konfiguration och förenklad konfiguration för WCF-tjänster.

  • Steg 4: Aktivera metadatautbyte. Klienter använder metadatautbyte för att generera proxyservrar för att anropa tjänståtgärderna. Om du vill aktivera metadatautbyte skapar du en ServiceMetadataBehavior instans, anger dess HttpGetEnabled egenskap till trueoch lägger till ServiceMetadataBehavior objektet i Behaviors instanssamlingen ServiceHost .

  • Steg 5: Öppna ServiceHost för att lyssna efter inkommande meddelanden. Programmet väntar på att du ska trycka på Retur. När programmet har instansierar ServiceHostkörs ett try/catch-block. Mer information om hur du på ett säkert sätt fångar undantag som genereras av ServiceHostfinns i Använda Stäng och Avbryt för att frigöra WCF-klientresurser.

Viktigt!

När du lägger till ett WCF-tjänstbibliotek är Visual Studio värd för det om du felsöker det genom att starta en tjänstvärd. För att undvika konflikter kan du förhindra att Visual Studio är värd för WCF-tjänstbiblioteket.

  1. Välj projektet GettingStartedLib i Solution Explorer och välj Egenskaper på snabbmenyn.
  2. Välj WCF-alternativ och avmarkera Starta WCF-tjänstvärden när du felsöker ett annat projekt i samma lösning.

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Skapa och konfigurera ett konsolappprojekt för att vara värd för en WCF-tjänst.
  • Lägg till kod som värd för WCF-tjänsten.
  • Uppdatera konfigurationsfilen.
  • Starta WCF-tjänsten och kontrollera att den körs.

Gå vidare till nästa självstudie för att lära dig hur du skapar en WCF-klient.