问候人,
我正在维护的ASP.NET应用程序有一个相当长的启动过程。更新了许多数据文件等。我被问到,当Application_Start运行时,应用程序是否有办法返回等待屏幕(必要时是静态的)?
答案 0 :(得分:5)
不,没有。 ASP.Net需要初始化管道和其他所有内容,以便能够真正处理请求。
在此之前,.Net不知道请求是什么,也不知道可能的结果是什么。例如,它可能是没有响应的Web服务调用。或者请求可能导致文档下载,此时您不希望将任何数据发送到客户端。
相反,我会研究两件事。首先,如何减少app_start时间;第二,为什么application_start事件会在蓝色月亮中被多次启动。答案 1 :(得分:2)
理论上你可以在等待屏幕上有一个基本的HTML页面(使用javascript)在iframe中加载你的一个asp.net页面并在加载时重定向到主应用程序登陆页面,但那是可怕的hackery而且我'我自己质疑它的价值。
答案 2 :(得分:1)
我认为你不能轻易地达到你想要的东西,但我会建议你预编译。在部署和启动该应用程序时,预编译代码可以节省大量时间。
How to: Precompile ASP.NET Web Site Projects
来自Microsoft:预编译ASP.NET网站项目为用户提供了更快的初始响应时间,因为页面不必在第一次请求时进行编译。这对于经常更新的大型网站特别有用。
答案 3 :(得分:1)
这是一个可能的解决方案:
您可以在App Start中启动实际关闭的工作线程并加载数据并处理您需要执行的所有操作。您设置了一个Application()变量来表示该线程正在运行并且尚未完成。
然后,每当你收到请求时,检查Application()变量并显示你的“等待”页面(可能是定期重定向的东西)。
最后,当工作线程完成时,它可以设置Application()变量以指示线程已完成。
像这样的东西(非常粗略)>在AppStart中:
Application("StartupProcessingComplete") = False
t = New Threading.Thread(AddressOf WorkerFunction)
t.Start()
在WorkerFunction中:
<Do the work>
Application("StartupProcessingComplete") = True
在Page Init中,检查变量
If Not Application("StartupProcessingComplete") Then
<Redirect to "Wait" page>
Endif