Problemas de acesso no Silverlight 3 com WebServices (access denied cross-domain)

Ao executar um componente feito em Silverlight que acesse um dados externo como um WebService ou um componente WCF você poderá receber uma mensagem totalmente insignificante, como abaixo:

"Message: Unhandled Error in Silverlight Application An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.   at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   at SilverlightApplication1.MeuWS.RetornaPessoaCompletedEventArgs.get_Result()
   at SilverlightApplication1.MainPage.X_RetornaPessoaCompleted(Object sender, RetornaPessoaCompletedEventArgs e)
   at SilverlightApplication1.MeuWS.WSExemplo1SoapClient.OnRetornaPessoaCompleted(Object state)
Line: 1
Char: 1
Code: 0"

Caso voce acesse o InnerException como sugerido na mensagem receberá um erro de access denied por não haver manifesto de confiança cross-domain ou cross-forest.

Este erro acontece porque o Silverlight ao acessar um componente externo precisa que seja confiado para uso naquela URL.

O arquivo ClientAccesspolicy.xml é muito simples e deve estar no mesmo site que o webservice (asmx) está:

<?xml version="1.0" encoding="utf-8"?>  
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="http://*" />
        <domain uri="https://*" />
      </allow-from>  
      <grant-to>
          <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy> 
  </cross-domain-access>
</access-policy>

Note que nas linha 5 inicia uma relação dos sites que podem acessar o webservice em que este arquivo está hosteado. No exemplo acima estamos permitindo qualquer site de utilizar o nosso webservice, mas obviamente você irá montar sua própria lista.

Ciclo de palestras na Green Treinamentos

A partir da semana que vem estarei apresentando diversos eventos técnicos na Green. São todos gratuitos, com certificado e coffee-break.

Alem dos 7 eventos que apresentarei, o Rogério Molina irá apresentar mais 3 e o ultimo pelo Ademar Albertini, totalizando 11 diferentes palestras.

Para quem quiser se inscrever: http://www.green.com.br/eventosdeti/inscricao.aspx

Sharepoint 2007 para Desenvolvedores
Marcelo Sincic
27/7 - Manhã
9:00 às 12:00h
System Center - SCOM, SSCM e SDPM
Marcelo Sincic
28/7 - Manhã
9:00 às 12:00h
SQL Server 2008 Show Case
Marcelo Sincic
29/7 - Noite
19:00 às 22:00h
O Mercado de TI para Profissionais Certificados
Marcelo Sincic
31/7 - Noite
19:00 às 22:00h
Exchange 2007 para Administradores do Exchange 2003
Marcelo Sincic
03/8 - Noite
19:00 às 22:00h
Visual Studio 2008 - Integração com WPF, WCF e Silverlight
Marcelo Sincic
05/8 - Noite
19:00 às 22:00h
Windows 2008 R2 com Windows 7
Marcelo Sincic
07/8 - Noite
19:00 às 22:00h