Compartilhar via


Tutorial: Como hospedar e executar um serviço básico do Windows Communication Foundation

Este tutorial descreve a terceira de cinco tarefas necessárias para criar um aplicativo básico do Windows Communication Foundation (WCF). Para obter uma visão geral dos tutoriais, consulte Tutorial: Introdução aos aplicativos do Windows Communication Foundation.

A próxima tarefa para criar um aplicativo WCF é hospedar um serviço WCF em um aplicativo de console. Um serviço WCF expõe um ou mais pontos de extremidade, sendo que cada um deles expõe uma ou mais operações de serviço. Um ponto de extremidade de serviço especifica as seguintes informações:

  • Um endereço onde você pode encontrar o serviço.
  • Uma associação que contém as informações que descrevem como um cliente deve se comunicar com o serviço.
  • Um contrato que define a funcionalidade que o serviço fornece aos seus clientes.

Neste tutorial, você aprenderá a:

  • Crie e configure um projeto de aplicativo de console para hospedar um serviço WCF.
  • Adicione código para hospedar o serviço WCF.
  • Atualize o arquivo de configuração.
  • Inicie o serviço WCF e verifique sua execução.

Crie e configure um projeto de aplicativo de console para hospedar o serviço

  1. Crie um projeto de aplicativo de console no Visual Studio:

    1. No menu Arquivo, selecione Abrir>Projeto/Solução e navegue até a solução GettingStarted que você criou anteriormente (GettingStarted.sln). Selecione Abrir.

    2. No menu Exibir, clique em Gerenciador de Soluções.

    3. Na janela Gerenciador de Soluções, selecione a solução GettingStarted (nó superior) e, em seguida, selecione Adicionar>Novo Projeto no menu de atalho.

    4. Na janela Adicionar Novo Projeto, no lado esquerdo, selecione a categoria Área de trabalho do Windows em C# do Visual ou Visual Basic.

    5. Selecione o modelo de Aplicativo de Console (.NET Framework) e insira GettingStartedHost para o Nome. Selecione OK.

  2. Adicione uma referência no projeto GettingStartedHost ao projeto GettingStartedLib:

    1. Na janela Gerenciador de Soluções, selecione a pasta Referências no projeto GettingStartedHost e selecione Adicionar Referência no menu de atalho.

    2. Na caixa de diálogo Adicionar Referência, em Projetos no lado esquerdo da janela, selecione Solução.

    3. Selecione GettingStartedLib na seção central da janela e selecione OK.

      Essa ação torna os tipos definidos no projeto GettingStartedLib disponíveis para o projeto GettingStartedHost.

  3. Adicione uma referência no projeto GettingStartedHost ao assembly System.ServiceModel:

    1. Na janela Gerenciador de Soluções, selecione a pasta Referências no projeto GettingStartedHost e selecione Adicionar Referência no menu de atalho.

    2. Na janela Adicionar Referência, em Assemblies no lado esquerdo da janela, selecione Framework.

    3. Selecione System.ServiceModel e selecione OK.

    4. Salve a solução selecionando Arquivo>Salvar Tudo.

Adicione código para hospedar o serviço

Para hospedar o serviço, adicione código para executar as seguintes etapas:

  1. Crie um URI para o endereço básico.
  2. Crie uma instância de classe para hospedar o serviço.
  3. Crie um ponto de extremidade de serviço.
  4. Ative a troca de metadados.
  5. Abra o host de serviço para escutar as mensagens de entrada.

Faça as alterações a seguir ao código:

  1. Abra o arquivo Program.cs ou Module1.vb no projeto GettingStartedHost e substitua seu código pelo seguinte código:

    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
    

    Para obter informações sobre como esse código funciona, consulte Etapas do programa de hospedagem de serviço.

  2. Atualize as propriedades do projeto:

    1. Na janela Gerenciador de Soluções, selecione a pasta GettingStartedHost e selecione Propriedades no menu de atalho.

    2. Na página de propriedades do GettingStartedHost, selecione a guia Aplicativo:

      • Para projetos em C#, selecione GettingStartedHost.Program na lista de Objetos de inicialização.

      • Para projetos do Visual Basic, selecione Service.Program na lista de Objetos de inicialização.

    3. No menu Arquivo, selecione Salvar Tudo.

Verifique se o serviço está funcionando

  1. Crie a solução e execute o aplicativo de console GettingStartedHost de dentro do Visual Studio.

    O serviço deve ser executado com privilégios de administrador. Como você abriu o Visual Studio com privilégios de administrador, ao executar o GettingStartedHost no Visual Studio, o aplicativo também é executado com privilégios de administrador. Como alternativa, você pode abrir um novo prompt de comando como administrador (selecione Mais>Executar como administrador no menu de atalho) e executar GettingStartedHost.exe dentro dele.

  2. Abra um navegador da Web e navegue até a página do serviço em http://localhost:8000/GettingStarted/.

    Observação

    Os serviços como este exigem permissão adequada para registrar endereços HTTP no computador para escuta. As contas de administrador têm essa permissão, mas as contas de não administrador devem ter permissão para namespaces de HTTP. Para obter mais informações sobre como configurar reservas de namespace, confira Configurando HTTP e HTTPS.

Etapas do programa de hospedagem de serviço

As etapas no código que você adicionou para hospedar o serviço são descritas da seguinte maneira:

  • Etapa 1: cria uma instância da classe Uri para manter o endereço básico do serviço. Uma URL que contém um endereço básico tem um URI opcional que identifica um serviço. O endereço básico é formatado da seguinte maneira: <transport>://<machine-name or domain><:optional port #>/<optional URI segment>. O endereço básico para o serviço de calculadora usa o transporte HTTP, localhost, porta 8000 e o segmento do URI, GettingStarted.

  • Etapa 2: cria uma instância da classe ServiceHost, que você usa para hospedar o serviço. O construtor aceita dois parâmetros: o tipo da classe que implementa o contrato de serviço e o endereço básico do serviço.

  • Etapa 3: cria uma instância ServiceEndpoint. Um ponto de extremidade de serviço é composto de um endereço, uma associação e um contrato de serviço. O construtor ServiceEndpoint é composto pelo tipo de interface do contrato de serviço, uma associação e um endereço. O contrato de serviço é ICalculator, que você definiu e implementou no tipo de serviço. A associação desta amostra é WSHttpBinding, que é uma associação interna e conecta-se a pontos de extremidade que atendem às especificações de WS-*. Para obter mais informações sobre as associações WCF, consulte Visão geral das associações WCF. Acrescente o endereço ao endereço básico para identificar o ponto de extremidade. O código especifica o endereço como CalculatorService e o endereço totalmente qualificado para o ponto de extremidade como http://localhost:8000/GettingStarted/CalculatorService.

    Importante

    Para .NET Framework versão 4 e posterior, adicionar um ponto de extremidade de serviço é opcional. Nessas versões, se nenhum código ou configuração for adicionado, o WCF adicionará um ponto de extremidade padrão para cada combinação de endereço básico e contrato implementados pelo serviço. Para obter mais informações sobre pontos de extremidade padrão, consulte Especificando um endereço do ponto de extremidade. Para obter mais informações sobre pontos de extremidade, associações e comportamentos padrão, consulte Configuração simplificada e Configuração simplificada para serviços WCF.

  • Etapa 4: ativar a troca de metadados. Os clientes usarão a troca de metadados para gerar os proxies para chamar as operações de serviço. Para permitir a troca de metadados, crie uma instância de ServiceMetadataBehavior, defina sua propriedade HttpGetEnabled como true e adicione o objeto ServiceMetadataBehavior à coleção de Behaviors da instância ServiceHost.

  • Etapa 5: abrir o ServiceHost para escutar as mensagens de entrada. O aplicativo aguarda que você pressione Enter. Depois que o aplicativo cria uma instância ServiceHost, ele executa um bloco try/catch. Para obter mais informações sobre como capturar exceções com segurança geradas por ServiceHost, consulte Use Fechar e Anular para liberar recursos de cliente do WCF.

Importante

Quando você adiciona uma biblioteca de serviços WCF, o Visual Studio hospeda-a para você se você depurá-la iniciando um host de serviço. Para evitar conflitos, você pode impedir que o Visual Studio hospede a biblioteca de serviços WCF.

  1. Selecione o projeto GettingStartedLib em Gerenciador de Soluções e selecione Propriedades no menu de atalho.
  2. Selecione Opções do WCF e desmarque Iniciar Host de Serviço WCF ao depurar outro projeto na mesma solução.

Próximas etapas

Neste tutorial, você aprendeu a:

  • Crie e configure um projeto de aplicativo de console para hospedar um serviço WCF.
  • Adicione código para hospedar o serviço WCF.
  • Atualize o arquivo de configuração.
  • Inicie o serviço WCF e verifique sua execução.

Avance para o próximo tutorial para saber como criar um cliente WCF.