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