1

非同期呼び出しからフォームに書き込もうとしています。私がオンラインで見た例は、これは機能するはずですが、エラーが発生し続けることを示しています。

最初に、Disbatcherがpを呼び出すことはありませんが行われる呼び出し。次に、req.EndGetResponse(a)の呼び出しでSystem.Security.SecurityExceptionを取得します。

問題の原因は何ですか?

public partial class Page : UserControl
{
    Uri url = new Uri("http://www.google.com", UriKind.Absolute);
    HttpWebRequest req;

    private delegate void PrintToUIThread(string text);
    PrintToUIThread p;

    public Page()
    {
        InitializeComponent();
        req = (HttpWebRequest)WebRequest.Create(url);
        p = new PrintToUIThread(print);
        req.BeginGetResponse(new AsyncCallback(WebComplete), req);
    }

    void WebComplete(IAsyncResult a)
    {
        try
        {
            Dispatcher.BeginInvoke(p);
            HttpWebRequest req = (HttpWebRequest)a.AsyncState;
            HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(a);
            Dispatcher.BeginInvoke(p);
        }
        catch (Exception ex)
        {
            print(ex.ToString());
        }
    }

    private void print(string text)
    {
        PageTextBox.Text = text;
    }

    private void print()
    {
        PageTextBox.Text = "Call From Invoke";
    }
}
4

1 に答える 1

1

私が見る限り、リクエスト/レスポンス コードに本質的な問題はありません。おそらく、Google の crossdomain.xml ファイルによって暗示されたクロスドメインの制限により、セキュリティ例外が発生しています。

これは Google の crossdomain.xml です。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <site-control permitted-cross-domain-policies="by-content-type" />
</cross-domain-policy>

これが実際に言っているのは、「ヘイ、RIA アプリ、プロキシを使用してください」ということだけです。基本的に、clientaccesspolicy.xml ファイルを配置した「使いやすい」サーバーで WCF または ASMX Web サービス呼び出しをセットアップし、サーバーを使用して http 要求を作成し、結果を返します。Google が JSONP をサポートしているかどうかはわかりませんが、それも試してみてください。

于 2009-01-29T20:22:55.903 に答える