quarta-feira, 21 de outubro de 2009
Visual Studio 2010 Beta 2 Disponível para Todos
Há muitas novidades na IDE, Framework e linguagens. Inclusive o Visual Studio mudou o logo(finalmente), agora da para perceber que é um simbolo de infinito hehehe.
Você pode saber de tudo acessando esse link do MSDN.
Clique aqui para baixar o Visual Studio Beta 2.
Eu já estou baixando a versão Ultimate...
Até a Mais
sábado, 10 de outubro de 2009
Maneiras de Verificar se uma String é Vazia
Ex:
if (str == "") (...)
Essa é clássica e funciona graças a sobrecarga de operadores do .Net, caso contrário estaríamos comparando endereços de memória.
O Método Equals
Outra alternativa é o método Equals que é o mais comum nas linguagens orientada a objetos para comparar um objeto qualquer.
Ex:
if (str.Equals("")) (...)
Esse método é mais eficiente do os operadores quando o resultado da comparação é falsa, no entanto quando o resultado é verdadeiro os operadores se saem melhor, a conclusão é não tem muita diferença entre as duas maneiras.
A Propriedade Length
A propriedade Lenght retorna o tamanho da string, então basta verificar se ela é igual a 0.
Ex:
if (str.Lenght == 0) (...)
Esse maneira é realmente eficiente, porem ela não é muito legível e assim como o Equals estamos invocando um membro de um objeto e se ele for nulo pode causar um exceção ou aumentar a complexidade do código para checagem da string nula.
O Método IsNullOrEmpty
A ultima maneira é utilizando o método IsNullOrEmpty da própria classe string.
Ex:
if (String.IsNullOrEmpty(str)) (...)
Essa maneira é 2 ou 3 vezes mais eficiente do que o operador de igualdade ou o método Equals, é equivalente ao Lenght porem ele não vai disparar uma exceção se a string for nula.
Conclusão
Sem dúvida a melhor maneira de testar se uma string é vazia é utilizando o método IsNullOrEmpty por causa da velocidade e segurança.
Claro que uma testadinha com operador não vai dar diferença nenhuma, mas acho que em uma aplicação o que vale é o conjunto da obra e é bom saber que cada tijolinho está colocado de maneira eficiente.
Até Mais,
Tiago Esmeraldino
quinta-feira, 1 de outubro de 2009
Criando e Consumindo Serviços no Silverlight - Parte 2
Introdução
Demorei mais do que eu pensava para escrever, estou tendo bastante correria no serviço graças as mudanças nas leis sobre PAF-ECF.
Mas isso é assunto para outro post talvez...
Voltando ao assunto, no post anterior eu demonstrei como se cria um serviço para ser utilizado no Silverlight. Agora vamos utiliza-lo!
Criando um Aplicativo Silverlight
Vamos criar um projeto silverlight no Visual Studio:
Figura 1 - Criando um Projeto Silverlight
Apos criado o projeto vamos abrir (se já não estiver aberto) o arquivo MainPage.xaml, vamos colocar um TextBlock e um botão para testar o serviço.
Você pode fazer isso alterando o código XAML ou pelo Expression Blend.
Código XAML
<StackPanel>
<TextBlock x:Name="lbResposta" Height="20" Width="100" Text="Resultado: "/>
<Button x:Name="btAcessar" Height="20" Width="100" Content="Acessar"/>
</StackPanel>
</Grid>
Referenciando o Serviço
Vamos referenciar o serviço, você pode clicar com o botão direito no seu projeto e ir no Add Service Reference.
Figura 2 - Acessando o Menu
Uma tela abrirá, coloque o endereço do seu serviço em 'Address' e click em 'Go'.
Apos ele encontrar o serviço você pode definir um nome para o namespace e confirmar clicando em 'Ok' como ilustrado na imagem abaixo.
Esse processo é igual para uma aplicação desktop.
Figura 3 - Referenciando o Serviço
Crie um método para o evento click do botão, você pode fazer com o Expression Blend ou por código xaml que o Visual Studio ajuda.
Figura 4 - Criando o Evento do Botão por XAML
Instanciando um Serviço e Vinculando Eventos
No MainPage.cs vamos declarar o serviço como um atributo(no escopo da classe), e no construtor vamos instanciar o serviço. No evento click do botão vamos chamar o método do serviço. A classe ficará assim:
C#
public partial class MainPage : UserControl { private ServiceReference1.MeuServicoClient ws; public MainPage() { InitializeComponent(); ws = new ServiceReference1.MeuServicoClient(); } private void btAcessar_Click(object sender, RoutedEventArgs e) { ws.DizOiAsync(); } }
VB.Net
Public Partial Class MainPage Inherits UserControl Private ws As ServiceReference1.MeuServicoClient Public Sub New() InitializeComponent() ws = New ServiceReference1.MeuServicoClient() End Sub Private Sub btAcessar_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) ws.DizOiAsync() End Sub End Class
Você percebeu que o método 'DizOiAsync' não retorna nada?
Os métodos do web service executam de modo assíncrono, o programa não espera ele executar para continuar rodando (isso é ótimo).
Na instancia do serviço('ws') há um evento 'DizOiCompleted', apenas precisamos inscrever o método nesse evento e receber o resultado.
Quando ele receber uma resposta do serviço ele irá disparar esse evento.
Para inscrever o evento precisamos de um método que satisfaça a assinatura(cabeçalho) do evento. Essa assinatura segue o padrão dos parâmetros 'object' e o 'EventArgs', no caso do EventArgs há um especializado do serviço que é o DizOiCompletedEventArgs, esse EventArgs tem uma propriedade Result que é a resposta do serviço.
Resumindo o método deve ter uma assinatura assim '(objet, DizOiCompletedEventArgs)', depois é só vincular como mostra o código abaixo:
C#
public MainPage() { //(...) código já implementado do construtor da classe ws.DizOiCompleted += new EventHandler<ServiceReference1.DizOiCompletedEventArgs>(ws_DizOiCompleted); } private void ws_DizOiCompleted(object sender, ServiceReference1.DizOiCompletedEventArgs e) { lbResposta.Text = e.Result; }
VB.Net
Public Sub New() '(...) código já implementado do construtor da classe AddHandler ws.DizOiCompleted, AddressOf ws_DizOiCompleted End Sub Private Sub ws_DizOiCompleted(ByVal sender As Object, ByVal e As ServiceReference1.DizOiCompletedEventArgs) lbResposta.Text = e.Result End Sub
Agora basta executar a aplicação e ver o resultado.
Detalhes
Qualquer exceção que ocorrer dentro do web service retornará uma mensagem 'The remote server returned an error: NotFound.', por esse motivo é bom tratar as exceções dentro do serviço, pois essa mensagem não quer dizer nada.
Outro detalhe é que para executar o silverlight consumindo os serviços fora do servidor(debuggar por exemplo) precisa de um arquivo de configuração o Cross Domain Policy na raiz do seu servidor, você pode ver detalhes nesse post no blog do Tim Heuer. É bem simples.
Até a próxima,
Tiago Esmeraldino