我正在从WCF服务向Silverlight客户端提取数据(图像,200-400kb),并注意到每次此类消息到达时Silverlight会停止几分之一秒。它并不是很严肃,但动画停止了一段时间,整个用户体验都被破坏了。
提问时间:
1)您认为使用WebClient会有益吗?
2)Silverlight中的“普通”WCF客户端(“正常”是指事件驱动的场景)是否在主(调用)线程或后台反序列化数据协定?
3)您是否认为从XML中的数据协定反序列化二进制对象所需的开销(+由于Base64 XML编码而导致的数据大小更大)比额外的服务器往返更大/更小(在这种情况下,数据合同只包含图像的URL和我可以使用WebClient来获取它 - 因此另一次旅行??
4)是否可以在后台线程(而不是UI线程)中从byte []数组创建Image?
非常感谢任何帮助,想法和建议。
谢谢,
的Karol
PS:我无法使用DeepZoom,因为业务要求与DeepZoom方案不匹配。
答案 0 :(得分:0)
WCF的主要目的是提供一种从一个地方到另一个地方获取结构化数据的方法。我不认为图像是它的意思。我认为使用WebClient可能会更好,更快。此外,您可能希望进一步了解是否有另一种专门用于使用Silverlight从服务器下载资源文件的解决方案。
更新: 实际上,如果您只是使用常规的Image控件,您可以将Source属性设置(或更改)为新的Bitmap - 这将自动触发从服务器位置下载图像:
img.Source = new BitmapImage(new Uri("http://the.image.url/image.jpg"));
然后,您可以以编程方式将Image控件添加到Silverlight文档中。
答案 1 :(得分:0)
您也可以在服务器端使用返回Image的HTTP Handler类。我假设你选择使用WCF服务,因为服务器端有一些逻辑确定应该返回哪个图像。使用HTTP处理程序,您可以选择在服务器端执行该逻辑,并在一次往返中返回图像。
让Handler调用您的WCF服务来获取URL,检索图像并将其返回到HTTP响应流中。如果正确设置MIME类型,则客户端(在本例中为Silverlight)将不知道其中的差异。