У меня есть служба Odata и клиентское приложение WPF.
К некоторым сервисным объектам Odata прикреплены изображения (например, клиент).
Потоковая передача работает до тех пор, пока я не применяю аутентификацию. Я могу просматривать и изменять изображения. Как только я применяю аутентификацию, все работает, как и ожидалось, учитывая учетные данные. Все, кроме изображений, которые есть. Вот соответствующие шаги кода / бекасы.
Код конструктора окон
bool iv = System.Web.Security.Membership.ValidateUser("userName", "pass");
ManageService = new InventoryContext(new Uri(...));
ManageService.SendingRequest += new EventHandler<SendingRequestEventArgs (ManageService_SendingRequest);
ManageService_SendingRequest code
//attach the authentication cookie to the request header
((HttpWebRequest)e.Request).CookieContainer = ((ClientFormsIdentity)Thread.CurrentPrincipal.Identity).AuthenticationCookies;
Вызов для извлечения данных является асинхронным с использованием фонового рабочего.
Метод запроса ()
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(FetchClient);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(FetchClientsCompleted);
worker.RunWorkerAsync(ClientUUID);
FetchClient
var query = from o in ManageService.Clients where o.ClientUUID.Equals((Guid)e.Argument)
...
e.Result = query;
FetchClientsCompleted
var res = e.Result as DataServiceCollection<Client>;
DataContext = res[0]; //this is all working, with and without authentication
//the next line, binding the stream to the image throws 'unauthenticated'
//it works well if authentication is disabled
imgClient.Source = new BitmapImage(ManageService.GetReadStreamUri(DataContext));
если я отлаживаю, метод SendingRequest, обычно вызываемый с любым запросом, НЕ запускается, вызывая GetReadStreamUri (...).
Вот где я застрял, что нужно сделать для аутентификации в сервисе для получения потока?
Кроме того, я взял URI, сгенерированный ManageService.GetReadStreamUri (DataContext), вставил его в браузер, и он работает, изображение отображается в браузере, если оно зарегистрировано.
У кого-нибудь есть идеи?