我遇到的问题是从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(几秒)之间的巨大差异。
答案 0 :(得分:0)
几个月前,我们也从WCF达到了这个速度。 为什么它很慢我们不知道。 我猜SOAP通常有点慢(很多开销)以及不具备所有性能的序列化器。
我们最近切换到REST架构(服务堆栈,但web API / asp.net mvc工作正常。我们只是更喜欢Service stack),我们的性能从2x上升到15x速度。 WCF在接受和序列化/反序列化请求方面非常缓慢。
我猜测银光被剥光了.net与它有关。
我们还使用纯序列化器进行了一些测试。通过将wcf使用的xml /二进制序列化器切换到costum JSON序列化器,我们得到了巨大的推动。唉,用Silverlight在WCF中切换序列化器并不容易。