应用程序域和应用程序池有什么区别?
我读过很多关于这两个术语的文章.但仍然无法正确理解它们.
请用简单的描述详细说明.
谢谢
IIS中的应用程序池经常被回收,我无法弄清楚原因.我记得在IIS6中读到一个可能的问题,这意味着你被迫回收,但快速搜索现在变空了.在IIS6或7上,您可以关闭空闲时间,持续时间和特定时间回收选项,以便在那里没有问题.
那么为什么每个.net站点都会回收应用程序池呢?如果某个站点没有任何内存泄漏,您是否可以设置一个永远不需要回收的站点?
如果失败了,那么确保调用后台任务的最佳方法是,IIS是否有自动重启模块,还是应该使用外部服务来进行这些调用?
听起来如果你真的想要/需要它可以吗?
当我为webapp构建部署包时,该包包含一个archive.xml文件,其中包含以下内容:
<createApp
applicationPool=""
MSDeploy.applicationPool="1"
appExists="True"
MSDeploy.appExists="1"
... />
Run Code Online (Sandbox Code Playgroud)
如何控制安装webapp的应用程序池,并在某些情况下创建新的应用程序池?是否有VS设置我可以更改以控制上述输出或以其他方式影响应用程序池在部署时的方式?
根据一篇SO帖子,我可以通过添加以下选项告诉msbuild使用应用程序池,但我看不出生成的输出有任何区别:
/p:IncludeAppPool=true
Run Code Online (Sandbox Code Playgroud)
关于为msdeploy设置应用程序池的另一篇文章似乎暗示我可能能够修改生成的parameters.xml文件,以便我可以将应用程序池名称指定为msdeploy的参数.此文件存在于zip包中,因此不容易自定义.如果我将其更改为存档,则文件更容易访问.
该HOWTO部署web应用程序页面似乎暗示我可能需要从IIS快速切换到IIS,然后再启用一些复选框.在我的项目属性页面上,Include application pool settings used by this Web project无论"在IIS Express中配置了包含IIS设置"复选框设置(我目前尚未选中),都会禁用该复选框.我将尝试切换到下一个完整的IIS,看看是否能让我更好地控制.
看起来我可以用一个单独的工具创建一个应用程序池,但我不确定它是否只是TFS.这是我以前从未见过的工具,但它可能是一个功能强大的工具.
MSDeploy的appPoolConfig提供程序看起来很有前途,因为我可以手动设置一个应用程序池,然后将其用作同步源,但至少它只是手动一次.
有没有办法设置在azure站点下运行的网站的应用程序池的超时.
我有一个网站在那里运行,似乎它需要在闲置一段时间后再次启动.
更新 - 复制问题的过程:
1)在c:\ projects\restart-demo创建一个网站项目
2)添加默认的web.config和一个虚拟的aspx页面test.aspx
3)映射IIS以指向根文件夹c:\ projects\restart-demo
4)使用perfmon,运行状况监视,global.asax Application_End等跟踪监视应用程序重启.
5)浏览器http://localhost/test.aspx中的请求页面
申请开始
6)创建新文件夹c:\ projects\restart-demo\asdf
申请结束
7)浏览器http://localhost/test.aspx中的请求页面
申请开始
8)将文件夹c:\ projects\restart-demo\asdf重命名 为 c:\ projects\restart-demo\asdf1
申请结束
结束更新
我们使用后端CMS在ASP.NET站点中生成文件和文件夹.
用户可以创建/修改/删除文件并将其推送到Web场.
我们注意到的一个问题:
当用户创建,重命名或删除文件夹时,会导致App Domain重新启动.结果,会话,缓存等都丢失了.
请注意,它不需要是/ bin或/ App_Code之类的特殊文件夹.
有什么方法可以防止这种行为吗?
它实际上阻碍了性能,原因有两个:
asp.net appdomain application-pool content-management-system
我已经在我的机器上部署了一个ASP.NET MVC 3应用程序到共享主机提供程序,并且发现了一些似乎与正在回收的应用程序池相关的问题.主机已配置在以下任何情况下进行回收:
我的开发机器上的限制更加轻松,所以在开发过程中我没有看到像这样的回收.我没有管理员访问共享主机盒(可以理解),所以我无法阅读事件日志,看看为什么这种回收正在发生.
有没有办法可以找出为什么我的应用程序被回收(Application_End例如),以便我可以记录它来帮助我的调试?
我试图使用PowerShell在IIS中创建一个应用程序池.搜索完网页后,我创建了以下测试脚本:
Import-Module WebAdministration
$siteName = "TestAppPool"
$userAccountName = "Domain\UserName"
$userAccountPassword = "MyPassword"
if(!(Test-Path ("IIS:\AppPools\" + $siteName)))
{
$appPool = New-Item ("IIS:\AppPools\" + $siteName)
#Display Default AppPool Settings
"AppPool = " + $appPool
"UserName = " + $appPool.processModel.userName
"Password = " + $appPool.processModel.password
"Runtime = " + $appPool.managedRuntimeVersion
$appPool.processModel.userName = $userAccountName
$appPool.processModel.password = $userAccountPassword
$appPool.managedRuntimeVersion = "v4.0"
$appPool | Set-Item
#Display Updated AppPool Settings
"AppPool = " +$appPool
"UserName = " + $appPool.processModel.userName
"Password = " + $appPool.processModel.password
"Runtime = " …Run Code Online (Sandbox Code Playgroud) 我遇到了一个奇怪的问题:据我所知,可以通过回收应用程序池来清除缓存.
但是,在最近的项目中,缓存不会以这种方式清除.相反,我们必须重置IIS以清除缓存.
这些行为之间有什么区别,以及我所经历的差异可能是什么原因?
为了从头开始测试IIS/WCF实现的许多令人头疼的问题,我构建了HelloWorld服务,客户端(非常好)在这里进行了操作.我为net.tcp添加了端点,并且该服务IIS 7.5在其自己的ApplicationPool名为HW的(在Windows 7上)下的两个绑定端到端地正常工作.
我正在努力工作的是宣布的AutoStart和Preload(或"pre-warm caching")功能.我已经按照这里和这里列出的指示(非常相似,但总是很好地得到第二个意见)非常密切.这意味着我
1)设置应用程序池startMode...
<applicationPools>
<!-- ... -->
<add name="HW" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
Run Code Online (Sandbox Code Playgroud)
2)...启用serviceAutoStart并设置指向我的指针serviceAutoStartProvider
<site name="HW" id="2">
<application path="/" applicationPool="HW" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
<!-- ... -->
</site>
Run Code Online (Sandbox Code Playgroud)
3)...并且命名为所述提供者,以及GetType().AssemblyQualifiedName下面全部列出的类
<serviceAutoStartProviders>
<add name="PreWarmMyCache" type="MyWCFServices.Preloader, HelloWorldServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</serviceAutoStartProviders>
Run Code Online (Sandbox Code Playgroud)
using System;
namespace MyWCFServices
{
public class Preloader : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\temp\PreloadTest.txt");
sw.WriteLine("Preload …Run Code Online (Sandbox Code Playgroud) 如果我错过了一个明显的答案,我会提前彻底搜索道歉. 遵循以下链接中的建议,解决方案无效.该解决方案也不表示它是否适用于在不同计算机上运行IIS和SQL Server的生产Web服务器. 将IIS 7 AppPool标识添加为SQL Server登录
下面的Microsoft链接未提供用于创建SQL Server Windows登录的特定语法:http: //www.iis.net/learn/manage/configuring-security/application-pool-identities
我们的目标是在生产环境中运行IIS 7.5的Server 2008 R2计算机上公开部署ASP.NET 4.0 Web应用程序.根据最佳实践,我们在同一域中的单独计算机上运行SQL Server 2008.我们希望在没有模拟的情况下使用SQL Sever Windows身份验证,以允许IIS框和SQL Server上的ASP.NET应用程序进行通信.目前,SQL Server登录连接字符串允许.NET应用程序连接到SQL Server,但我们希望将连接字符串升级为Windows SQL Server登录以更安全.
在IIS 7.5上,我们为网站配置了一个应用程序池.在"应用程序池高级"设置下,"内置帐户"已尝试同时使用ApplicationPoolIdentity和网络服务.据说最佳做法是使用ApplicationPoolIdentity来实现更严格的安全性.
失败的步骤是创建SQL Server Windows登录.
我们按照第一个链接执行了以下步骤:
在SQL Server Management Studio中,查找Security文件夹(与数据库,服务器对象等文件夹处于同一级别的安全性文件夹...而不是每个单独数据库中的安全性文件夹)
右键单击登录并选择"新登录"
在"登录名"字段中,键入IIS APPPOOL\YourAppPoolName- 不要单击"搜索"
填写您喜欢的任何其他值(即身份验证类型,默认数据库等)
单击确定
你能告诉我IIS 7.5和SQL Server在不同的盒子上,我需要用什么语法来创建SQL Server窗口登录?
我试过了:" mydomain\machine1$\IIS APPPOOL\MyAppPoolName"很多次都没有成功.
错误信息是:" Windows NT User or group IIS APPPOOL\MyAppPoolName can not be found"
我使用了网络服务器的网络名称来代替machine1(以及实际的应用程序池名称和域名).
在此先感谢您的帮助.
PS如果微软提供了一个关于如何完成这个常见以及应该是简单任务的分步教程,那将是很好的.你在StackOverFlow上的答案将帮助很多人:)
application-pool ×10
asp.net ×4
iis ×4
iis-7.5 ×2
appdomain ×1
autostart ×1
azure ×1
caching ×1
iis-7 ×1
msdeploy ×1
powershell ×1
sql-server ×1
wcf ×1
windows ×1