Delen via


Zelfstudie: Een eenvoudige Windows Communication Foundation-service hosten en uitvoeren

In deze zelfstudie wordt de derde van de vijf taken beschreven die nodig zijn om een eenvoudige WCF-toepassing (Windows Communication Foundation) te maken. Zie Zelfstudie: Aan de slag met Windows Communication Foundation-toepassingen voor een overzicht van de zelfstudies.

De volgende taak voor het maken van een WCF-toepassing is het hosten van een WCF-service in een consoletoepassing. Een WCF-service maakt een of meer eindpunten beschikbaar, die elk een of meer servicebewerkingen beschikbaar maken. Een service-eindpunt geeft de volgende informatie op:

  • Een adres waar u de service kunt vinden.
  • Een binding die de informatie bevat die beschrijft hoe een client moet communiceren met de service.
  • Een contract dat de functionaliteit definieert die de service aan haar klanten biedt.

In deze zelfstudie leert u het volgende:

  • Maak en configureer een console-app-project voor het hosten van een WCF-service.
  • Voeg code toe om de WCF-service te hosten.
  • Werk het configuratiebestand bij.
  • Start de WCF-service en controleer of deze actief is.

Een console-app-project maken en configureren voor het hosten van de service

  1. Een console-app-project maken in Visual Studio:

    1. Selecteer> Project/Oplossing openen in het menu Bestand en blader naar de Oplossing GettingStarted die u eerder hebt gemaakt (GettingStarted.sln). Selecteer Openen.

    2. Selecteer Solution Explorer in het menu Beeld.

    3. Selecteer in het venster Solution Explorer de oplossing GettingStarted (bovenste knooppunt) en selecteer vervolgens Nieuw project toevoegen>in het snelmenu.

    4. Selecteer in het venster Nieuw project toevoegen aan de linkerkant de categorie Windows Desktop onder Visual C# of Visual Basic.

    5. Selecteer de sjabloon Console-app (.NET Framework) en voer GettingStartedHost in voor de naam. Selecteer OK.

  2. Voeg een verwijzing toe in het Project GettingStartedHost aan het Project GettingStartedLib :

    1. Selecteer in het venster Solution Explorer de map Verwijzingen onder het project GettingStartedHost en selecteer vervolgens Verwijzing toevoegen in het snelmenu.

    2. Selecteer Oplossing in het dialoogvenster Verwijzing toevoegen onder Projecten aan de linkerkant van het venster.

    3. Selecteer GettingStartedLib in de middelste sectie van het venster en selecteer vervolgens OK.

      Met deze actie worden de typen die zijn gedefinieerd in het Project GettingStartedLib beschikbaar voor het Project GettingStartedHost .

  3. Voeg een verwijzing toe in het Project GettingStartedHost aan de System.ServiceModel assembly:

    1. Selecteer in het venster Solution Explorer de map Verwijzingen onder het project GettingStartedHost en selecteer vervolgens Verwijzing toevoegen in het snelmenu.

    2. Selecteer Framework in het venster Verwijzing toevoegen onder Assembly's aan de linkerkant van het venster.

    3. Selecteer System.ServiceModel en selecteer vervolgens OK.

    4. Sla de oplossing op door Bestand>opslaan te selecteren.

Code toevoegen om de service te hosten

Als u de service wilt hosten, voegt u code toe om de volgende stappen uit te voeren:

  1. Maak een URI voor het basisadres.
  2. Maak een klasse-exemplaar voor het hosten van de service.
  3. Maak een service-eindpunt.
  4. Schakel metagegevensuitwisseling in.
  5. Open de servicehost om te luisteren naar inkomende berichten.

Breng de volgende wijzigingen aan in de code:

  1. Open het bestand Program.cs of Module1.vb in het Project GettingStartedHost en vervang de bijbehorende code door de volgende code:

    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
    

    Zie de stappen van het servicehostingprogramma voor informatie over de werking van deze code.

  2. Werk de projecteigenschappen bij:

    1. Selecteer in het venster Solution Explorer de map GettingStartedHost en selecteer vervolgens Eigenschappen in het snelmenu.

    2. Selecteer op de eigenschappenpagina GettingStartedHost het tabblad Toepassing :

      • Voor C#-projecten selecteert u GettingStartedHost.Program in de lijst met opstartobjecten .

      • Voor Visual Basic-projecten selecteert u Service.Program in de lijst met opstartobjecten .

    3. Selecteer Alles opslaan in het menu Bestand.

Controleren of de service werkt

  1. Bouw de oplossing en voer vervolgens de GettingStartedHost-consoletoepassing uit vanuit Visual Studio.

    De service moet worden uitgevoerd met beheerdersbevoegdheden. Omdat u Visual Studio hebt geopend met beheerdersbevoegdheden, wordt de toepassing ook uitgevoerd met beheerdersbevoegdheden wanneer u GettingStartedHost uitvoert in Visual Studio. Als alternatief kunt u een nieuwe opdrachtprompt openen als beheerder (selecteer Meer>uitvoeren als beheerder in het snelmenu) en GettingStartedHost.exe erin uitvoeren.

  2. Open een webbrowser en blader naar de pagina van de service op http://localhost:8000/GettingStarted/.

    Notitie

    Voor services zoals deze is de juiste machtiging vereist om HTTP-adressen op de computer te registreren voor luisteren. Beheer istrator-accounts hebben deze machtiging, maar niet-beheerdersaccounts moeten zijn gemachtigd voor HTTP-naamruimten. Zie HTTP en HTTPS configureren voor meer informatie over het configureren van naamruimtereserveringen.

Stappen voor het hostingprogramma van de service

De stappen in de code die u hebt toegevoegd om de service te hosten, worden als volgt beschreven:

  • Stap 1: Maak een exemplaar van de Uri klasse voor het basisadres van de service. Een URL die een basisadres bevat, heeft een optionele URI die een service identificeert. Het basisadres is als volgt opgemaakt: <transport>://<machine-name or domain><:optional port #>/<optional URI segment>. Het basisadres voor de rekenmachineservice maakt gebruik van het HTTP-transport, localhost, poort 8000 en het URI-segment GettingStarted.

  • Stap 2: Maak een instantie van de ServiceHost klasse die u gebruikt om de service te hosten. De constructor heeft twee parameters: het type klasse dat het servicecontract implementeert en het basisadres van de service.

  • Stap 3: Een exemplaar maken ServiceEndpoint . Een service-eindpunt bestaat uit een adres, een binding en een servicecontract. De ServiceEndpoint constructor bestaat uit het interfacetype servicecontract, een binding en een adres. Het servicecontract is ICalculator, dat u hebt gedefinieerd en geïmplementeerd in het servicetype. De binding voor dit voorbeeld is WSHttpBinding, een ingebouwde binding en maakt verbinding met eindpunten die voldoen aan de WS-* specificaties. Zie het overzicht van WCF-bindingen voor meer informatie over WCF-bindingen. U voegt het adres toe aan het basisadres om het eindpunt te identificeren. De code geeft het adres op als CalculatorService en het volledig gekwalificeerde adres voor het eindpunt als http://localhost:8000/GettingStarted/CalculatorService.

    Belangrijk

    Voor .NET Framework versie 4 en hoger is het toevoegen van een service-eindpunt optioneel. Als u voor deze versies uw code of configuratie niet toevoegt, voegt WCF één standaardeindpunt toe voor elke combinatie van basisadres en contract dat door de service wordt geïmplementeerd. Zie Een eindpuntadres opgeven voor meer informatie over standaardeindpunten. Zie Vereenvoudigde configuratie en vereenvoudigde configuratie voor WCF-services voor meer informatie over standaardeindpunten, bindingen en gedrag.

  • Stap 4: Metagegevensuitwisseling inschakelen. Clients gebruiken metagegevensuitwisseling om proxy's te genereren voor het aanroepen van de servicebewerkingen. Als u metagegevensuitwisseling wilt inschakelen, maakt u een ServiceMetadataBehavior exemplaar, stelt u de eigenschap truein HttpGetEnabled op en voegt u het ServiceMetadataBehavior object toe aan de Behaviors verzameling van het ServiceHost exemplaar.

  • Stap 5: Open ServiceHost om te luisteren naar binnenkomende berichten. De toepassing wacht totdat u op Enter drukt. Nadat de toepassing is geïnstitueerd ServiceHost, wordt een try/catch-blok uitgevoerd. Zie Close and Abort gebruiken om WCF-clientresources vrij te geven voor meer informatie over het veilig vangen van uitzonderingen die zijn gegenereerd ServiceHostdoor.

Belangrijk

Wanneer u een WCF-servicebibliotheek toevoegt, host Visual Studio deze voor u als u fouten opssport door een servicehost te starten. Als u conflicten wilt voorkomen, kunt u voorkomen dat Visual Studio als host fungeert voor de WCF-servicebibliotheek.

  1. Selecteer het Project GettingStartedLib in Solution Explorer en kies Eigenschappen in het snelmenu.
  2. Selecteer WCF-opties en schakel Start WCF-servicehost uit bij het opsporen van fouten in een ander project in dezelfde oplossing.

Volgende stappen

In deze zelfstudie heeft u het volgende geleerd:

  • Maak en configureer een console-app-project voor het hosten van een WCF-service.
  • Voeg code toe om de WCF-service te hosten.
  • Werk het configuratiebestand bij.
  • Start de WCF-service en controleer of deze actief is.

Ga naar de volgende zelfstudie voor meer informatie over het maken van een WCF-client.