Tutorial: 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, cada um dos quais expõe uma ou mais operações de serviço. Um ponto de extremidade de serviço especifica as seguintes informações:
- Uma morada onde 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, irá 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 se ele está em execução.
Criar e configurar um projeto de aplicativo de console para hospedar o serviço
Crie um projeto de aplicativo de console no Visual Studio:
No menu Arquivo, selecione Abrir>projeto/solução e navegue até a solução GettingStarted que você criou anteriormente (GettingStarted.sln). Selecione Abrir.
No menu Exibir, selecione Gerenciador de Soluções.
Na janela Gerenciador de Soluções, selecione a solução GettingStarted (nó superior) e selecione Adicionar>Novo Projeto no menu de atalho.
Na janela Adicionar Novo Projeto, no lado esquerdo, selecione a categoria Área de Trabalho do Windows em Visual C# ou Visual Basic.
Selecione o modelo Aplicativo de Console (.NET Framework) e digite GettingStartedHost para o Nome. Selecione OK.
Adicione uma referência no projeto GettingStartedHost ao projeto GettingStartedLib :
Na janela Gerenciador de Soluções , selecione a pasta Referências no projeto GettingStartedHost e selecione Adicionar Referência no menu de atalho.
Na caixa de diálogo Adicionar Referência, em Projetos no lado esquerdo da janela, selecione Solução.
Selecione GettingStartedLib na seção central da janela e, em seguida, selecione OK.
Esta ação torna os tipos definidos no projeto GettingStartedLib disponíveis para o projeto GettingStartedHost.
Adicione uma referência no projeto GettingStartedHost ao System.ServiceModel assembly:
Na janela Gerenciador de Soluções , selecione a pasta Referências no projeto GettingStartedHost e selecione Adicionar Referência no menu de atalho.
Na janela Adicionar Referência, em Montagens no lado esquerdo da janela, selecione Estrutura.
Selecione System.ServiceModel e, em seguida, selecione OK.
Salve a solução selecionando Arquivo>Salvar tudo.
Adicionar código para hospedar o serviço
Para hospedar o serviço, adicione código para executar as seguintes etapas:
- Crie um URI para o endereço base.
- Crie uma instância de classe para hospedar o serviço.
- Crie um ponto de extremidade de serviço.
- Habilite a troca de metadados.
- Abra o host de serviço para ouvir as mensagens recebidas.
Faça as seguintes alterações no código:
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.
Atualize as propriedades do projeto:
Na janela Gerenciador de Soluções, selecione a pasta GettingStartedHost e selecione Propriedades no menu de atalho.
Na página de propriedades GettingStartedHost , selecione a guia Aplicativo :
Para projetos 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.
No menu Arquivo, selecione Salvar tudo.
Verifique se o serviço está funcionando
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, quando você executa 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.
Abra um navegador da Web e navegue até a página do serviço em
http://localhost:8000/GettingStarted/
.Nota
Serviços como este exigem a permissão adequada para registrar endereços HTTP na máquina para ouvir. As contas de administrador têm essa permissão, mas as contas que não são de administrador devem receber permissão para namespaces HTTP. Para obter mais informações sobre como configurar reservas de namespace, consulte 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: Crie uma instância da
Uri
classe para manter o endereço base do serviço. Uma URL que contém um endereço base tem um URI opcional que identifica um serviço. O endereço base está formatado da seguinte forma:<transport>://<machine-name or domain><:optional port #>/<optional URI segment>
. O endereço base para o serviço de calculadora usa o transporte HTTP, localhost, porta 8000 e o segmento URI, GettingStarted.Etapa 2: Crie uma instância da ServiceHost classe, que você usa para hospedar o serviço. O construtor usa dois parâmetros: o tipo da classe que implementa o contrato de serviço e o endereço base do serviço.
Etapa 3: Crie uma ServiceEndpoint instância. Um ponto de extremidade de serviço é composto por um endereço, uma associação e um contrato de serviço. O ServiceEndpoint construtor é composto pelo tipo de interface do contrato de serviço, uma ligação e um endereço. O contrato de serviço é
ICalculator
, que você definiu e implementou no tipo de serviço. A associação para este exemplo é WSHttpBinding, que é uma ligação interna e se conecta a pontos de extremidade que estão em conformidade com as especificações WS-*. Para obter mais informações sobre ligações WCF, consulte Visão geral de ligações WCF. Anexe o endereço ao endereço base 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 comohttp://localhost:8000/GettingStarted/CalculatorService
.Importante
Para o .NET Framework Versão 4 e posterior, adicionar um ponto de extremidade de serviço é opcional. Para essas versões, se você não adicionar seu código ou configuração, o WCF adicionará um ponto de extremidade padrão para cada combinação de endereço base e contrato implementada pelo serviço. Para obter mais informações sobre pontos de extremidade padrão, consulte Especificando um endereço de ponto de extremidade. Para obter mais informações sobre pontos de extremidade padrão, associações e comportamentos, consulte Configuração simplificada e configuração simplificada para serviços WCF.
Etapa 4: Habilitar a troca de metadados. Os clientes usam a troca de metadados para gerar proxies para chamar as operações de serviço. Para habilitar a troca de metadados, crie uma ServiceMetadataBehavior instância, defina sua HttpGetEnabled propriedade como
true
e adicione oServiceMetadataBehavior
objeto à Behaviors coleção da ServiceHost instância.Passo 5: Abra ServiceHost para ouvir as mensagens recebidas. O aplicativo espera que você pressione Enter. Depois que o aplicativo instancia ServiceHost, ele executa um bloco try/catch. Para obter mais informações sobre como capturar com segurança exceções lançadas pelo ServiceHost, consulte Usar fechar e anular para liberar recursos de cliente WCF.
Importante
Quando você adiciona uma biblioteca de serviço WCF, o Visual Studio a hospeda 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ço WCF.
- Selecione o projeto GettingStartedLib no Gerenciador de Soluções e escolha Propriedades no menu de atalho.
- Selecione Opções do WCF e desmarque Iniciar host de serviço WCF ao depurar outro projeto na mesma solução.
Próximos passos
Neste tutorial, ficou a saber como:
- 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 se ele está em execução.
Avance para o próximo tutorial para aprender a criar um cliente WCF.