2012-09-06 90 views
1

是很慢的。情况与http://forums.silverlight.net/t/148027.aspx/1中列出的情况非常相似。像那张海报一样,我建立了一个简单的Silverlight应用程序项目和一个简单的控制台应用程序项目。在每个服务中,我添加了一个服务引用到我的WCF服务,并向该服务添加了一些测试调用。然而,每次通话所花费的时间却截然不同。控制台应用程序按毫秒级进行调用。 Silverlight应用程序可以在任何地方使用3-5秒。性能使用Silverlight调用我有一个问题,即调用Silverlight的一个WCF Web服务WCF服务

在我挂到上面的帖子,海报时改变了他的服务,使用二进制消息编码,速度差距消失。但是,在我的情况下,无论我使用的是二进制消息编码还是文本消息编码,速度差距都很大。

什么能解释这种速度差?我已经通过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(几秒钟)。

回答

0

几个月前,我们也打这个速度碰撞的WCF。 为什么它很慢,我们不知道。 我猜SOAP总体来说有点慢(大量的开销)以及并非所有性能的序列化程序。

我们最近切换到了REST架构(服务堆栈,但web API/asp.net mvc工作正常,我们只是更喜欢服务堆栈),我们的性能从2倍到15倍的任何地方速度。 WCF在接受和序列化/反序列化请求方面速度非常慢。

我猜它Silverlight的剥离下来的.NET有事情做吧。

我们也做了一些试验用纯串行。将wcf使用的xml/binary二进制序列化器转换成一个JSON序列化器,我们得到了巨大的提升。唉,用Silverlight切换WCF中的序列化器并不容易。