我在我的.net winforms app中调用.net webservice,两者都在框架4.0中。在程序执行期间,webservice第一次调用方法时,调用大约需要10-12秒。后续通话需要约1-2秒。即使重新创建Web引用实例,后续调用仍然是〜1-2秒。重新启动winforms应用程序时,会再次发生第一次呼叫延迟,但后续呼叫会响应。
正在调用之前创建Web引用的实例,而不是延迟的一部分。
正在生成winforms应用程序的XmlSerializers(并据我所知使用,但我不知道如何验证这一点。)
由于Web服务端的首次编译,因此没有发生延迟。这是一整天都在使用的生产Web服务,其apppool保留在内存中。据我所知,延迟发生在客户端,或客户端和服务器之间的第一次呼叫,但不是后续呼叫。
不确定接下来要检查什么。有什么想法吗?
答案 0 :(得分:9)
正如消费者所指出的那样,问题与代理检测有关。在Internet Explorer中关闭它解决了这个问题,但在我的情况下不可行。
相反,有一种解决方法可以绕过默认代理的使用,从而避免使用自动检测。
将这些条目添加到app.config允许某些URL绕过代理:
<configuration>
<system.net>
<defaultProxy>
<bypasslist>
<add address="server/domain name" />
</bypasslist>
</defaultProxy>
</system.net>
</configuration>
可在此处找到更多信息:<defaultProxy Element> on MSDN
答案 1 :(得分:2)
尝试将代理设置为空的WebProxy,即:
request.Proxy = new WebProxy();
或者您可以使用system.net部分中的defaultProxy键覆盖应用程序的.Config文件中的代理设置。以下禁用自动代理检测:
<configuration >
<system.net>
<defaultProxy>
<proxy bypassonlocal="true" usesystemdefault="false" />
</defaultProxy>
</system.net>
</configuration>
答案 2 :(得分:0)
我多次遇到过这个问题 - 男人我讨厌它!大声笑虽然我从来没有最终解决它,你可以尝试一些事情。首先,在启动过程中调用Web服务,首先让“痛苦”消失!其次,尝试搞乱Web服务的IIS应用程序池 - 使其永远不会自行回收,或者至少在早上的非神圣时刻或者每10000个请求中进行回收。
我知道这可能不是一个很好的答案,但希望它有所帮助!
编辑:
部分问题是网络服务并非“永远” - 它会在需要之前进入睡眠状态,回收等。值得一读的是保持网络服务的活跃,5 9s的时间等等!
答案 3 :(得分:0)
我已在 basicHttpBinding 上添加了这些设置,禁用了自动代理检测,并在首次执行时获得了极大的加速。如果您进入Intranet环境,或者您根本不需要任何代理,这当然很有效。
<强> bypassProxyOnLocal = “假”强>
<强> useDefaultWebProxy = “假”强>
希望这有帮助。
答案 4 :(得分:0)
为坏死添加道歉,但是这个问题对我来说已经出现了很多次,我习惯于每次都忘记该问题的所有方面。这是列表(其他人提到过)