Utilizando o Visual Studio 2010, vamos hospedar um serviço WCF já existente. O foco desde artigo é a hospedagem do serviço, então o leitor pode usar um projeto do ipo Class Library já criado. Como sugestão, pode-se também aproveitar o exemplo criado no artigo Criando um serviço WFC básico e trabalhar na solução HelloWorld disponível no código fonte.

Realizaremos os seguintes passos:

  • Hospedar o serviço WCF no Servidor de Desenvolvimento ASP.NET
  • Criar uma aplicação cliente para consumir o serviço WCF

Hospedando o serviço WCF Utilizando ASP.NET Development Server

O projeto com o qual trabalharemos (HelloWorldService, caso o leitor utilize o projeto do artigo sugerido) é uma ClassLibrary, portanto, tem de ser hospedado em um ambiente de rede para que os aplicativos clientes possam acessá-lo. Nesta seção, vamos explicar como proceder para criar um site para hospedar um serviço WCF.

Existem vários tipos de host para serviços WCF dentro do Visual Studio 2010. No entanto, nesta seção, vamos criar manualmente o host por motivos didáticos.

Para hospedar a nossa ClassLibrary usando o Servidor de Desenvolvimento ASP.NET, precisamos adicionar um novo site para a solução. Siga estes passos para criar este site:

A)Na Solution Explorer, clique com botão direito sobre o arquivo de solução, e selecione Add | New Web Site ... no menu de contexto.

B)Selecione Visual C # | Asp.Net Empty Web Site como template. Mudar o nome do site de WebSite1 para C:\Artigos\2013\WCF\HelloWorld\HostDevServer:

Criando o HostServer

Figura 1: Criando o HostServer

Agora, no Solution Explorer, você tem mais um item (HostDevServer) dentro da solução.

Em seguida, precisamos definir o site como o projeto de inicialização (Startup Project):

Definindo o Site Como Startup Project

Figura 2: Definindo o Site Como Startup Project

Adicione o Projeto HelloWorldService como referência ao nosso Web Site.

Agora podemos executar o site dentro do Servidor de Desenvolvimento do ASP.NET. Se você iniciar o HostDevServer site, pressionando Ctrl + F5 ou selecione no menu Debug | Start Without Debugging, você vai ver um site vazio no seu browser. Porque temos que definir este site como o projeto de inicialização, mas não definimos qualquer página inicial, ele lista todos os arquivos e diretórios dentro do diretório HostDevServer (Pesquisa no Diretório é sempre habilitado para um site dentro do Servidor de Desenvolvimento do ASP.NET).

Rodando o Web Site

Figura 3: Rodando o Web Site

Este site realmente está sendo executado dentro do servidor de desenvolvimento integrado do ASP.NET, que é um recurso que foi introduzido no Visual Studio 2005. Este servidor web é destinado a ser usado por desenvolvedores somente, e tem uma funcionalidade semelhante à dos Serviços de Informações da Internet (IIS). Ele também tem algumas limitações, por exemplo, você pode executar aplicações ASP.NET apenas localmente. Você não pode usá-lo como um servidor IIS real para publicar um site na web.

Adicionando um arquivo svc para o aplicativo host

Embora possamos iniciar o site agora, atualmente, ele não hospeda nosso HelloWorldService. Isto é porque nós não especificamos qual o serviço que este site deve hospedar, ou um ponto de entrada para este site. Assim como um asmx é o ponto de entrada para um WebService padrão, um arquivo .Svc é o ponto de entrada para um serviço WCF, se ele está hospedado em um servidor web. Agora iremos adicionar esse arquivo para o nosso site.

A partir do Solution Explorer, clique com botão direito no site da C: \ ... HostDevServer \ e selecione Add New Item ... no menu de contexto. A janela de diálogo. Selecione um TextFile, e altere seu nome de TextFile.txt para HelloWorldService.svc.

Adicionando o arquivo .svc

Figura 4: Adicionando o arquivo .svc

Depois de clicar no botão Adicionar na caixa de diálogo Add New Item, um arquivo vazio .svc será criado e adicionado ao site. Agora insira a seguinte linha neste arquivo:

Listagem 1: Adicionando código ao arquivo .svc


<%@ServiceHost Service="MyWCFServices.HelloWorldService"%>

O último passo é modificar o arquivo web.config do site. Abra o arquivo web.config do site e alterá-lo para ser assim:

Listagem 2: Arquivo de Configuração


<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="MyWCFServices.HelloWorldService" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="" binding="wsHttpBinding" contract="MyWCFServices.IHelloWorldService"/>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

O comportamento httpGetEnabled é essencial, porque queremos que outros aplicativos sejam capazes de localizar os metadados do serviço. Sem os metadados, os requests dos clientes não irão gerar o proxy e, portanto, não serão capazes de usar o serviço.

Criando a aplicação client para consumir o serviço WCF

Agora que temos criado e hospedado um serviço WCF, precisamos de um cliente para consumir o serviço. Vamos criar uma aplicação C # cliente para consumir o HelloWorldService.

Adicione à solução um projeto do tipo Console Application de nome HelloWorldClient.

Gerando os arquivos proxy de configuração

A fim de consumir um serviço WCF, um aplicativo cliente deve primeiro obter ou gerar uma classe proxy.

Também precisamos de um arquivo de configuração para especificar coisas como a ligação do serviço, o endereço do serviço e do contrato.

Para gerar esses dois arquivos, podemos usar a ferramenta svcutil.exe a partir da linha de comando. Você pode seguir estes passos para gerar os dois arquivos:

  • Inicie o serviço pressionando Ctrl + F5 ou selecionando a opção de menu Debug | Start Without Debugging (neste ponto o seu projeto de inicialização ainda deve ser HostDevServer, se não, você precisa definir que este seja o projeto de inicialização). Agora, você deverá ver a janela de introdução para o serviço HelloWorldService, como vimos na seção anterior.
  • Depois que o serviço for iniciado, execute o Prompt de Comando do VS 2010 utilizando a ferramenta svcutil.exe, usaremos a seguinte sintaxe - SvcUtil.exe apontando a pasta onde se encontra o projeto client.
  • Renomeie o arquivo Output.config gerado pela ferramenta SvcUtil,exe para app.

Se você abrir o arquivo de proxy, você vai ver que a interface do serviço (IHelloWorldService) esta embutida dentro da classe proxy, e uma classe cliente (HelloWorldServiceClient) é criada para implementar essa interface.

Dentro do arquivo de configuração, você vai ver as definições do HelloWorldService, como o endereço do terminal, de ligação, configurações de tempo limite, e os comportamentos de segurança do serviço.

Customizando a aplicação cliente

Antes de podermos executar a aplicação client, ainda temos mais algum trabalho a fazer. Siga estes passos para terminar a personalização:

  • Adicione os dois arquivos gerados para o projeto.
  • Adicione uma referência ao namespace System.ServiceModel: Assim como fizemos para o projeto HelloWorldService.
  • Modifique a classe program.cs para chamar o serviço: Em program.cs, adicione a seguinte linha para inicializar o objeto cliente do serviço:

Listagem 3: Instanciando o serviço


HelloWorldServiceClient client = new HelloWorldServiceClient();
Console.WriteLine(client.GetMessage("Leandro Ribeiro"));

Pronto, agora inicie o projeto HostDevServer antes de rodar a aplicação cliente. Para rodar o client, pressione Ctrl + F5, para rodar a aplicação sem Debug.

O output será o seguinte:

Output da aplicação HelloWorldClient

Figura 5: Output da aplicação HelloWorldClient

Neste artigo criamos um serviço WCF básico, hospedado dentro do Servidor de Desenvolvimento do ASP.NET.

Criamos também um programa cliente para referenciar e consumir este serviço WCF.

Espero que com esses exemplos práticos, o leitor tenha a oportunidade de conhecer como o WCF funciona e as etapas que precisamos realizar para utilizar essa tecnologia.

Segue um resumo das conclusões que chegamos com esse artigo:

  • Um serviço WCF é uma biblioteca de classes, que define um ou mais contratos de interface de serviço WCF.
  • O Assembly System.ServiceModel é referenciado por todos os projetos de serviço WCF
  • As implementações de um serviço WCF são classes C# normais.
  • Um serviço WCF deve ser hospedado em um aplicativo de hospedagem
  • O Visual Studio 2010 tem o servidor de desenvolvimento ASP.NET
  • Um aplicativo cliente usa um proxy para se comunicar com serviços WCF
  • Um arquivo de configuração deve ser usado para especificar as definições para a comunicação com serviços WCF

Com as conclusões chegamos ao fim de mais um artigo. Espero que seja útil até mais e abraços.