2016-09-13 54 views
0

我有两个网站,一个客户网站和一个定价WEBAPI网站。我在定价网站上遇到了性能问题,因为它常常由于使用率低而暂停,并且第一次调用需要时间进行初始化。如果我在此之后立即重复请求,它非常快。从其他网站预初始化网站

我知道它会在客户端网站的某些页面上使用,因此我希望在页面加载时调用它,以便在用户有效请求在几秒钟后发布时准备好。请注意,定价WEBAPI网站不能从客户端获得,只有客户端网站才能在服务器端访问它。

我不知道最好的办法,我不希望影响客户网站的性能。我曾考虑调用页面的1px x 1px iFrame,但担心会阻止页面。 Ajax调用更合适,但是如何在客户端网站上调用某些内容以调用Web服务?有没有更好的方法我没有考虑?

回答

0

共享主机环境的已知问题,解决方法很好,但我会建议升级您的服务器。我的主机有一个DotNetNuke选项,这意味着它将在服务器上保留内存,并且不会因不活动而回收应用程序池。与VPS相比,这更便宜。

如果它不是共享主机,these IIS settings could help you

总之,回到你的解决方法:

你说客户不能访问的WebAPI,只有你的网站可以的后端。看起来很奇怪,因为webapi暴露了REST GET,POST方法。无论采用哪种方式,您都可以在服务器端对您的webapi执行异步调用,而不会等待响应或对您的API执行javascript调用。

假设您的网站也是ASP.NET:

public static async Task StartupWebapi() 
{ 
    string requestUrl = "http://yourwebapi.com/api/startup"; 

    using (var client = new HttpClient()) 
    { 
     //client.Timeout = new TimeSpan(0, 0, 20); timeout if needed 
     try 
     { 
      HttpResponseMessage response = await client.GetAsync(requestUrl); 
      if (response.IsSuccessStatusCode) 
      { 
       resultString = await response.Content.ReadAsStringAsync(); 
      } 
     } 

    } 
} 

然后,在某处你的代码,将被调用时,你的客户的网站开始至少。

HostingEnvironment.QueueBackgroundWorkItem(ct => SomeClass.StartupWebapi()); 

或在javascript中,它是异步执行的。

$.ajax({ 
    url: "http://yourwebapi.com/api/startup", 
    type: "GET", 
    success: function (response) { 
    }, 
    error: function (response) { 

    } 
}); 

this question一些其他的解决方法。