对 Async WCF 的所有其他调用都很慢
Posted
技术标签:
【中文标题】对 Async WCF 的所有其他调用都很慢【英文标题】:Every other call to Async WCF is slow 【发布时间】:2011-06-27 11:56:36 【问题描述】:我正在使用 Rick Strahl 的这篇文章中的代码示例:http://www.west-wind.com/weblog/posts/324917.aspx 对 WCF 服务进行异步调用,效果很好。
我的问题是: 第一次调用 WCF 服务大约需要 20 毫秒,而下一次调用大约需要 1 秒 20 毫秒(执行完全相同的操作并接收完全相同的数据)。如果我重复这个过程,结果总是一样的。其他所有调用都比第一次多花一秒钟。
我尝试在我的服务上设置 InstanceContextMode:
[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.PerSession)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public abstract class AjaxPostBack : IAjaxPostBack
我还在服务上被调用的方法中设置了计时器,每次结果都是一样的(当然有一些毫秒差异,但没什么大不了的)
"JSON_Took":"00:00:00.0012939","Set_took":"00:00:00.0000274"
(这些值 - JSON_Took 和 Set_took - 是方法背后代码中的计时器。所以不是来自客户端-服务器-客户端的总时间。这只是为了说明实际代码耗时不是问题)
有什么想法吗?
如果您需要更多信息,请告诉我。
---- 有趣的更新 ----
我下载了 IE9 RC 和 Firefox(我一直在 Chrome 中测试) 我在不同浏览器上的结果:
Firefox:所有调用在大约 ~1s 20ms 到 1s 30ms 时保持一致
Chrome:其他所有调用都以 Firefox 的速度触发,其余调用快 1 秒
IE9:所有调用几乎完全一致(约 20 毫秒)
Opera:和 IE9 差不多(~30ms)
这是一个 webkit 问题吗? (我使用 $.ajax 来调用 WCF)
【问题讨论】:
我不知道你的问题的答案,但我可以提供这个:尝试打开 WCF 跟踪,看看是否有任何亮点出现。打开"System.ServiceModel"
的跟踪
不敢相信我没有想到这一点.. 并不是说它解决了任何问题,但我做了更多的实验,似乎这是一个浏览器问题.. 我是更新我的问题..
嗯。嗯,有 Wireshark。但它可能不会为您提供任何新东西。
我对你的时代感到困惑。当您说慢速呼叫需要“1sec 20ms”时,您实际上是指1.20ms
,而当您说快速呼叫需要“20ms”时,您实际上是指20µs
吗?这些是JSON_Took:
行中显示的时间。
我不会依赖开发服务器的时间安排。如果将服务部署到 IIS(甚至 IIS Express)会发生什么? VS2010 DevServer 在计时方面不如服务器可靠,也不是生产性能的良好指标。
【参考方案1】:
我不会依赖开发服务器的时间安排。如果将服务部署到 IIS(甚至 IIS Express)会发生什么? VS2010 DevServer 在计时方面不如服务器可靠,也不是生产性能的良好指标。
Here's a good article(虽然有点过时)讨论 IIS 和 Visual Studio Web 服务器(又名 Cassini)之间的差异。
很高兴这有帮助!
【讨论】:
以上是关于对 Async WCF 的所有其他调用都很慢的主要内容,如果未能解决你的问题,请参考以下文章
中间层异步 WCF 服务调用和向 UI 层返回数据的质量设计