質問

私はティム・ホイヤーの研究を続けてきました Silverlight チュートリアル, ここでは、Twitter を検索するための基本的なインターフェイスを設定します。昨日からチュートリアルを開始し、ステップ 3 まで完了しました。すべてうまくいきました。ただし、現在では、OpenReadCompleted ハンドラーで「System.Security.SecurityException」エラーが発生せずに Twitter を呼び出すことはできません。これは、Heuer 独自のコードの実行にも当てはまります。これはクロスドメイン アクセスの問題だと思いますが、Twitter の検索 API ではそうではないはずです。

使用する ウェブ開発ヘルパー, 、GET が 2 回失敗したことがわかります。 http://search.twitter.com/clientaccesspolicy.xml, 、続いて読み取りが成功すると、 http://search.twitter.com/crossdomain.xml. 。最初のファイルは存在しますが、2 番目のファイルは存在しないので、これは私にとっては正常なことのように思えます。私は完全に行き詰まっており、Silverlight を初めて使用するため、他に何を試せばよいのかわかりません。助けていただければ幸いです。

ツイッターでの呼びかけは以下の通り。

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

エラーの詳細は次のとおりです。

at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) at System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult result)

役に立ちましたか?

解決

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 ドメインのいずれかからアクセスしている場合を除き、アクセスすることはできません。

アップデート ただ ツイッターで読む 再び制限を緩和したとのこと。新しい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>

これで、コードが動作し始めるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top