オンライン 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 ファイルを見ると、両方とも * を許可しているため、必要なものにアクセスできるはずです。