我一直在通过Tim Heuer的Silverlight tuturial工作,在其中你设置了一个搜索Twitter的基本界面。我昨天开始学习本教程,完成了第3步。一切正常。但是,现在,如果没有在OpenReadCompleted处理程序中收到“System.Security.SecurityException”错误,我就无法调用Twitter。这也适用于运行Heuer自己的代码。我认为这是一个跨域访问问题,但Twitter的搜索API不应该这样。
使用Web Development Helper,我看到2次http://search.twitter.com/clientaccesspolicy.xml失败的GET,然后成功阅读http://search.twitter.com/crossdomain.xml。这对我来说似乎很正常,因为第一个文件存在,而第二个文件不存在。我完全陷入困境,并且是Silverlight的新手,不知道还有什么可以尝试的。我很感激任何帮助。
Twitter的电话如下:
WebClient proxy = new WebClient();
proxy.OpenReadCompleted += OnReadCompleted;
proxy.OpenReadAsync(
new Uri( @"http://search.twitter.com/search.atom?q=abc&since_id=0" ) );
这些是错误详情:
在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state) 在System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在System.Net.WebClient.GetWebResponse(WebRequest请求,IAsyncResult结果) 在System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult结果)
答案 0 :(得分:2)
看起来Twitter已将其搜索域上的客户端访问策略更改为不再允许来自其他域的请求。当前文件如下所示:
<?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>
这意味着除非您来自列出的* .twitter.com域之一,否则您无法访问它。
更新只是read on twitter他们再次放宽了限制。新的crossdomain.xml要好得多:
<?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>
所以现在你的代码应该开始工作了。