Azure Cloud Services:跨不同请求维护对象引用



我有一个(经典(云服务,需要创建一个昂贵的对象,我想在后续请求中重复使用。创建需要很长时间,因此每次都无法接受时创建它。

public class MyService : IHttpHandler
{
    public static ExpensiveObject MyObject;
    public void ProcessRequest(HttpContext context)
    {
        if (MyObject == null) 
            MyObject = new ExpensiveObject();  // very time consuming operation
        // do stuff with MyObject
    }
}

(我意识到对运行多个并发请求缺乏考虑,请忽略这一点(当我发布两个请求时,一个接一个地,每次都会创建一个新的MyObject。我如何确保它重用为每个请求创建的相同对象?

设置IsReusableMyService中返回true似乎没有区别。

看起来您需要将共享对象从httphandler移出到单独的托管服务,例如Azure App Service,Azure WebJob(不适合所有使用的情况(等等

Azure应用服务方案:Web应用程序通过HTTP与应用服务通信(请参阅HTTPCLEINT(。Azure App Service具有配置选项,即使没有流量,也可以将应用程序加载。

如果您处理长期运行的操作(尽管您写了这个问题是长期的(,那么请查看标准的Rest-Pattern解决此类问题 - 民意调查。

也许此链接对您有用:云服务角色回收的常见原因。

如果您在IIS 内部运行。应用程序池在工作。此外,多个请求通常不会在过程中交叉路径。

您的典型选项包括以下内容。每个线程只会创建一个昂贵的服务:

  1. IOC注册该服务的每个线程生命周期(或请求范围(。
  2. 单身人士(已经使用的应用程序池(

- 最佳!

可以轻松实现此目标(不处理Arcane Azure Crap(,我刚刚制作了一个单独的可执行文件,该可执行文件可在Nancy Localhost服务器中托管ExpensiveObject(以启动脚本启动(。

在我的情况下,这没有明显的缺点,因为我只需要请求对象即可消耗字符串并返回另一个字符串。但是,这可能不是每个人的正确解决方案。

最新更新