1

我遇到了从 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(几秒)之间的差异很大。

4

1 回答 1

0

几个月前,我们也遇到了 WCF 的这个减速带。为什么它很慢我们不知道。我猜 SOAP 通常有点慢(很多开销),而且序列化程序的性能也不是那么好。

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

我猜想silverlight与它被剥离了.net与它有关。

我们还用纯序列化器做了一些测试。将 wcf 使用的 xml/binary 序列化程序切换为 costum JSON 序列化程序,我们得到了巨大的提升。唉,用 silverlight 切换 WCF 中的序列化程序并不容易。

于 2013-03-19T17:52:02.767 回答