对 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 调用?

重新启动后,MVC 应用程序对于每个页面都很慢

WCF系列教程之客户端异步调用服务

中间层异步 WCF 服务调用和向 UI 层返回数据的质量设计

从不同线程调用时,WCF Duplex 回调方法永远不会执行

如何在WCF的IDispatchMessageInspector中获取调用方法?