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:
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:

Depois é necessário adicionar uma referência para o serviço WCF, conforme na tela abaixo
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.
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.
O código fonte deste post pode ser acessado aqui.
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
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.
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.
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:
Nos próximos posts colocarei o screencast com a demo. Lembrem-se de deixar comentário e até a próxima pessoal!
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.
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.
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!!!
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.
Forneça um alias e um endereço físico onde os arquivos do serviço serão copiados.

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
- 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.
Nos próximos posts vamos ver como criar um cliente para um serviço WCF.
Até a próxima pessoal!!!
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.
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.
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:
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…”
Escolha a opção “Windows Service” e forneça um nome para o seu projeto, eu utilizei “CalculatorNTService”.
Adicione referência para o projeto do serviço WCF clicando com o botão direito em “References” e depois em “Add Reference…”.
Escolha o ServicoWCF e clique em OK.
Faça o mesmo para o assembly System.ServiceModel
Renomeie o arquivo Service1.cs para NTService.cs, o seu projeto deve ficar assim:
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”
Em seguida adicione um “Application Configuration File”
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”.
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.
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.
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.
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.
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.
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.
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!!!
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
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!!!