0

J'ai travaillé sur le Silverlight tuturial de Tim Heuer, dans lequel vous avez configuré une interface de base pour rechercher sur Twitter. J'ai commencé le tutoriel hier, en terminant à l'étape 3. Tout fonctionnait bien. Maintenant, cependant, je ne peux pas appeler Twitter sans avoir une erreur "System.Security.SecurityException" dans le gestionnaire OpenReadCompleted. Cela s'applique également au code propre à Heuer. Je suppose que c'est un problème d'accès au domaine, mais cela ne devrait pas être le cas avec l'API de recherche de Twitter.Pourquoi ma requête Web Twitter est-elle en train d'exploser?

En utilisant Web Development Helper, je vois 2 GET en échec à http://search.twitter.com/clientaccesspolicy.xml, suivi par une lecture réussie de http://search.twitter.com/crossdomain.xml. Cela me semble normal, puisque le premier fichier existe et le second non. Je suis complètement coincé, et étant nouveau à Silverlight, je ne sais pas quoi d'autre à essayer. J'apprécierais toute aide.

L'appel Twitter est comme suit:

WebClient proxy = new WebClient(); 
proxy.OpenReadCompleted += OnReadCompleted; 
proxy.OpenReadAsync(
    new Uri(@"http://search.twitter.com/search.atom?q=abc&since_id=0")); 

Ce sont les détails de l'erreur:

à System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, état objet) à System.Net .Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) à System.Net.WebClient.GetWebResponse (WebRequest demande, résultat IAsyncResult) à System.Net.WebClient.OpenReadAsyncCallback (suite IAsyncResult)

Répondre

2

Il semblerait que Twitter ait modifié la politique d'accès client de son domaine de recherche pour ne plus autoriser les requêtes d'autres domaines. Le fichier actuel ressemble à:

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

Ce qui signifie que, sauf si vous venez d'un de ces * .twitter.com domaines répertoriés, vous pouvez pas y accéder.

Mise à jour Juste read on twitter qu'ils ont de nouveau assoupli les restrictions. Le nouveau fichier crossdomain.xml est beaucoup mieux:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
     <allow-access-from domain="*" /> 
</cross-domain-policy> 

Alors maintenant, votre code devrait commencer à fonctionner.

+0

Je pensais que c'était à quoi ça ressemblait, mais leur changelog (http://apiwiki.twitter.com/REST-API-Changelog) dit qu'il n'a pas changé depuis Septembre. Donc c'est juste ma malchance qu'ils ont changé ça hier soir ou ce matin? – Dov

+0

C'est certainement le cas. J'avais supposé que leur API ne changerait pas soudainement, mais cela semble avoir été le cas. http://groups.google.com/group/twitter-development-talk/browse_frm/thread/4adf2a0297ce052d – Dov