我正在尝试将解决方案拼凑在一起。基本上,我将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来克服此问题 - 但是我并不是第一个线索如何做到这一点。

如果有人能够应对这一挑战并向我们展示一切可能,那就太好了。我首先更喜欢非蛋白质解决方案,然后尝试代理。

错误详细信息:

e.Error = {System.Security.SecurityException ---> System.Security.SecurityException:安全错误。在System.net.browser.browserhttpwebrequest.internalendgetResponse(iAsyncresult asyncresult)at system.net.net.browser.browserhttpwebrequest。<> c__displayClass5。

那里有任何聪明的主编码人员可以在睡眠中解决这个问题吗?

谢谢您可以提供帮助。

有帮助吗?

解决方案 3

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

其他提示

当在浏览器中运行Silverlight应用程序时,Silverlight应用程序只能从与该应用程序安装的应用程序相同的域向URL提出请求。例如,如果您的Silverlight应用程序是从 http://yoursite.com/yourapp.xap, ,您只能在其他URL上向其他URL提出WebClient请求 http://yoursite.com/. 。您的选项是创建一个代理脚本,该脚本从您的服务器中请求WOW ARMORY,并使您的Silverlight应用程序点击该代理,或者运行Silverlight Out-Out-Out-Browser并请求完全信任。

编辑:通常最好的选择是跨域策略文件 这里. 。可悲的是,Wowarmory.com似乎没有实现跨域策略文件。

您在正确的轨道上,您只需要设置用户代理即可。

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!");
        }
    } 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top