Xml 通过WCF与WebClient下载图像

Xml 通过WCF与WebClient下载图像,xml,wcf,silverlight,web-services,Xml,Wcf,Silverlight,Web Services,我正在从WCF服务获取数据(图像,200-400kb)到Silverlight客户端,并注意到每次此类消息到达Silverlight时,Silverlight都会停止几秒钟。这不是很严重,但动画会停止一段时间,整个用户体验都被破坏了 提问时间: 1) 您认为改用WebClient会有好处吗 2) Silverlight中的“普通”WCF客户端(我指的是事件驱动场景)是在主(调用)线程中还是在后台反序列化数据契约 3) 您是否认为从XML格式的数据协定中反序列化二进制对象所需的开销(+由于Base

我正在从WCF服务获取数据(图像,200-400kb)到Silverlight客户端,并注意到每次此类消息到达Silverlight时,Silverlight都会停止几秒钟。这不是很严重,但动画会停止一段时间,整个用户体验都被破坏了

提问时间:

1) 您认为改用WebClient会有好处吗

2) Silverlight中的“普通”WCF客户端(我指的是事件驱动场景)是在主(调用)线程中还是在后台反序列化数据契约

3) 您是否认为从XML格式的数据协定中反序列化二进制对象所需的开销(+由于Base64 XML编码,数据大小更大)大于/小于到服务器的额外往返行程(在这种情况下,数据协定将只包含到图像的URL,而我无法使用WebClient获取它-因此需要另一次行程)

4) 是否可以从后台线程(而不是UI线程)中的字节[]数组创建映像

非常感谢任何帮助、想法和建议

谢谢

卡罗尔


PS:我不能使用DeepZoom,因为业务需求与DeepZoom场景并不匹配。

WCF的主要目的是提供一种从一个地方到另一个地方获取结构化数据的方法。我不认为图像是它的目的。我认为使用WebClient可能会更好更快地工作。此外,您可能还想进一步了解是否有其他解决方案专门用于使用Silverlight从服务器下载资源文件


更新: 实际上,如果您只是使用常规图像控件,您可以将Source属性设置(或更改)为新位图-这将自动触发从服务器位置下载图像:

img.Source = new BitmapImage(new Uri("http://the.image.url/image.jpg"));

然后,您可以通过编程将图像控件添加到Silverlight文档中。

您也可以在服务器端使用HTTP处理程序类返回图像。我假设您选择使用WCF服务,因为服务器端有一些逻辑决定应该返回哪个映像。使用HTTP处理程序,您可以选择在服务器端执行该逻辑,并在一次往返中返回映像


让处理程序调用您的WCF服务以获取URL、检索图像并在HTTP响应流中返回它。如果您正确设置MIME类型,客户端(在本例中为Silverlight)将不会知道差异。

谢谢Steve,最后我用REST协议创建了第二个端点,因此我可以从同一服务返回二进制图像,并通过WebClient在Silverlight中使用它。更新:我已经做了一些性能测试。如果有人感兴趣的话:通过REST的原始二进制比序列化为DataContract的相同数据快2.5倍。