0

我有一个没有用户的新应用程序。我知道当我第一次发布到 Azure 时,在编译代码时会出现延迟。但是,在使用该应用程序后,如果我尝试在大约 30 分钟内再次访问它,它最初似乎非常慢,而一旦我访问它,它就会变得更快。我的应用程序使用 MVC4 并连接到 SQL Server 进行登录身份验证。

是否有超时或延迟?服务是否会在使用一段时间后进入睡眠模式以被唤醒?

4

1 回答 1

0

默认情况下,IIS 会在 20 分钟不活动后关闭应用程序池,以节省服务器资源。 http://technet.microsoft.com/en-us/library/cc771956(v=ws.10).aspx

现在,为了让 Azure 上的事情变得更有趣,据我所知,您不能从应用程序的 web.config 文件配置此设置,而是通过 UI、命令行或 machine.config 文件配置。但有希望!

这是假设您使用的是网络/工作人员角色,而不是他们推出的新网站

您必须为您的 Web 角色创建一个启动任务,该任务将为您执行 IIS 配置。它是一个简单的批处理文件,您可以指示 Web 角色在启动时运行。 这里有更多信息,但基本上 .cmd 文件看起来像这样:

REM *** This keeps this file from running on your local emulator. 
if "%EMULATED%"=="true" goto :EOF

REM *** Prevent the IIS app pools from shutting down due to being idle. 
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

REM *** Prevent IIS app pool recycles from recycling on the default schedule of 1740 minutes (29 hours). 
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.recycling.periodicRestart.time:00:00:00

在您的 serviceDefintion.csdef 文件中,添加以下架构元素(假设您将该文件放在 Web 应用程序的启动文件夹中并将其命名为 disableTimeout.cmd):

<Startup>
  <Task commandLine="startup\disableTimeout.cmd" executionContext="elevated" />
</Startup>

请记住,回收和空闲超时您的应用程序池可能有充分的理由,但如果您的站点流量较低,则可以调整它们以不那么频繁地发生。

于 2013-02-15T21:05:35.003 回答