如何与Silverlight 5应用程序中的TFSOData服务进行通信

时间:2013-10-30 20:41:45

标签: c# silverlight odata azure-devops

我试图从在线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文件,我可以看到它们都允许*,所以我应该能够访问我想要的内容。

1 个答案:

答案 0 :(得分:0)

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