访问魔兽世界军械库时WebClient安全性错误

时间:2010-05-24 20:43:01

标签: c# silverlight security world-of-warcraft

我正在努力拼凑出问题的解决方案。 基本上我使用Silverlight 4和C#4.0来访问魔兽世界的军械库。 如果有人这样做了 - 请提供工作的.net 4.0代码。

我试图运行的代码是(e.Error包含一个安全错误):

private void button10_Click(object sender, RoutedEventArgs e)
        {
            string url = @"http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted and Talented"; 
            WebClient wc = new WebClient();

            // HOW DO I ADD A USER AGENT STRING (RESPONSE MAY VARY (I.E. HTML VS XML) IF PAGE THINKS CALL IS NOT CAPABABLE OF SUPPORTING XML TRANSFORMATIONS) 
            //wc.ResponseHeaders["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";

            wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
            wc.DownloadStringAsync(new Uri(url));    
        }

        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                string result = e.Result;

                XDocument ArmouryXML = XDocument.Parse(result);

                ShowGuildies(ArmouryXML);
            }
            else
            {
                MessageBox.Show("Something is complaining about security but not sure what!");
            }
        } 

备注:

  1. C#4.0
  2. 军械库是一个XML文件 - 但我相信如果请求不是来自支持XML转换的浏览器,它将恢复为html。但我不认为我到目前为止。
  3. 军械库上有一个跨域政策文件 - 这可能是错误的原因(不确定!
  4. 我已上传到制作服务器
  5. 我使用IIS网站在本地测试
  6. 我疯了!
  7. 网站建议通过创建WebProxy可以克服这个问题 - 但我不知道如何做到这一点。
  8. 如果有人能够接受这一挑战并告诉我们所有可能的事情,那就太棒了。我首先选择非代理解决方案,然后尝试代理。

    错误明细:

    e.Error = {System.Security.SecurityException ---> System.Security.SecurityException:安全性错误。    在System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)    在System.Net.Browser.BrowserHttpWebRequest。<> c__DisplayClass5。

    那些能够在睡眠中解决这个问题的智能大师?

    谢谢,如果你能提供帮助。

3 个答案:

答案 0 :(得分:3)

在浏览器中运行Silverlight应用程序时,silverlight应用程序可能只对来自安装应用程序的同一域的URL发出请求。例如,如果您的silverlight应用程序是从http://yoursite.com/yourapp.xap安装的,则只能对http://yoursite.com/上的其他网址发出WebClient请求。您在这里的选择是创建一个代理脚本,从您的服务器请求WoW军械库,让您的Silverlight应用程序命中该代理,或运行浏览器外的Silverlight并请求完全信任。

编辑:通常,最佳选择是跨域策略文件,如here所述。遗憾的是,wowarmory.com似乎没有实现跨域策略文件。

答案 1 :(得分:1)

你走在正确的轨道上,你只需要设置用户代理。

private void button10_Click(object sender, RoutedEventArgs e)
    {
        string url = @"http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted and Talented"; 
        WebClient wc = new WebClient();

        // HOW DO I ADD A USER AGENT STRING (RESPONSE MAY VARY (I.E. HTML VS XML) IF PAGE THINKS CALL IS NOT CAPABABLE OF SUPPORTING XML TRANSFORMATIONS) 
        //wc.ResponseHeaders["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";

        wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
        wc.DownloadStringAsync(new Uri(url));    
    }

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            string result = e.Result;

            XDocument ArmouryXML = XDocument.Parse(result);

            ShowGuildies(ArmouryXML);
        }
        else
        {
            MessageBox.Show("Something is complaining about security but not sure what!");
        }
    } 

答案 2 :(得分:1)

已解决 - 由于跨域安全性和标头修改限制,使用WCF服务充当代理。感谢您的所有建议。