我有一个非常基本的ASP.NET网络服务。
它有效,但第一次通话需要10秒钟 - 而后续通话会立即发生。
我意识到它是JIT编译的,因此我试图了解如何预编译事情来加速第一次调用。
到目前为止,这就是我所做的。
网络服务文件是: HelloWorldService.cs :
using System.Web.Services;
namespace MyService
{
public class HelloWorldService: WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
我使用gmcs -target:library HelloWorldService.cs -r:System.Web.Services
我已将生成的HelloWorldService.dll
文件放在webroot的/ bin目录中。
接下来,我创建了HelloWorld.asmx
- 存根文件,如下所示:
<%@WebService Language="C#" Class="MyService.HelloWorldService"%>
这样可行,但如前所述,第一次调用需要10-15秒才能完成...虽然后续调用工作正常。
在研究中,我见过您需要使用sgen
实用程序创建序列化XML文件的引用。
我通过运行:
使用了该文件sgen HelloWorldService.dll
创建文件名HelloWorldService.XmlSerializers.dll
并将其也放在/bin
目录中。
但是,这一切都没有帮助。
任何人都可以对此有所了解吗?
答案 0 :(得分:4)
通常,您确保您的制作服务几乎不会停止。然后没有“第一个”请求,因为只有在需要进行更改时才会重新编译。如果确实需要对生产进行更改(或重新启动服务器),则需要在低使用时间内进行安排。如果没有可接受的低使用时间,则使用Web场,并在更新期间从服务器场中删除服务器,并在将更新服务器作为更新的一部分向更新的服务器发出“第一”请求,然后再将其返回到服务器场。
答案 1 :(得分:2)
我多年来一直在使用.Net,我还没有找到一些东西来加速第一次调用Web服务或Web应用程序(另一方面,网站很棒,因为他们在调用时逐个编译页面,这会让事情变得更快......)
第一次调用总是编译所有内容,是的,需要时间......但是之后,如果你将IIS设置为“X时间之后没有睡眠应用程序池”,那就没关系了。
我自己定制自己做的事情,每次我发布网站或网络服务时,我都会在浏览器中自己调用它,然后向相关人员发出“全部清晰”信息......这样他们就会得到从那时起的insta-service。
答案 2 :(得分:1)
我甚至不知道它是否适用于ASP.NET,但由于您使用#mono标记了问题,或许您应该看看这个(如果您还没有):http://www.mono-project.com/AOT