4

因此,关于新 Silverlight 4 测试版的最佳部分之一是他们最终实现了网络堆栈中缺失的一大功能 - 网络凭据!

在下面我有一个工作请求设置,但由于某种原因,当请求返回时我收到“安全错误” - 这是因为 twitter.com 拒绝了我的 api 调用还是我在代码中缺少的东西?

可能需要指出的是,当我通过 fiddler 观看此代码执行时,它显示跨域的 xml 文件已成功拉下,但这是 fiddler 显示的最后一个请求......

public void RequestTimelineFromTwitterAPI()
        {
               WebRequest.RegisterPrefix("https://", System.Net.Browser.WebRequestCreator.ClientHttp);

               WebClient myService = new WebClient();
               myService.AllowReadStreamBuffering = true;
               myService.UseDefaultCredentials = false;
               myService.Credentials = new NetworkCredential("username", "password");
               myService.UseDefaultCredentials = false;

               myService.OpenReadCompleted += new OpenReadCompletedEventHandler(TimelineRequestCompleted);
               myService.OpenReadAsync(new Uri("https://twitter.com/statuses/friends_timeline.xml"));
        }

        public void TimelineRequestCompleted(object sender, System.Net.OpenReadCompletedEventArgs e)
        {
            //anytime I query for e.Result I get a security error
        }
4

1 回答 1

2

我发现了 2 个导致此请求引发安全异常的问题

1) - 在Tim Heuer 的这段视频中,我发现我的 VS2010 w/Silverlight 4 工具包安装与最终版本不匹配,所以我错过了提供复选框的“浏览器设置之外”对话框中显示的选项用于“在浏览器外运行时需要提升信任”。

在上面列出的视频中,Tim 对此进行了检查,以便 Silverlight 应用程序可以与 twitter API 对话

但是因为我的应用程序没有这个选项,所以我不得不手动编辑 xml 文件,所以它看起来像下面这样。您可以在项目文件夹的属性下或直接在 Visual Studio 中找到此 xml。

<OutOfBrowserSettings ShortName="TrustedNetworkApp Application" EnableGPUAcceleration="False" ShowInstallMenuItem="True">
  <OutOfBrowserSettings.Blurb>TrustedNetworkApp Application on your desktop; at home, at work or on the go.</OutOfBrowserSettings.Blurb>
  <OutOfBrowserSettings.WindowSettings>
    <WindowSettings Title="TrustedNetworkApp Application" Height="480" Width="640" />
  </OutOfBrowserSettings.WindowSettings>
  <OutOfBrowserSettings.SecuritySettings>
    <SecuritySettings ElevatedPermissions="Required" />
  </OutOfBrowserSettings.SecuritySettings>
  <OutOfBrowserSettings.Icons />
</OutOfBrowserSettings>

注意**安全设置 ElevatedPermissions="Required"

保存后,就相当于像 Tim 在视频中所做的那样检查它。

2) - 当我观看蒂姆的视频时,我注意到你必须在浏览器之外调试它才能让它工作。所以安装应用程序并在浏览器之外运行它。这个应用程序现在可以工作了。

我将写一篇简短的博客文章来总结我在测试版下使用网络堆栈的经验,并为任何感兴趣的人提供链接。

更新

如果有人感兴趣,我终于写了一篇关于我使用 Silverlight 4 构建浏览器 Twitter 客户端的经验的博客文章。

于 2009-11-23T21:05:05.403 回答