我有一个没有用户的新应用程序。我知道当我第一次发布到 Azure 时,在编译代码时会出现延迟。但是,在使用该应用程序后,如果我尝试在大约 30 分钟内再次访问它,它最初似乎非常慢,而一旦我访问它,它就会变得更快。我的应用程序使用 MVC4 并连接到 SQL Server 进行登录身份验证。
是否有超时或延迟?服务是否会在使用一段时间后进入睡眠模式以被唤醒?
我有一个没有用户的新应用程序。我知道当我第一次发布到 Azure 时,在编译代码时会出现延迟。但是,在使用该应用程序后,如果我尝试在大约 30 分钟内再次访问它,它最初似乎非常慢,而一旦我访问它,它就会变得更快。我的应用程序使用 MVC4 并连接到 SQL Server 进行登录身份验证。
是否有超时或延迟?服务是否会在使用一段时间后进入睡眠模式以被唤醒?
默认情况下,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>
请记住,回收和空闲超时您的应用程序池可能有充分的理由,但如果您的站点流量较低,则可以调整它们以不那么频繁地发生。