.NET

17 set, 2010

WCF: Configurar o IIS para trabalhar com protocolo TCP IP.

Publicidade

O WCF trabalha com várias formas de comunicação, o TCP IP é uma das formas. Nesse artigo vou mostrar como configurar o IIS para trabalhar com o WCF com o protocolo TCP IP. (para entender esse artigo é necessário ter conhecimentos básicos em WCF).<?xml:namespace prefix =” o” />

Primeira informação importante é saber que apenas o IIS 7 permite hospedagem do protocolo TCP IP.

A seguir precisamos verificar se o .Net Framework está configurado para aceitar trabalhar com protocolos. Para habilitar acesse Painel de Controle\Programas e Recursos\Ativar ou desativar recursos do Windows.

Procure na janela de Recurso do Windows a opção Microsoft.NET Framework 3.5.1. Expanda essa opção e você verá duas opções conforme a imagem abaixo:

A primeira opção é WCF HTTP Activation. Essa opção deve estar selecionada para que o IIS trabalhe com cenários HTTP. A segunda opção é WCF Non-HTTP Activation. Essa opção deve estar selecionada para que o IIS trabalhe com cenário não HTTP, no nosso caso para que trabalhe com TCP IP.

Marque as duas opções, clique no botão OK e aguarda a instalação.

Após a instalação vamos acessar o IIS, ele está disponível em Painel Controle\Ferramenta Administrativa\Gerenciador do Serviços de Informações da Internet (IIS).

Com o IIS aberto, podemos agora publicar nosso serviço no Default Web Site e utilizar o WCF com protocolo TCP IP. Vamos criar um serviço básico para utilizar com o TCP IP.

Abra o Visual Studio e crie um projeto do tipo WCF Service Application. Não precisamos mudar nada no projeto apenas marque o arquivo Service1.svc para inicializar o projeto, vamos utilizar os serviços disponibilizados por padrão pelo projeto. Agora é necessário publicar o serviço. Crie uma pasta no C:\ chamada WCF_TCPIP, no Visual Studio clique com o botão direito no mouse no projeto e em Publish, publique o projeto na pasta que criamos. Veja na imagem abaixo a tela de publicação.

Com o serviço publicado, volte para o IIS clique com o botão direito do mouse em Default Web Site e em adicionar aplicativo. Faça as configurações do nosso projeto conforme a imagem abaixo:

Definimos uma alias para nosso projeto, um pool de aplicativo (lembre-se de usar um pool que utilize o mesmo framework da sua aplicação, no meu exemplo estou usando um pool feio por mim, mas você pode utilizar o DefaultAppPool) e o caminho físico. Clique no botão OK.

Em seguida clique na opção pesquisa no diretório, do seu lado direito clique na opção habilitar.

Pronto, agora vamos testar. Clique do lado direito em Procurar e veja se sua aplicação está rodando.

Com o serviço funcionando, vamos agora configura-lo para trabalhar com protocolo TCP IP. No IIS, selecione Default Web Site e do lado direito clique em ligações (ou bindings em inglês). Na janela Ligações do Site, verifique se o protocolo net.tcp está configurado. Caso não esteja, vamos configurar. Clique no botão Adicionar, em tipo selecione net.tcp e em informações de ligações coloque 808:*. Dessa forma nossa comunicação com o serviço em TCP IP irá ocorrer com a porta 808 e o último numero fica a critério do IIS. Você pode trabalhar com outra numeração se quiser, mas tome cuidado. Você utilizar uma porta que já esteja em uso por outra aplicação. Clique em OK.

Agora clique no aplicativo WCF_TCPIP e no mesmo menu do lado direito procure por Configurações Avançadas a janela como mesmo nome será exibida. Procure a opção Protocolos Habilitados. Ele deve estar configurado apenas com o protocolo http, vamos altera-lo e adicionar o protocolo net.tcp (não apague o http) ele deve ficar assim: http,net.tcp (não coloque espaço entre http, a virgula, e o net.tcp ou um erro irá ocorrer quando tentamos acessar o serviço).

Pronto nosso serviço está atualizado no IIS para protocolo TCP IP, agora vamos fazer um teste? Vamos criar um projeto Web Site, fazemos referência a esse serviço (utilizando o endereço HTTP que tem o xml do WSDL) . Ao adicionarmos essa referencia, nosso web.config irá exibir dois endpoint, um HTTP e outro TCP IP. Apague o endpoint HTTP senão teremos um erro ao acessar o serviço avisando que existem dois endereços para o mesmo serviço.

Na minha aplicação Web Site de teste, coloquei um botão e uma label e no evento click do botão coloquei o seguinte código:

WCFService.Service1Client proxy = null;    

        try

        {

            proxy = new WCFService.Service1Client();

 

            this.lblTeste.Text = proxy.GetData(10);

        }

        catch (Exception ex)

        {

            this.lblTeste.Text = ex.Message;

        }

        finally

        {

            if (proxy != null &&

                proxy.State == System.ServiceModel.CommunicationState.Opened)

       

                proxy.Close();

                 }

A label deve exibir: You entered: 10.

Obrigado pessoal e até a próxima.