1

我正在尝试从在线 TFS 服务器获取信息。OData 服务的端点地址是:https://tfsodata.visualstudio.com/DefaultCollection

我尝试使用基本身份验证对此服务进行身份验证,如下所示:

     _context = new TFSOData.TFSData(new Uri("https://tfsodata.visualstudio.com/DefaultCollection", UriKind.Absolute));

                _context.SendingRequest2 += (object sender, SendingRequest2EventArgs e) =>
                {

                    String creds = String.Format(CultureInfo.InvariantCulture, @"{0}\{1}:{2}", "mydomain", "myusername", "mypassword");
                    var bytes = Encoding.UTF8.GetBytes(creds);
                    var credstring = Convert.ToBase64String(bytes);
                    e.RequestMessage.SetHeader("Authorization", "Basic " + credstring);
                };

不幸的是,当我尝试在 Odata 服务上运行查询时,我总是从我的 LoadCompleted Callback 的 eventArgs 返回一个异常,而我正在运行的查询在我知道它不应该是空的时候返回空。

    {System.Security.SecurityException: Security error.}

我在安全方面做错了什么吗?我已经在浏览器中测试了此 odata 服务的备用凭据,它们工作正常。

重申一下,我在 silverlight 5 项目中这样做。在使用 e.requestheaders.add 等之前,我曾在 WPF 中使用过类似的方法,但在 Silverlight 中我没有这种方法。

编辑:

我还注意到使用 Fiddler 会转到 clientaccesspolicy.xml 文件,然后不会继续从服务中实际获取我想要的数据。显然这是 WPF 应用程序和 Silverlight 应用程序之间的区别,但是查看 clientaccesspolicy.xml 和 crossdomain.xml 文件,我可以看到它们都允许 *,所以我应该能够访问我想要的。

4

1 回答 1

0

这是因为服务器未设置为允许跨域资源共享。

于 2017-10-26T13:57:45.950 回答