使用Silverlight调用WCF服务的性能

时间:2012-09-06 20:35:55

标签: wcf performance web-services silverlight

我遇到的问题是从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(几秒)之间的巨大差异。

1 个答案:

答案 0 :(得分:0)

几个月前,我们也从WCF达到了这个速度。 为什么它很慢我们不知道。 我猜SOAP通常有点慢(很多开销)以及不具备所有性能的序列化器。

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

我猜测银光被剥光了.net与它有关。

我们还使用纯序列化器进行了一些测试。通过将wcf使用的xml /二进制序列化器切换到costum JSON序列化器,我们得到了巨大的推动。唉,用Silverlight在WCF中切换序列化器并不容易。