Iva*_*ric 243 c# asp.net iis web-applications
说实话,我试图在IIS上变成一个肮脏的把戏,当我认为我要逃避它时,我意识到我的解决方法不起作用.这是我试图做的事情:
1)我有ASP.NET应用程序,它具有继承IProcessHostPreloadClient的Preloader类,并在Preload方法实现中完成所有繁重的初始化(应用程序很复杂,并且它是庞大系统的一部分,所以它需要大约2分钟来建立所有必要的连接服务并预先实例化一些Unity注册).
2)我需要在应用程序关闭(取消订阅,断开连接,处理......)上完成大量工作,我想最好的地方是位于Global.asax中的*Application_End*方法.
3)当我有用户活动时,一切正常工作(包含上述Web应用程序的应用程序池启动后的第一个请求将导致*Application_Start*被调用,之后*Application_End*在应用程序池停止或回收时调用),但问题当没有用户活动且应用程序在激活48小时后尝试重新启动时发生(配置的要求).由于没有请求,申请正式没有开始.因此,它不能被优雅地停止,因为*Application_End*将不会被调用.
4)现在出现了凌乱的部分......我试图在Preload方法结束时从代码中发出GET请求,并且它有效.但这个解决方案对我来说似乎很糟糕,尽管它有效.所以,我尝试了很多东西,我尝试的最后一件事是:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
Run Code Online (Sandbox Code Playgroud)
......这就是它的目的.*调用Application_Start*,(我已经检查了响应,它包含了应该在初始请求中显示的登录页面),并且应用程序池关闭应用程序通过在*Application_End*中执行必要的工作而正常结束.
但
在以这种方式启动(预加载和启动)应用程序之后,当我想通过Web浏览器访问应用程序时会发生这种情况:
HTTP错误500.21 - 内部服务器错误处理程序"ExtensionlessUrlHandler-Integrated-4.0"在其模块列表中有一个错误的模块"ManagedPipelineHandler"
我无法弄清楚这一点.谁能告诉我为什么会发生这种情况以及如何解决这个问题?
如果我不知道这一点,我将回到第一个解决方案(从代码发送GET请求),但这一问题将错误我,因为我甚至不有一个想法,什么是错的.
dan*_*elk 645
尝试重新注册ASP.NET aspnet_regiis -i.它对我有用.
.NET 4的可能路径(来自提升的命令提示符):
c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
Run Code Online (Sandbox Code Playgroud)
http://forums.iis.net/p/1190643/2026401.aspx
小智 166
如果您在Windows 8/Windows Server 2012和.Net 4.5中遇到此错误,请按照以下说明操作:http: //www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html
转到"打开或关闭Windows功能" 然后Internet信息服务然后万维网服务然后应用程序开发功能然后启用ASP.NET 4.5
这对我有用(虽然Windows Server 2012中的向导和措辞略有不同,但你会弄清楚).有了这个说法,为什么在通过Web平台安装程序安装包括所有依赖项之后的所有内容都是必要的...
Jon*_*han 52
尽管在此页面上提供了大量建议,但我仍然在Windows Server 2012上遇到问题.安装.NET Extensibility 4.5为我解决了这个问题:
Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5
小智 41
运行以下命令之一:
对于32位Windows操作系统:
c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
Run Code Online (Sandbox Code Playgroud)
对于64位Windows操作系统:
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
Run Code Online (Sandbox Code Playgroud)
Bar*_*jen 41
对于Windows 10/Windows Server 2016,请使用以下命令:
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
建议的答案aspnet_regiis在Windows 10(Creators Update及更高版本)或Windows Server 2016上不起作用:
C:\ Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
Microsoft(R)ASP.NET RegIIS版本4.0.30319.0
管理实用程序,用于在本地计算机上安装和卸载ASP.NET.
版权所有(C)Microsoft Corporation.版权所有.
开始安装ASP.NET(4.0.30319.0).
此版本的操作系统不支持此选项.管理员应该使用"打开/关闭Windows功能"对话框,服务器管理器管理工具或dism.exe命令行工具,使用IIS8安装/卸载ASP.NET 4.5. 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=216771.
完成安装ASP.NET(4.0.30319.0).
有趣的是,"打开/关闭Windows功能"对话框不允许我取消.NET和ASP.NET 4.6,只有上面的DISM命令工作.不确定功能名称是否正确,但它对我有用.
Nes*_*hta 25
这/sf/answers/928673441/完美无缺.但是如果你有64位操作系统,则在路径中使用Framework64而不是Framework:
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
Run Code Online (Sandbox Code Playgroud)
chu*_*e x 24
问题
您在不是为其设计的场景中使用SimpleWorkerRequest.您正在IIS中使用它.如果你看一下之前的MSDN链接(重点是我的):
提供HttpWorkerRequest抽象类的简单实现,该抽象类可用于托管Internet Information Services(IIS)应用程序之外的ASP.NET应用程序.您可以直接使用SimpleWorkerRequest或扩展它.
此外,如果您查看System.Web.Hosting命名空间的MSDN文档 (SimpleWorkerRequest位于此命名空间中),您还会看到类似于上面的内容(同样重点是我的):
System.Web.Hosting命名空间提供从Microsoft Internet信息服务(IIS)之外的托管应用程序托管ASP.NET应用程序的功能.
解决方案
我建议删除电话SimpleWorkerRequest.相反,您可以使用Microsoft解决方案确保您的网站在回收后自动启动.您需要的是IIS 7.5的Microsoft 应用程序初始化模块.配置并不复杂,但您需要了解确切的选项.这就是为什么我还建议IIS 7.5的应用程序初始化UI.用户界面由MSDN博主撰写.
那么微软的解决方案究竟做了什么呢?它会执行您要执行的操作 - IIS在应用程序池启动后向您的网站发送"获取"请求.
Xar*_*kis 13
在我的情况下(Windows 10 + IIS 10)我必须打开" 打开或关闭Windows功能 ",然后转到Internet信息服务>万维网服务>应用程序开发功能>并检查ASP.NET 4.6
把它作为自己的帖子,因为这让我花了好几个小时.
我在这里和其他地方看到了关于这个问题和aspnet_regiis修复的类似帖子.他们没有为我工作,aspnet_regiis表现得很奇怪,只是上市选项等.
如上所述用户ryan-anderson所示,您无法输入.exe
对于那些对服务器上的IIS以外的东西不太舒服的人来说,这就是你用简单的步骤做的事情.
在类似于此路径的文件夹中查找aspnet_regiis.C:\ WINDOWS\Microsoft.NET \框架\ v4.0.30319\
在开始菜单或任何位置右键单击命令提示符,并告诉它以管理员身份运行.使用Windows"运行"功能只是不起作用,或不适合我.
回到aspnet_regiis可执行文件.单击并将其右键拖动到命令提示符中,或将地址复制粘贴到命令提示符中.
如果它在那里删除,最后是.exe.这是关键.最后添加-i(空格减去眼睛).输入.
如果你正确地做了这个,你会看到它开始安装asp.net,然后告诉你它成功了.
确保您已在IIS Manager中将您的application-site版本设置v2.0为:v4.0
应用程序池 > 您的应用程序 > 高级设置 > .NET Framework 版本
之后,安装您的ASP.NET.
对于 32 位操作系统 (Windows):
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
对于 64 位操作系统 (Windows):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
application-site在 IIS 管理器中重新启动并享受。
| 归档时间: |
|
| 查看次数: |
246522 次 |
| 最近记录: |