Silverlight调用WCF服务的性能



我遇到一个问题,从Silverlight调用WCF web服务非常慢。情况与http://forums.silverlight.net/t/148027.aspx/1。就像那张海报一样,我已经建立了一个简单的Silverlight应用程序项目和一个简单控制台应用程序项目。在每一个中,我都向WCF服务添加了一个服务引用,并向该服务添加了一些测试调用。然而,每次通话所需的时间却大不相同。控制台应用程序以毫秒为单位进行调用。Silverlight应用程序可以让它在3-5秒内完成。

在我链接到上面的帖子中,当发帖者将他的服务改为使用二进制消息编码时,速度差距消失了。然而,在我的情况下,无论我使用的是二进制消息编码还是文本消息编码,仍然存在较大的速度差距。

是什么原因造成了这种速度差?我已经通过fiddler验证了当我将请求和响应配置为使用二进制端点时,请求和响应都是二进制编码的。我还验证了,通过多次连续的web服务调用,慢速仍然存在,所以这不可能只是启动时间。问题一定出在Silverlight的某个方面。

以下是我用来测量时差的代码片段:

    var proxy = new WCFRef.WebServicesClient("binary");
    var callbegin = DateTime.Now;
    proxy.CallWSMethodAsync();
    var callend = DateTime.Now;
    var span = callend.Subtract(callbegin);
    Debug.WriteLine("call time: " + span.Seconds + "." + span.Milliseconds + " sec");

该代码中捕获的时间跨度就是我所说的控制台(几毫秒)和SL(几秒)之间的巨大差异。

几个月前,我们也遇到了WCF的这个减速带。我们不知道为什么它很慢。我想SOAP通常有点慢(大量开销),串行器的性能也不太好。

我们最近切换到了REST架构(服务堆栈,但web API/asp.net mvc也很好。我们只是更喜欢服务堆栈),我们的性能从原来的2倍提高到了15倍。WCF在接受和序列化/反序列化请求方面非常慢。

我猜银光已经被剥去了。球网和它有关。

我们还使用纯串行器进行了一些测试。从wcf使用的xml/二进制序列化程序切换为costumJSON序列化程序,我们得到了巨大的提升。遗憾的是,用silverlight关闭WCF中的序列化程序并不容易。

最新更新