如何加快第一次调用ASP.NET Web服务?

时间:2013-03-10 01:35:35

标签: c# asp.net web-services mono

我有一个非常基本的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目录中。

但是,这一切都没有帮助。

任何人都可以对此有所了解吗?

3 个答案:

答案 0 :(得分:4)

通常,您确保您的制作服务几乎不会停止。然后没有“第一个”请求,因为只有在需要进行更改时才会重新编译。如果确实需要对生产进行更改(或重新启动服务器),则需要在低使用时间内进行安排。如果没有可接受的低使用时间,则使用Web场,并在更新期间从服务器场中删除服务器,并在将更新服务器作为更新的一部分向更新的服务器发出“第一”请求,然后再将其返回到服务器场。

答案 1 :(得分:2)

我多年来一直在使用.Net,我还没有找到一些东西来加速第一次调用Web服务或Web应用程序(另一方面,网站很棒,因为他们在调用时逐个编译页面,这会让事情变得更快......)

第一次调用总是编译所有内容,是的,需要时间......但是之后,如果你将IIS设置为“X时间之后没有睡眠应用程序池”,那就没关系了。

我自己定制自己做的事情,每次我发布网站或网络服务时,我都会在浏览器中自己调用它,然后向相关人员发出“全部清晰”信息......这样他们就会得到从那时起的insta-service。

答案 2 :(得分:1)

我甚至不知道它是否适用于ASP.NET,但由于您使用#mono标记了问题,或许您应该看看这个(如果您还没有):http://www.mono-project.com/AOT