13

Silverlight を簡単なサンプル アプリケーションで動作させようとしており、別のコンピューターでレスト サービスを呼び出しています。残りのサービスを持つサーバーには、次のような clientaccesspolicy.xml があります。

<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/" include-subpaths="true"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

そして、(少なくとも私が実行したネットワーク トレースによると) ピックアップされており、crossdomain.xml に対する要求はありません。C# コードは次のようになります。

public Page()
{
    InitializeComponent();

    string restUrl = "http://example.com/rest_service.html?action=test_result";

    WebClient testService = new WebClient();
    testService.DownloadStringCompleted += new DownloadStringCompletedEventHandler(testService_DownloadStringCompleted);
    testService.DownloadStringAsync(new Uri(restUrl, UriKind.Absolute));

}

void testService_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
        LoadTreeViewWithData(e.Result);
    }
}

ただし、常に次のセキュリティ エラーが返されます。

{System.Security.SecurityException ---> System.Security.SecurityException: セキュリティ エラーです。
   System.Net.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) で
   System.Net.BrowserHttpWebRequest.c__DisplayClass5.b__4 (オブジェクト sendState) で
   System.Net.AsyncHelper.c__DisplayClass2.b__0 (オブジェクト sendState) で
   --- 内部例外スタック トレースの終了 ---
   System.Net.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod、オブジェクトの状態) で
   System.Net.BrowserHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) で
   System.Net.WebClient.GetWebResponse (WebRequest 要求、IAsyncResult 結果) で
   System.Net.WebClient.DownloadBitsResponseCallback (IAsyncResult 結果) で}

私は何を間違っていますか?また、なぜセキュリティ エラーが役立つ情報を教えてくれないのでしょうか?

4

3 に答える 3

8

まだ行っていない場合は、最初に、メイン コードが機能することを確認するためだけに、restUrl を同じサーバー (または必要に応じて独自のサーバー) 上の静的 HTML ページのような単純なものに変更してみます。

セキュリティ例外がその REST URL (またはサイト) に固有のものであると仮定すると、Silverlight 2 の URL アクセス制限に関する記事を参照できます。よりよく知られているクロス ドメイン ルールに加えて、ファイル タイプと「インターネット ゾーン」に関連するいくつかの明白でないセキュリティ ルールがあります。

Silverlight の多くの例外メッセージがあまり役に立たないという苦情に賛成です。上記で参照した MSDN の記事には、面白いメモが含まれています。

これらのアクセス ポリシーのいずれかに違反した結果、ユーザーがエラーを受け取った場合、そのエラーは正確な原因を示していない場合があります。

于 2008-10-31T21:29:29.547 に答える
4

clientaccesspolicy.xml の allow-from 要素に http-methods="*" を追加しないと、クロスドメイン REST HTTP 削除を実行できませんでした。http-methods 属性を追加すると、すべてが機能し、SecurityException が発生しなくなりました。

于 2011-08-18T20:35:27.557 に答える
0

localhost を信頼済みサイトのリストに追加するまで、ローカル アプリケーション ( http://localhost/ )で "信頼済みサイト" から HTML ページを読み込めませんでした。

Silverlight は、「クロス ゾーン」呼び出し (私の場合、ローカル ネットワークと信頼済み​​サイト) と「クロス スキーム」呼び出し (例: http と https) を防ぎます。

これまでのところ、「crossdomain.xml」ファイルでのみ機能します。最初に「clientaccesspolicy.xml」を試しましたが、うまくいきませんでした。

于 2010-01-12T13:41:36.187 に答える