目前,在我们的生产IIS Web场中,我们在一个应用程序池(默认应用程序池)中托管了大约15个应用程序.有两个网站和大约13个虚拟目录.
一位同事建议我们更改我们的IIS配置,以便每个应用程序都是一个单独的应用程序池(具有相同的设置).
这样做有任何缺点或潜在问题吗?是否有可能构建ASP.NET应用程序的要求是它们都在同一个应用程序池中?
我正在尝试检测ASP.NET应用程序何时回收,因为要修改web.config文件或手动回收IIS应用程序池.
最初我认为ASP.NET的Application_End方法可行,并尝试了以下方法:
protected void Application_End(object sender, EventArgs e)
{
File.AppendAllText("log.txt", DateTime.Now + "\n");
}
Run Code Online (Sandbox Code Playgroud)
该文件是在第一次更改web.config文件时创建的,但后续更改未触发该事件.类似地,在IIS中进行测试时,第一个手动应用程序池回收创建了文件,但后来的文件没有 - 就好像Application_End事件只触发一次一样.
每次池/应用程序回收时,我如何检测?
我们有一个ASP.NET MVC 4应用程序,它链接到传统的本机代码.问题是这个遗留代码具有在启动时构建的全局静态代码,但由于本机代码对App Domains一无所知,因此在重新加载App Domain时不会重新初始化该代码.在重新启动应用程序池进程之前,这会导致我们的应用程序中出现不正确的行为或崩溃.
因此,我想强制应用程序池在我们的应用程序的App Domain被回收时进行回收.IIS中是否有这样的设置,或者是否正在卸载域时我可以在我的应用程序中调用代码?
关于我的设置的一些信息,
更新
根据下面的答案,我连接到AppDomain卸载事件,并使用类似于以下的代码来回收应用程序池.
try
{
// Find the worker process running us and from that our AppPool
int pid = Process.GetCurrentProcess().Id;
var manager = new ServerManager();
WorkerProcess process = (from p in manager.WorkerProcesses where p.ProcessId == pid select p).FirstOrDefault();
// From the name, find the AppPool and recycle it
if ( process != null )
{
ApplicationPool pool = (from p in manager.ApplicationPools where p.Name == process.AppPoolName …Run Code Online (Sandbox Code Playgroud) 我有一个部署在带有IIS 8.5的Windows 2012 R2服务器上的MVC4 Web应用程序.我将应用程序池配置为使用自定义域帐户运行,因为Web应用程序需要在启用Windows身份验证的情况下调用网络上的另一个Web服务.
当我尝试从浏览器访问该页面时,我的.css,.js文件会出现很多"错误500".当我尝试直接浏览其中一个文件时,我显示"HTTP错误500.0 - 内部服务器错误"页面而不是脚本或CSS的内容.我尝试使用一个简单的.txt文件,我得到了同样的错误.
详细错误信息:
在服务器上,我为整个C:\ inetpub\wwwroot\aaa文件夹和子文件夹的"Everyone"提供了完全NTFS权限.
我让帐户运行本地"管理员"组的应用程序池部分.它没有改变任何东西,我仍然得到相同的错误消息.
但是,如果我使用localhost直接从服务器打开网页,一切正常.
所以我在这里没有想法.有什么建议 ?
谢谢 !
application-pool staticfilehandler internal-server-error asp.net-mvc-4
我使用PowerShell自动配置IIS中的网站.我有以下代码为我创建一个Web应用程序池
#Creating a new Application Pool
New-WebAppPool "NewAppPool"
Run Code Online (Sandbox Code Playgroud)
但是在创建池之前,我想检查池是否存在.我该怎么做呢?
请注意:我的系统上没有IIS驱动器.因此,如下所示在路径中提到IIS的命令会失败:
$IISPath = "IIS:\AppPools"
cd $IISPath
if (Test-Path ".\NewAppPool") { Write-Host "NewAppPool exists." }
Run Code Online (Sandbox Code Playgroud) 我们使用Kentico CMS,我与他们交换了关于网络花园部署的电子邮件.
我们在具有8个CPU核心的服务器上运行单个站点.在与Kentico的咨询热线,我们没有改变应用程序池Web园从默认即它被设置为1的工作进程的最大数设定.
我们的经验是,该网站只使用其中一个cpu核心 - 其他人都闲置.当我通过电子邮件向他们发送电子邮件时,他们的回答是操作系统/ IIS会处理此问题并根据需要使用其他核心,即使应用程序池只有一个工作进程.
现在,我非常尊重Kentico的人,但这对我来说似乎不对?
当然,如果我们想要使用所有核心,我们需要允许八个工作进程(并在SQL服务器中实现会话状态存储)?
非常感谢
托尼
我在我的应用程序中使用ASP.Net4 MVC2.使用该应用程序的第一个人通常会在应用程序响应之前经历漫长的等待.之后,该应用程序非常敏感.如果应用程序闲置15分钟,则使用该应用程序的同一个人或下一个人将再次经历漫长的等待.看起来应用程序在空闲15分钟后编译.谁能告诉我应该在哪里找麻烦拍摄问题?谢谢.
有时异常会导致application pool关闭.我手动启动它,但问题是如何在IIS 7.0(Windows Server 2008)中自动执行此行为.
我有一个在具有多个工作进程的应用程序池中运行的应用程序.
我需要访问控制器中的进程ID来检查自从我更改应用程序池以使用多个工作进程后出现的一些问题.
如何使用Powershell修改新的或现有的应用程序池中的各种设置?我对某些"高级"设置很感兴趣,例如启用32位应用程序,管理流水线模式,流程模型标识等.有关如何执行此操作的任何想法?我尝试使用xWebAdministration模块,但似乎有非常基本的设置.在此先感谢您的帮助!
application-pool ×10
iis ×7
asp.net ×3
asp.net-mvc ×2
powershell ×2
appdomain ×1
c# ×1
dsc ×1
exception ×1
iis-7 ×1
kentico ×1
recycle ×1
restart ×1
web-garden ×1