locked
Cross Domain - Acessar servidor externo RRS feed

  • Pergunta

  • Boa tarde, estou com uma duvida sobre acessar um pagina externa (fora do servidor onde está hospedado a aplicação silverlight), já tentei acessar via HttWebRquest e WebClient já fiz o teste para saber se na raiz existia o arquivo policy e existia o arquivo para o flash crossdomain.xml.

     

    Então tenho a seguinte duvida é necessário definir alguma coisa na aplicação para ela poder procurar pelo o arquivo ou tenho que ter o arquivo policy em ambos os locais tanto no local que pretendo acessar como no local onde está hospedado a aplicação?

     

    Estou tentando acessar via WebClient ou via HttpWebRequest, o local que estou querendo acessar é a api do twitter.



    Eu fiz mais alguns testes com firebug e está retornando que ele achou o arquivo crossdomain.xml e o seu conteudo é:
    <?xml version="1.0" encoding="UTF-8"?>
    <cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
     <allow-access-from domain="twitter.com" />
    	<allow-access-from domain="api.twitter.com" />
    	<allow-access-from domain="search.twitter.com" />
    	<allow-access-from domain="static.twitter.com" />
    	<site-control permitted-cross-domain-policies="master-only"/>
     <allow-http-request-headers-from domain="*.twitter.com" headers="*" secure="true"/>
    </cross-domain-policy>
    Só que continua a retornar o erro:
    Exception:System.Security.SecurityException ---> System.Security.SecurityException: Security error.
      em System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
      em System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
      em System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
      --- Fim do rastreamento de pilha de exceções internas ---
      em System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
      em System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
      em TwitterLight.MainPage.ReadCallBack(IAsyncResult s)
    Data:  em System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
      em System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
      em TwitterLight.MainPage.ReadCallBack(IAsyncResult s)

    Criei um arquivo crossdomain.xml com o sequinte conteudo, e pedi para aplicação se conectar ao servidor atravéz de um endereço diferente e de uma porta diferente e se conectou, tem algum motivo para o qual a aplicação não estar aceitando o arquivo crossdomain do outro servidor?
    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM 
    	"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
     <allow-http-request-headers-from domain="*" headers="*"/>
    </cross-domain-policy>
    terça-feira, 17 de maio de 2011 16:35

Respostas

  • Achei o defeito.

     

    <?xml version="1.0" encoding="UTF-8"?>
    <cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
     <allow-access-from domain="twitter.com" />
            <!-- Começa o problema -->
    	<allow-access-from domain="api.twitter.com" />
    	<allow-access-from domain="search.twitter.com" />
    	<allow-access-from domain="static.twitter.com" />
    
    	<site-control permitted-cross-domain-policies="master-only"/>
     <allow-http-request-headers-from domain="*.twitter.com" headers="*" secure="true"/>
    </cross-domain-policy>
    

     

    Apartir da tag <!-- Começa o problema --> tem uma afirmação para a aplicação que só perpitido acessar esse dominio se for apartir do dominio (api.twitter.com, etc)

    Então a aplicação não consegue entrar em contato com o dominio e não obtem as informações que necessitamos.

     

    Eu resolvi meu problema fazendo o Silverlight fazer o trabalho duro de gerar a assinatura OAuth e o meu serivodr se conecta atravéz de Socket ao servidor do twitter e envia as informações e as obtem.

     

    Se existir uma outra forma, faz um post abaixo porque eu não consegui de outra maneira se não essa.

     

     


    Agredecido pela ajuda sempre! Qualquer opnião é valida desde que tenha fundamento! http://darksp.myvnc.com
    quarta-feira, 18 de maio de 2011 00:48