2011-06-28 20 views
2

イントラネット用のSilverlight 4.0 Webアプリケーションを構築しています。このアプリケーションは、REST経由でサーバーに接続してデータを取得します。私は、要求を行うために、私はメソッドに次のコードを使用しています2010年SilverlightからRESTサービスを呼び出す

のVisual Studioを使用しています:

var wc = new WebClient(); 
const string uri = "http://server/api/statistics.svc/overall/"; 

wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); 
wc.OpenReadAsync(new Uri(uri, UriKind.Absolute)); 

マイOnReadCompletedイベントハンドラ:しようとしたときに私の問題が発生し

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    var buffer = new byte[e.Result.Length]; 

    e.Result.Read(buffer,0,(int)e.Result.Length); 

    var xmlstr = buffer.Aggregate(String.Empty, (current, t) => current + (char) t); 

    // Do something with xmlstr... 
} 

アプリケーションを実行します。例外がwc_OpenReadCompletedイベントハンドラにライン1に投げて、次の詳細を持っているされています

TargetInvocationException: An exception occurred during the operation, making the result invalid. Check InnerException for exception details. 

内部例外:

System.Security.SecurityException: Security error. 

私のRESTサービスは、認証の任意の並べ替えを使用していません。

私は次の設定でに位置clientaccesspolicy.xmlを作成しました:

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

あなたのヘルプは大歓迎です!

おかげで、

ジェフリー・ケビンPRY

私は私のxmlファイルに/ APIを/指定されなかったUPDATE

。問題は解決されました。

ありがとうございます!

答えて

2

Silverlightアプリケーションは、ダウンロードしたサーバーとクロスドメインポリシーファイルを持つサーバーにのみ接続できます。これはSame Origin Policyとして知られています。セキュリティ上の理由から、他のサーバーへの接続は拒否されます。

+0

これは正しく、私はhttp://server/clientaccesspolicy.xmlにあるclientaccesspolicy.xmlを持っています。上の内容を参照してください –

+0

私はclientaccesspolicy.xmlのサービスの前にapiを置いていませんでした...あなたの投稿が私にそれを再調査させたので、私はあなたにそれを与えるでしょう...ありがとう! –