Web services 对web服务的第一次调用很慢;被compact framework win应用程序使用

Web services 对web服务的第一次调用很慢;被compact framework win应用程序使用,web-services,compact-framework,Web Services,Compact Framework,我有一个运行在IIS 7.0上的.net 2.0 web服务 我从一个紧凑的框架编写的应用程序(CF 2.0)中使用此服务。 第一次呼叫需要13秒,所有后续呼叫都非常快(不到1秒)。没有缓存任何数据 有没有办法解决这个问题?这是IIS启动后的第一次调用,还是服务器启动后的第一次调用?对IIS的第一次调用总是比较慢。我们曾经通过使用一个脚本来解决这个问题,该脚本在重新启动或IISRESET时生成一个伪调用,以吸收第一次调用的代价。第一次调用是加载.NET运行时并JITting调用的web方法。许多

我有一个运行在IIS 7.0上的.net 2.0 web服务

我从一个紧凑的框架编写的应用程序(CF 2.0)中使用此服务。 第一次呼叫需要13秒,所有后续呼叫都非常快(不到1秒)。没有缓存任何数据


有没有办法解决这个问题?

这是IIS启动后的第一次调用,还是服务器启动后的第一次调用?
对IIS的第一次调用总是比较慢。我们曾经通过使用一个脚本来解决这个问题,该脚本在重新启动或IISRESET时生成一个伪调用,以吸收第一次调用的代价。

第一次调用是加载.NET运行时并JITting调用的web方法。许多部署此类服务的商店并不真正关心第一次,但当他们这样做时,他们会有一些东西打电话给它,作为部署的一部分,以避免第一次出现问题。另一种方法是使用它。

这也是第一次调用应用程序时打开的sql连接。如果出现网络问题,这可能需要更长的时间。
当应用程序空闲一段时间后,连接可以自动关闭。

CF应用程序下的第一次调用是在设备上的所有代理对象都已创建时。因此,即使服务器上的对象等已经启动,来自每个设备的第一次调用也将比任何后续调用慢得多


一个常见的解决方法是让您的服务公开一些存根方法(如果您愿意,它完全不能做任何事情),当您的应用程序启动时,生成一个调用此存根的工作线程。这将在后台为您创建服务代理对象,因此当您的应用程序实际调用服务时,一切都准备就绪。

这是每个会话的第一次调用吗?或者这是服务本身加载到内存后的第一个呼叫?请参阅我对旅行技术人员答案的评论。客户端是否有任何东西需要我加快速度?我想我似乎总是问一些没有人知道答案的问题。IIS总是打开的。永远不会重新启动。CF desk应用程序对web服务的第一次呼叫很慢,然后所有后续呼叫在大约3分钟内都是超快的,后面有一个慢速呼叫,以此类推。可能是您的应用程序池重新启动,如下面的答案所示,也可能是服务器的物理操作,例如硬盘驱动器为了节省电能而旋转。缓存参数也值得检查。这是web服务的正常行为吗?第一次慢下来?还是应该马上快速?在论坛上,我得到了相互矛盾的意见。因为我在web服务速度快的时候用不同的参数测试它,所以网络连接似乎很好。正如我所说,并没有数据被缓存,所以若网络有问题,它会显示每一次,不是吗?这似乎太巧合了。我想我错过了什么。问题是什么。请提供更多细节。1) 它是否安装在客户端上?网络服务器?2) 如果在客户端,它是否适用于WinCE,CF 2.0?您将在服务器上执行此操作。服务器端的web服务是ASP.NET 2.0,可能要做繁重的工作,例如从数据库获取数据等。在客户端花费17秒的时间很可能很少。另外,请检查您的global.asax.cs文件,查看是否有任何设置例程在第一次请求时运行,并且可能会延迟其中一些例程来分散工作。但是,有没有比学习新工具并在web服务器上安装一些东西更简单的解决方案?如果您想走NGEN路线,您不会在web服务器上安装任何新内容。它附带了.NET可再发行版本。您可以(通常)在任何计算机上的C:\Windows\Microsoft.NET\Framework\v2.0.50727中找到它。您所要做的就是转到应用程序的Bin文件夹并执行“NGEN安装MyWebService.dll”(如果已经执行过一次,则执行“NGEN更新MyWebService.dll”)。您还可以将其作为项目的后期生成操作来自动执行。“NGEN安装MyWebService.dll”-我假设这是一个命令行命令?好的,这更有意义,谢谢!有一件事我当时不明白,那就是为什么每次打电话都要花更长的时间,然后是一些快速的电话,然后是长时间的电话。这几乎就像瘦客户机上运行的cron作业删除了代理对象一样。我可以控制这些代理对象吗?我的猜测是,JITted代理正在调整,必须重新调整。远程性能监视器可以验证这一点-在长时间通话之前查看集合中是否有音调。你实际上对代理对象没有任何控制权,它们是根据需要构建的,就像任何其他托管对象一样,如果GC认为有必要的话,可以对代码进行调整。这里有一个想法:你认为也许让后台的工作线程频繁地触发并调用这个存根服务是一个好主意吗?这不会有什么坏处(只要不太频繁地调用它)。这绝对是一个值得测试的问题。