Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf Dataservice身份验证不适用于serviceContext.GetReadStreamUri(..)_Wpf_Authentication_Odata_Wcf Data Services - Fatal编程技术网

Wpf Dataservice身份验证不适用于serviceContext.GetReadStreamUri(..)

Wpf Dataservice身份验证不适用于serviceContext.GetReadStreamUri(..),wpf,authentication,odata,wcf-data-services,Wpf,Authentication,Odata,Wcf Data Services,我有一个Odata服务和一个WPF客户端应用程序。 一些Odata服务实体具有附加到它们的映像(即客户端) 只要我不应用身份验证,流媒体就可以工作。我可以查看和更改图像。一旦我强制执行了身份验证,所有工作都会按预期进行,因为凭证已签出。除了那张照片以外,其他的都是。以下是相关的代码步骤/片段 窗口构造函数代码 bool iv = System.Web.Security.Membership.ValidateUser("userName", "pass"); ManageService = new

我有一个Odata服务和一个WPF客户端应用程序。 一些Odata服务实体具有附加到它们的映像(即客户端)

只要我不应用身份验证,流媒体就可以工作。我可以查看和更改图像。一旦我强制执行了身份验证,所有工作都会按预期进行,因为凭证已签出。除了那张照片以外,其他的都是。以下是相关的代码步骤/片段

窗口构造函数代码

bool iv = System.Web.Security.Membership.ValidateUser("userName", "pass");
ManageService = new InventoryContext(new Uri(...));
ManageService.SendingRequest += new EventHandler<SendingRequestEventArgs (ManageService_SendingRequest);
获取数据的调用是使用后台工作程序异步的 查询方法()

获取客户端

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));
var res=e.结果为DataServiceCollection;
DataContext=res[0]//无论有无身份验证,这些都可以正常工作
//下一行,将流绑定到映像,抛出“unauthenticated”
//如果禁用了身份验证,它将正常工作
imgClient.Source=新的BitmapImage(ManageService.GetReadStreamUri(DataContext));
如果我进行调试,通常通过任何查询请求调用的SendingRequest方法不会在调用GetReadStreamUri(…)时触发。 这就是我被卡住的地方,如何对服务进行身份验证以获取流

另外,我将ManageService.GetReadStreamUri(DataContext)生成的URI经过浏览器,它可以工作,如果登录,图像将显示在浏览器中


有人有什么想法吗?

SendingRequest处理程序只会在DataServiceContext类(您的ManageService)发送请求时启动。但是在图片的情况下,您只能从DataServiceContext获取URL,然后让BitmapImage实际向该URL发出HTTP请求。因此,事件不会针对该请求触发。我不知道BitmapImage是否有办法让您连接到HTTP请求管道(我认为没有)。
您可以自己发出该请求,然后使用响应流作为位图图像的输入,在这种情况下,您可以完全控制该请求,从而可以根据需要实施身份验证。

SendingRequest处理程序将仅对DataServiceContext类(您的ManageService)发送的请求触发。但是在图片的情况下,您只能从DataServiceContext获取URL,然后让BitmapImage实际向该URL发出HTTP请求。因此,事件不会针对该请求触发。我不知道BitmapImage是否有办法让您连接到HTTP请求管道(我认为没有)。
您可以自己发出该请求,然后使用响应流作为位图图像的输入,在这种情况下,您可以完全控制该请求,从而可以根据需要实施身份验证。

Thanx@Vitek,我理解第一部分,我不知道您自己发出该请求是什么意思。您的意思是我应该使用GetReadStream()而不是GetREadStreamUri()?或者您可以使用例如HttpWebRequest类和GetREadStreamUri返回的URI来自己检索图像(而不是使用DataServiceContext为您获取图像)。好的,我将co更改为使用GetReadStream(),并且它现在可以正常工作,正如预期的那样。再次感谢您的指针。为了结束本文,我使用了DataServiceStreamResponse resStream=ManageService.GetReadStream(DataContext);BitmapImage imageFromStream=新的BitmapImage();BimageFromStream.BeginInit();imageFromStream.StreamSource=resStream.Stream;imageFromStream.CacheOption=BitmapCacheOption.OnLoad;imageFromStream.EndInit();imgClient.Source=imageFromStream;Thanx@Vitek,我理解第一部分,我不知道你自己发出请求是什么意思。您的意思是我应该使用GetReadStream()而不是GetREadStreamUri()?或者您可以使用例如HttpWebRequest类和GetREadStreamUri返回的URI来自己检索图像(而不是使用DataServiceContext为您获取图像)。好的,我将co更改为使用GetReadStream(),并且它现在可以正常工作,正如预期的那样。再次感谢您的指针。为了结束本文,我使用了DataServiceStreamResponse resStream=ManageService.GetReadStream(DataContext);BitmapImage imageFromStream=新的BitmapImage();BimageFromStream.BeginInit();imageFromStream.StreamSource=resStream.Stream;imageFromStream.CacheOption=BitmapCacheOption.OnLoad;imageFromStream.EndInit();imgClient.Source=imageFromStream;
var query = from o in ManageService.Clients where o.ClientUUID.Equals((Guid)e.Argument)
...
e.Result = query;
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));