我试图从在线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文件,我可以看到它们都允许*,所以我应该能够访问我想要的内容。
答案 0 :(得分:0)
这是因为服务器未设置为允许跨源资源共享。