c# – Silverlight 4最快的WCF绑定

我正在开发一个项目,其中Silverlight 4客户端调用返回大量数据的WCF Web服务.一些分析显示了这一点

> webservice方法的实际执行时间不到一秒(调用另一个服务器/生成一个非常大的数据集/等等,它已经在那里进行了相当优化)
>数据传输取决于网络,但通常不是问题 – 它可以采取它需要的任何东西
>客户端之间的时间收到http答案(我在Fiddler中看到它完成)和在Silverlight客户端中触发的Completed事件:~15秒(IE / firefox / chrome之间没有区别)

我认为15秒的延迟很大程度上用于反序列化.

我的绑定使用HttpTransport和BinaryMessageEncoding,并在其上使用gzip压缩.
Gzip压缩似乎不会对性能产生影响:无压缩和最大压缩级别之间的差异几乎不存在. http答案是~15 Mb未压缩和~400 kb压缩(即使使用二进制XML也需要很多开销!)

注意:Web服务是完全临时的,我对互操作性不感兴趣,并且在协议选择方面有完全的自由.

一个明显的解决方案是传输更少的数据,但引入分页需要在架构中进行一些当前不可行的重大更改.减少数据集也很困难,因为最终用户可以完全自定义解决方案,而且正如您所知,用户并不总是知道他们在做什么,最终会产生巨大的请求.

我留下了wcf绑定:这个项目以SL 2开始,并通过SL 3和SL 4演变,所以也许我错过了Silverlight 4中引入的某种更快的绑定.
是否有另一个更快的编码器(或绑定)我可以用来避免客户端上的反序列化瓶颈?

最佳答案 “作弊”怎么样(只提高预防性能)?

在第一次调用时返回一小部分数据,然后启动后台进程以获取所需的全部内容.如果您显示的数据是只读的,那么这可能会有所帮助.

编辑:查看优先级绑定…它允许您将多个数据源绑定到网格.如果稍后将返回慢速连接,silverlight将自动绑定新数据源…

点赞