WCF调用webservice需要很长时间

时间:2010-09-27 15:47:29

标签: wcf web-services proxy

我有一个wcf服务(WCF_A)调用另一个wcf服务(WCF_B)(目前我在我的本地计算机上使用我的凭据托管WCF_B - 作为Windows服务),WCF_B在内部调用Web服务(WS01)它托管在IIS上。我创建了一个测试客户端并调用WCF_A - > WCF_B - > WS01。在调用(WS01)之前,我启动一个计时器,当webservice调用返回并将结果分配给变量时,我停止计时器,流程如下 WCF_B

1)  Debug.WriteLine(“Call to webservice”)
2)  Starttimer
3)  Var result = WS01.Function(xxxx)
4)  Stop timer
5)  Debug.Writeline (timetaken)
6)  Debug.WriteLine(“Call from webservice came back”)

我第一次进行webservice函数调用时,发现在步骤(2)和步骤(5)之间需要很长时间。

我最初的想法是代理创建需要很长时间,运行Fiddler我发现对Web服务的调用已经完成并立即返回预期结果。

之后我不确定会发生什么,这个过程似乎在等待。 (步骤(5)几乎需要2.5分钟。

如果我转身并使用不同的参数向网络服务拨打相同的电话,则会在约1.1秒(拍摄时间)内命中步骤(5)。我不确定这里发生了什么。几乎看来,在步骤(3)中,对结果变量的赋值花费了大量时间,但不确定为什么这只是第一次发生。

我还创建了一个测试客户端并直接调用WCF_B(使用wcf提供WCFHost托管)虽然调用不需要花费很长时间,因为之前的情况它在第一次返回9.8秒后大约1秒后返回再次呼叫似乎在任务期间等待。

有关识别正在发生的事情的任何指示?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我的第一个猜测是,由于.NET基础架构本身,第一次调用速度较慢。您的WCF由C#ou VB.NET编译器编译为中间语言。在运行时,此代码被编译为由系统执行的本机代码。这称为即时编译,并且在第一次在应用程序中执行时为每个方法发生一次。

因此,除非您能够重现您在服务的第2,第3或第N次调用中描述的行为,否则我认为可以安全地假设它只是预期的行为。

  1. 您还可以使用分析器跟踪确实需要很长时间才能执行的内容。
  2. 如果您希望WCF成为问题的根源,请在WCF客户端上启用活动跟踪,看看您是否可以在跟踪的活动列表中发现延迟。