BrSilverlight

Tutoriais e dicas sobre Silverlight

Sobre o autor

Sou Breno Ferreira, desenvolvedor em um Centro de Tecnologia em Petrópolis especializado em Silverlight. Criei este site com o objetivo de postar dicas, tutoriais e artigos sobre Silverlight, WPF e tecnologias Microsoft.

 

Tratando exceções de serviços WCF no Silverlight

Quem já trabalhou com acesso a serviços criados com WCF (Windows Communication Foundation) no Silverlight com certeza já deve ter percebido que quando alguma exceção é lançada no servidor, no lado do cliente (a aplicação Silverlight nesse caso), recebia a seguinte mensagem:

error

Isso sempre gerava uma enorme dor de cabeça para os desenvolvedores, pois não era trivial saber o que houve de errado.

Mas a partir da versão 3 do Silverlight esse problema pode ser evitado, bastando-se usar o Client HTTP Stack ao invés do Browser HTTP Stack. O Client HTTP Stack usa os serviços HTTP nativos do Sistema Operacional, ao invés da pilha HTTP do browser. Isso irá permitir acessar as informações sobre as SOAP Faults geradas no servidor.

Para utilizar o Client HTTP Stack no Silverlight, basta voce chamar o método RegisterPrefix() da classe WebRequest conforme o código abaixo:

Code Snippet
  1. public MainPage()
  2. {
  3.     Boolean registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
  4. }

 

Snippet 1: utilizando o Client Http Stack no Silverlight

No código acima, no construtor da nossa MainPage, passamos a utilizar a pilha de rede do SO para requisições HTTP feitas a qualquer serviço cuja URL comece com “http://”.

Agora, na definição dos contratos do nosso serviço, podemos utilizar Fault Contracts e definir os tipos dos erros que serão enviados para o cliente.

Para isso, basta definirmos uma classe que irá guardar as informações dos erros:

Code Snippet
  1. public class MyServiceFault
  2. {
  3.     public String ErrorMessage { get; set; }
  4. }

Snippet 2: Definição do nosso Fault Contract

Em seguida, quando declaramos um método no nosso ServiceContract, basta utilizarmos o atributo FaultContract, passando a classe que irá ser passada ao cliente com as informações dos erros:

Code Snippet
  1. [OperationContract]
  2. [FaultContract(typeof(MyServiceFault))]
  3. public User[] GetUsers()
  4. {
  5.     //...
  6. }

Snippet 3: Definição do OperationContract

Agora na aplicação Silverlight conseguimos acessar as informações de possíveis erros que venham a ocorrer no servidor. Basta checarmos o valor da propriedade Error da chamada assíncrona do método do serviço:

Code Snippet
  1. void OnGetUsersCompleted(object sender, GetUsersCompletedEventArgs e)
  2. {
  3.     if (e.Error == null)
  4.     {
  5.         // Success
  6.     }
  7.     else if (e.Error is FaultException<MyServiceFault>)
  8.     {
  9.         FaultException<MyServiceFault> fault = e.Error as FaultException<MyServiceFault>;
  10.  
  11.         var errorMessage = fault.ErrorMessage;
  12.  
  13.         MessageBox.Show(errorMessage);
  14.  
  15.     }
  16. }

Snippet 4: Trantando Faults no Silverilght

Com isso conseguimos ter um acesso melhor as Exceptions que são lançadas no servidor e depurá-las em runtime de maneira mais fácil, sem receber uma mensagem de “Not Found” que não diz absolutamente nada.


Categories: Silverlight
Permalink | Comentários (2) | Post RSSRSS comment feed

Comentários

topsy.com

terça-feira, 27 de abril de 2010 12:22

pingback

Pingback from topsy.com

Twitter Trackbacks for
        
        BrSilverlight | Tratando exceções de serviços WCF no Silverlight
        [brsilverlight.com]
        on Topsy.com

265.binggreen.com

sexta-feira, 21 de maio de 2010 2:20

pingback

Pingback from 265.binggreen.com

750li Discount Bmw 760i, Sell 750li Search

Comentar




  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading