Welcome to MSDN Blogs Sign in | Join | Help

Rafael Godinho

Um blog sobre as novidades das tecnologias Microsoft
Consumindo serviços WCF

Olá pessoal, dando continuidade às postagens sobre WCF, agora vou comentar sobre como consumir serviços utilizando WCF.

O primeiro passo é adicionar um novo projeto na solução, aqui vou adicionar um projeto do tipo WPF Application e a solução deve ficar assim:

Solução serviço cliente WCF

Em seguida é necessário criar uma interface para o cliente do serviço, para isto basta utilizar o XAML abaixo.

   1:  <Window x:Class="ClienteWCF.Window1"
   2:  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:          Title="ClienteWCF" Height="300" Width="300">
   5:      <Grid>
   6:          <Grid.ColumnDefinitions>
   7:              <ColumnDefinition/>
   8:              <ColumnDefinition/>
   9:          </Grid.ColumnDefinitions>
  10:          <Grid.RowDefinitions>
  11:              <RowDefinition Height="40*" />
  12:              <RowDefinition Height="40*" />
  13:              <RowDefinition Height="40*" />
  14:              <RowDefinition Height="200*" />
  15:          </Grid.RowDefinitions>
  16:          <TextBlock Text="Valor1:" Grid.Column="0" 
  17:                     Grid.Row="0" Margin="5" />
  18:          <TextBlock Text="Valor2:" Grid.Column="0" 
  19:                     Grid.Row="1" Margin="5" />
  20:          <TextBlock Text="Resultado:" Grid.Column="0" 
  21:                     Grid.Row="2" Margin="5" />
  22:          <TextBox x:Name="Valor1TextBox" Grid.Column="1" 
  23:                   Grid.Row="0" Margin="5" />
  24:          <TextBox x:Name="Valor2TextBox" Grid.Column="1" 
  25:                   Grid.Row="1" Margin="5" />
  26:          <TextBlock x:Name="ResultadoTextBlock" Grid.Column="1" 
  27:                     Grid.Row="2" Margin="5" />
  28:          <Button x:Name="SomarButton" Grid.Row="3" Grid.ColumnSpan="2" 
  29:                  Click="SomarButton_Click" Content="Somar" Width="100"  
  30:                  Height="40" VerticalAlignment="Top"  Margin="5"/>
  31:      </Grid>
  32:  </Window>

Que deve gerar a seguinte tela:

Interface WPF cliente WCF

Depois é necessário adicionar uma referência para o serviço WCF, conforme na tela abaixo

Inclusão de referência do serviço 

Em seguida clique no botão Discover para pesquisar pelos projetos de serviço na solução, escolha o serviço da calculadora e forneça um nome para o namespace, no exemplo o nome é CalcServiceReference.

image

Com a referência criada o próximo passo é criar o código para chamar o serviço, conforme o seguinte exemplo.

   1:  private void SomarButton_Click(object sender, RoutedEventArgs e)
   2:  {
   3:      var servico = new CalcServiceReference.CalcServiceClient();
   4:      var valor1 = double.Parse(Valor1TextBox.Text);
   5:      var valor2 = double.Parse(Valor2TextBox.Text);
   6:      var resultado = servico.Add(valor1, valor2);
   7:      ResultadoTextBlock.Text = resultado.ToString();
   8:  }
 
Depois é só compilar e testar a aplicação, segue o print do meu teste.
 
Cliente WCF executando 

O código fonte deste post pode ser acessado aqui.

Webcast – Visão Geral do Windows 7 no ambiente de Desenvolvimento

Olá pessoal,

Amanhã vou fazer um webcast, em conjunto com o Alex Schulz, sobre as novidades do Windows 7 para os desenvolvedores. Estão todos convidados para participar!

A inscrição no webcast pode ser feita aqui.

Até a próxima.
Rafael Godinho

Webcast – Boas Práticas com WCF

Vou fazer em conjunto com o Luciano Condé, no dia 20/05/2009 às 17:30 horário de brasília, um webcast sobre boas práticas com WCF.

Vamos tratar assuntos desde requisitos na definição dos serviços, até qual as melhores opções de desenvolvimento e configuração de acordo com cenários de uso.

Se você quiser se inscrever é só clicar aqui.

Screencast – Hospedando um serviço WCF no WAS

Dando continuidade à nossa série de screencasts sobre WCF, segue o do post Hospedando um serviço WCF no WAS – Windows Process Activation Service.

Download do vídeo.

Hospedando um serviço WCF no WAS - Windows Process Activation Services

Dando continuidade à nossa série de posts sobre serviços WCF, chegamos ao último post sobre o tópico de hospedagem. Hoje vamos falar sobre como hospedar serviços WCF no WAS - Windows Process Activation Services.

O WAS é um modelo de hospedagem de serviços WCF e está disponível à partir do Windows Vista e Windows Server 2008. Ele generaliza o modelo de funcionamento do IIS removendo a dependência do HTTP e permitindo o uso de outros protocolos, como TCP e MSMQ. Como utiliza o mesmo modelo de funcionamento do IIS, herda suas características, como, escalabilidade e gerenciamento de memória, permitindo a hospedagem de vários serviços e suportando alta carga de requisições.

O primeiro passo é instalar o WAS. Isso é feito habilitando a opção Windows Process Activation Service em Turn Windows Features on or off  do painel de controle, o que pode ser verificado abaixo.

image

Depois de instalar o WAS é necessário hospedar o serviço no IIS, para isto basta seguir os passos do post Hospedando um serviço WCF no IIS.

O próximo passo é habilitar os protocolos de funcionamento, o que é feito com o utilitário de linha de comando AppCmd.exe, que por padrão fica no diretório c:\windows\system32\inetsrv.

Primeiro deve ser habilitado o protocolo no Web site. No exemplo abaixo estou habilitando o funcionamento do protocolo Tcp no Default Web Site.

appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='9090:*']

Em seguida deve-se habilitar o protocolo no Application que o serviço está instalado:

appcmd.exe set app "Default Web Site/WebApplication" /enabledProtocols:http,net.tcp

Agora que temos o serviço hospedado e o protocolo tcp habilitado, precisamos agora configurar os seus endpoints. Eles são do tipo netTcpBinding e mexTcpBinding, onde o primeiro é utilizado para comunicação com protocolo tcp e o outro para consulta do metadados. O seu arquivo web.config deve ficar assim:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="ServicoWCF.Service1Behavior"
        name="ServicoWCF.CalcService">
        <endpoint address="net.tcp://localhost:9090/WebApplication/CalcService.svc"
          binding="netTcpBinding" contract="ServicoWCF.ICalcService" />
        <endpoint address="net.tcp://localhost:9090/WebApplication/CalcService.svc/mex"
          binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServicoWCF.Service1Behavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Com tudo configurado podemos testar o serviço, para isso devemos executar o WCF Test   Client e apontar para o endereço net.tcp://localhost:9090/WebApplication/CalcService.svc, conforme pode ser observado abaixo:

image

Nos próximos posts colocarei o screencast com a demo. Lembrem-se de deixar comentário e até a próxima pessoal!

Screencast – Hospedando um serviço WCF no IIS

Dando sequência ao nosso tutorial de WCF, segue o screencast do post Hospedando um serviço WCF no IIS.

Quem quiser pode baixar o vídeo aqui.

Deixem comentários e até a próxima pessoal.

Webcast sobre REST

Olá pessoal, amanhã vou fazer um webcast sobre arquitetura RESTful no .NET em conjunto com o Otavio. Neste webcast vamos discutir os cenários de uso, comparação com SOAP e claro, exemplos de como criar serviços REST com o .NET Framework.

Você pode ser registrar para o evento aqui.

Lembrem-se de deixar seu recado sobre o evento aqui no blog.

Azure Academy

Olá pessoal,

Se você tem interesse em descobrir um pouco mais sobre o Windows Azure não pode perder o conjunto de vídeos que o time de arquitetura da Microsoft Brasil lançou, o Azure Academy.

Este material contém material introdutório sobre Windows Azure e os seus serviços, o .NET Service, o SQL Services e o Live Services. Além disso, também traz assunto relevantes ao tema, como, o que é e quando usar computação na nuvem, gerenciamento de identidades na nuvem e o ALM e a nuvem.

Fiz o vídeo Serviços na nuvem com o .NET Services, olhem lá e comentem!!!

Hospedando um serviço WCF no IIS

Olá pessoal, dando continuidade no nosso estudo de WCF vamos ver mais uma opção de hospedagem, o IIS. Este tipo de hospedagem possui algumas características muito interessantes, tais como:

  • Enfileiramento de requisições, permitindo que o serviço seja atualizado ou reiniciado sem perder as chamadas que possam ocorrer durante este período.
  • Suporte à application pooling, monitoração, recycling e gerenciamento de idle-time para otimização de recursos.

A hospedagem de serviços WCF no IIS é bastante simples, vamos aos passos:

Abra o Internet Information Services Manager, clique com o botão direito no Web Site e escolha a opção Add Application.

Criação de application no IIS

Forneça um alias e um endereço físico onde os arquivos do serviço serão copiados.

Criação de Application no IIS

No caminho físico fornecido, crie a pasta bin e copie o arquivo ServicoWCF.dll do nosso projeto original.

Na raiz do caminho físico, copie o arquivo ServicoWCF.dll.config e não esqueça de renomeá-lo para web.config.

Crie um arquivo com nome CalcService.svc com o conteúdo abaixo, sua edição pode ser no notepad.exe mesmo.

<%@ ServiceHost Service="ServicoWCF.CalcService" %>

No final a estrutura dos seus arquivos deve ficar assim:

  • \WebApplication
    • \bin
      • ServicoWCF.dll
    • CalcService.svc
    • web.config

Você pode testar que a publicação do serviço foi realizada com sucesso acessando a Url http://localhost/WebApplication/CalcService.svc em um browser, como podemos ver abaixo.

WCF publicado no IIS

Nos próximos posts vamos ver como criar um cliente para um serviço WCF.

Até a próxima pessoal!!!

Treinamentos gratuitos no MSDN

Olá pessoal,

Vocês sabiam que existe uma série de treinamentos gratuitos para download no MSDN? Os links estão abaixos, divirtam-se ;)

Não esqueçam de deixar comentários sobre os treinamentos e até a próxima pessoal.

Acessando horário selecionado no calendário do Outlook

Olá pessoal, estive conversando com um parceiro Microsoft que eu atendo e eles estavam tendo problemas para acessar as informações de data e hora marcadas no calendário do Outlook, fiz alguns testes para ajudá-los e abaixo mostro as minhas conclusões.

Infelizmente o Outlook não possui uma API para este tipo de consulta. Se você tentar buscar os itens selecionados no calendário recebe como retorno uma coleção vazia, o que tem sentido, de fato não existe mesmo nenhum compromisso selecionado, apenas horários vagos na agenda, concordam? ;)

Se você tentar criar um compromisso via API, ele também não será criado na data selecionada no calendário. A saída neste caso é enganar o Outlook criando um novo compromisso através do botão correspondente na toolbar. O código para isto está abaixo:

 private object myMissing = System.Reflection.Missing.Value;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            AddCommandBar();
        }

        private void AddCommandBar()
        {
            var myExplorer = this.Application.ActiveExplorer();

            var myCommandBar = myExplorer.CommandBars["Standard"];
            var myButton = (Office.CommandBarButton)myCommandBar.Controls.Add(Office.MsoControlType.msoControlButton, myMissing, myMissing, 2, 1);

            myButton.Caption = "Buscar Data Selecionada";
            myButton.Style = Office.MsoButtonStyle.msoButtonCaption;

            myButton.Click += new Office._CommandBarButtonEvents_ClickEventHandler(myButton_Click);

            myCommandBar.Visible = true;
            myCommandBar.Enabled = true;
            myCommandBar.Position = Office.MsoBarPosition.msoBarTop;  

        }

        private void myButton_Click(CommandBarButton Ctrl, ref bool CancelDefault)
        {
            var explorer = Application.ActiveExplorer();
            if (explorer != null)
            {
                var folder = explorer.CurrentFolder;
                if (folder.DefaultItemType == Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem)
                {
                    var cb = explorer.CommandBars.FindControl(myMissing, 1106, myMissing, myMissing);
                    if (cb != null)
                    {
                        cb.Execute();
                        var appointment = (Outlook._AppointmentItem)Application.ActiveInspector().CurrentItem;
                        appointment.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);
                        
                        var informacoes = string.Format("Inicio: {0}\n Fim: {1}"
                            appointment.Start.ToString(), 
                            appointment.End.ToString());
                        
                        System.Windows.Forms.MessageBox.Show(informacoes);
                    }
                }
            }
        }

Fica a dica para quem precisar e até a próxima.

Screencast – Hospedando um serviço WCF em um Windows NT Service

Dando sequência aos nossos tutoriais, gravei um screencast mostrando como escrever um Windows NT Service para hospedar um serviço WCF.

Se você quiser, pode baixar o conteúdo do screencast:

Hospedando um serviço WCF em um Windows NT Service

Continuando a série de posts sobre a criação de um serviço WCF, agora vou mostrar como hospedá-lo em um serviço Windows NT Service, que deve ser feito seguindo alguns passos:

Abra a solução anterior 
Clique com o botão direito na solução e escolha a opção “Add/New Project…”

Novo Projeto 

Escolha a opção “Windows Service” e forneça um nome para o seu projeto, eu utilizei “CalculatorNTService”.

Criando um Windows Service

Adicione referência para o projeto do serviço WCF clicando com o botão direito em “References” e depois em “Add Reference…”.

image

Escolha o ServicoWCF e clique em OK.

image

Faça o mesmo para o assembly System.ServiceModel

image

Renomeie o arquivo Service1.cs para NTService.cs, o seu projeto deve ficar assim:

image

No início do arquivo adicione o código abaixo:

using System.ServiceModel;

Dentro da classe do serviço NT, crie uma propriedade do tipo ServiceHost

private ServiceHost ServiceHost { get; set; }

Preencha o conteúdo do método OnStart e do OnStop

        protected override void OnStart(string[] args)
        {
            if (ServiceHost != null)
            {
                ServiceHost.Close();
            }

            ServiceHost = new ServiceHost(typeof(ServicoWCF.CalcService));
            ServiceHost.Open();
        }

        protected override void OnStop()
        {
            if (ServiceHost != null)
            {
                ServiceHost.Close();
                ServiceHost = null;
            }
        }

No final seu código deve ficar mais ou menos assim:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;
using System.ServiceProcess;
using System.Text;

namespace CalculatorNTService
{
    public partial class NTService : ServiceBase
    {
        public NTService()
        {
            InitializeComponent();
        }

        private ServiceHost ServiceHost { get; set; }

        protected override void OnStart(string[] args)
        {
            if (ServiceHost != null)
            {
                ServiceHost.Close();
            }

            ServiceHost = new ServiceHost(typeof(ServicoWCF.CalcService));
            ServiceHost.Open();
        }

        protected override void OnStop()
        {
            if (ServiceHost != null)
            {
                ServiceHost.Close();
                ServiceHost = null;
            }
        }
    }
}

O próximo passo é adicionar um arquivo para armazenar as configurações do serviço WCF, para isso clique com o botão direito e escolha “Add/New Item”

image

Em seguida adicione um “Application Configuration File”

image

No arquivo “App.config” insira o código

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
  <system.web> 
    <compilation debug="true" /> 
  </system.web> 
  <system.serviceModel> 
    <services> 
      <service behaviorConfiguration="ServicoWCF.Service1Behavior" 
        name="ServicoWCF.CalcService"> 
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
        <endpoint binding="netTcpBinding" bindingConfiguration="" contract="ServicoWCF.ICalcService"  /> 
        <host> 
          <baseAddresses> 
            <add baseAddress="http://localhost:8731/CalculatorService/" /> 
            <add baseAddress="net.tcp://localhost:9090/CalculatorService/" /> 
          </baseAddresses> 
        </host> 
      </service> 
    </services> 
    <behaviors> 
      <serviceBehaviors> 
        <behavior name="ServicoWCF.Service1Behavior"> 
          <serviceMetadata httpGetEnabled="True"/> 
          <serviceDebug includeExceptionDetailInFaults="False" /> 
        </behavior> 
      </serviceBehaviors> 
    </behaviors> 
  </system.serviceModel> 
</configuration>

Notem que neste exemplo estamos trabalhando com um binding do tipo Tcp, o netTcpBinding, esperando conexões na porta 9090.

Agora o próximo passo é adicionar uma maneira para instalar o serviço, repita o procedimento “Add/New Item…” e escolha a opção “Installer Class”.

image

No início do arquivo adicione o código abaixo:

using System.ServiceProcess;

Em seguida, adicione uma propriedade do tipo “ServiceProcessInstaller”

private ServiceProcessInstaller Process { get; set; }

Depois uma do tipo “ServiceInstaller”

private ServiceInstaller Service { get; set; }

No construtor da classe adicione

Process = new ServiceProcessInstaller();
Process.Account = ServiceAccount.LocalSystem;
Service = new ServiceInstaller();
Service.ServiceName = "CalculatorNTService";
Installers.Add(Process);
Installers.Add(Service);

No final sua classe deve ficar mais ou menos assim

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.ServiceProcess;


namespace CalculatorNTService
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        private ServiceProcessInstaller Process { get; set; }
        private ServiceInstaller Service { get; set; }

        public ProjectInstaller()
        {
            InitializeComponent();

            Process = new ServiceProcessInstaller();
            Process.Account = ServiceAccount.LocalSystem;
            Service = new ServiceInstaller();
            Service.ServiceName = "CalculatorNTService";
            Installers.Add(Process);
            Installers.Add(Service);
        }
    }
}

Agora é só compilar o projeto para gerar o executável do “Windows NT Service” e em seguida instalá-lo. Para isso abra o “Visual Studio Command Prompt” como administrador.

image

No “Visual Studio Command Prompt” navegue, com o comando cd, até o o diretório onde o “Windows NT Service” foi compilado, em seguida execute o comando:

InstallUtil CalculatorNTService.exe

Para verificar que o serviço foi instalado com sucesso abra o MMC de gerenciamento de serviços, o jeito mais fácil é pelo próprio Command Prompt executar:

Services.msc

Na tela que se abre, podemos perceber que o nosso serviço foi instalado com sucesso e pode ser iniciado pelo botão de start, no caso do Windows 7 que estou usando, a setinha verde na barra de ferramentas da tela abaixo.

image 

Para testar se o serviço está funcionando vamos utilizar a ferramenta “WCF Test Client”, que está disponível junto com a instalação do Visual Studio 2008, geralmente em C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\WcfTestClient.exe.

image

Depois de executar a ferramenta, escolha a opção “File/Add Service…” e insira o endereço do metadados do serviço, no nosso caso http://localhost:8731/CalculatorService, confirme com o botão OK.

image

Neste momento o “WCF Test Client” reconhece o serviço, suas interfaces e métodos e os exibe para teste. Notem também que o protocolo de comunicação utilizado é o NetTcpBinding.

image

Para testar, clique duas vezes em um método do serviço, por exemplo, o Add, preencha os valores dos parâmetros x e y do método e depois clique no botão Invoke.

image

Note que na parte de baixo da tela é exibida a informação do retorno do serviço, no caso do teste  realizado o valor 3.

Vale lembrar que o objetivo deste post era mostrar uma introdução de como hospedar serviços WCF utilizando serviços Windows NT e de modo algum teve objetivo de mostrar melhores práticas sobre o desenvolvimento dos mesmos.

Não esqueçam de deixar comentários, se eu esqueci de algum passo me avisem. Espero que tenham gostado e até a próxima pessoal!!!

Hospedando seu serviço WCF

Olá pessoal, no meu último post iniciei uma série sobre como criar um serviço WCF, agora vou falar um pouco de como hospedar este serviço.

Já fiz um post sobre este tópico, mas em linhas gerais podemos resumir esta decisão em uma combinação do protocolo de comunicação utilizado e o sistema operacional do servidor, conforme tabela abaixo:

Protocolo de transporte Windows Server 2003 Windows Server 2008
Não Http Windows NT Service Windows Activation Service
Http/Https IIS IIS

Na sequencia publicarei outros 3 posts mostrando passo-a-passo como hospedar o serviço em cada um dos cenários comentados acima:

- Windows NT Service
- IIS
- Windows Activation Service

Screencast – Criando seu primeiro serviço com WCF

Tudo bom pessoal? Meu último post foi sobre como criar um serviço com WCF passo-a-passo, no post atual irei mostrar para vocês um vídeo mostrando exatamente este passo-a-passo.

Este foi o meu primeiro screencast, não esqueçam de deixar comentários e até a próxima pessoal!!!

More Posts Next page »
Page view tracker