我参与了一个项目,通过采用DevOps方法,必须在目标服务器上安装软件(Windows服务),以允许远程和自主执行部署. 作为背景,我们在这里谈论的是远程管理部署的服务器,不同的目标服务器(Windows 2008 R2)在其中部署了代码.服务器正在托管IIS应用程序,部署仅包括替换文件和文件夹,然后是App Pool Recycle. 为此,我正在尝试应用两种不同类型的权限:应用程序文件夹结构上的NTF权限和回收App Pool的权限. 这是我有问题的最后一个.我花了几个小时在互联网上搜索此事,但是如果可能的话,我无法弄清楚如何正确执行此操作. 几乎所有参考文献(如波纹管)都集中在IIS远程管理委托或远程Web部署上,我尝试使用这些委托. 实际上我需要知道的是如何在服务器上本地(对于运行代理的帐户)将权限委托(仅回收应用程序池). https://www.iis.net/lealen/manage/remote-administration/configu
以下是关于 application-pool 的编程技术问答
问题:创建新的IIS应用程序池并设置为将应用程序池标识用于权限时,我不确定如何将这些身份添加到诸如管理员或绩效柜台用户之类的用户组中. 背景:我目前正在编写使用Microsoft.web.administration的C#.NET库,以执行以下操作: 检测II 7.x是否已安装,如果是的,则是哪些组件. 安装或升级II 7.x到提供的所需组件的列表. 通过IIS创建/管理一个或多个网站. 每个网站自动创建/管理一个应用程序池 上下文是,可执行安装程序将使用此库来提供Windows Server OS上Web服务器和网站/服务的自动部署,作为较大软件部署的一部分.到目前为止,以上所有内容均已实施,测试,并且(主要是)功能性,除了需要在应用程序池/网站创建中执行的某些权限自动化. 在我安装新网站的方法中,我创建了一个新的应用程序池,并强迫它使用应用程序池标识: static public void InstallSite(string name, stri
在IIS 7中,最佳实践是什么?我应该为每个应用程序创建一个应用程序池,还是应该与尽可能多的应用程序共享应用程序池? 是否有与其中一个选项相关的性能缺陷或安全问题? 解决方案 每个应用程序池是w3wp.exe的实例,该实例是该站点或一组站点的工作过程.通过将每个应用程序放置在单独的应用程序池中,您可以确保可能在应用程序池中可能导致问题的问题不会引起其他应用程序的问题.在资源方面,显然有这样的操作的开销. 通常,对于简单的网站和博客,我通常将它们放在共享的应用程序池中.对于更密集或重要的应用程序,我将单个应用程序池分开.这只是我操作方式的指南. 我相信IIS7现在创建网站时会创建单独的应用程序池(虽然不是100%). 其他解决方案 从理论上讲,最好将每个站点放在自己的池中.在实践中,它比将站点放入一个池中要需要的更多.因此,在大多数服务器上,即使有1000个站点,您也只会看到10-100个池. 其他解决方案 共享应用程序池比为每个应用程序创建一个固
当我通过IIS MMC回收Web应用程序的应用程序池时,第一个在WebApp中请求页面的用户将经历网站的响应非常缓慢.在该初始请求之后,每个页面都可以.用户还可以注销网站,稍后再返回,速度很快.我关心的是网站的第一个初始负载.如果我写一个脚本以在早上凌晨3点重新启动应用程序池,我还能做什么 a.)模仿用户访问网站并获得最初的缓慢负载,从而使该应用程序在早上为用户"准备". 或 b.)告诉应用程序池以启动内存,而无需用户必须启动此过程. 解决方案 首先,您不需要脚本在凌晨3点回收该应用程序.当应用程序回收时,应用程序池有可以选择的设置.默认情况下,我认为他们每29小时回收一次,这是一个奇怪的设置,我建议更改它.否则,您将接到电话,声称在一天中的随机时间内丢失会话. 我必须假设您的应用程序池中有一个ASP.NET应用程序.首先请求,延迟主要是由于ASP.NET工作过程需要编译运行时需要的网站和/或加载DLL.为了解决此问题,大多数人都会使用一个静止的任务,该任
我遇到了一个奇怪的问题:据我所知,可以通过回收应用程序池来清除缓存. 但是,在最近的一个项目中,没有以这种方式清除缓存.相反,我们必须重置IIS才能清除缓存. 这些动作之间有什么区别,以及我所经历的差异的原因是什么? 解决方案 回收AppPool时,会有一些重叠时间.您的不健康的工作流程被标记为回收利用,但继续处理已经收到的请求. (它将无法处理新请求).一旦处理了所有现有请求,将终止不健康的工人. 使用IIS重置,所有工人均已终止,并清除内存中的缓存.一旦新要求,将创建新的工人. 因此,我认为对于AppPool回收和IIS重置都可以清除缓存.至于我知道,该缓存存储在应用程序域中.一旦不健康的工作流程终止,所有缓存项目均应被销毁. 其他解决方案 请检查以下文章以获取详细说明: http://fullsocrates..wordpress.com/2012/2012/07/25/iisreset -vs-recycling-application-p
我们有一个应用程序池在IIS 10中的应用程序池回收后的初始化时间较慢.(回收后5-7秒,然后在第一个请求后30-50 ms.) 我做了一些研究,发现"应用初始化".模块应该解决问题. 我将其安装到服务器上,并将应用程序池设置为" ElwaysRunnunt",并将相应的站点设置为"预加载== true".进行这些更改后,我们通过回收利用进行了测试,并且响应时间似乎更好……在回收后3到4秒钟.然后,我试图禁用"重叠的回收",以查看是否有帮助,然后再回收后的1.5到2秒更好,然后在第一个请求后20至30毫秒. . 问题是:这是我们可以期望的最好的吗?我希望能够完全预热应用程序池,以便即使是第一个请求也大约是几个ms.问题是,我们发送到API的测试消息很小,并且产品中的测试消息将大得多,因此Prod的初始化3-4秒可能会更长. 解决方案 以下是您可以执行的步骤以自动初始化IIS托管的应用程序 - •安装应用程序初始化功能-IIS 8.0应用程序 https://lear
我们在Web应用程序中使用nservicebus,每次将代码部署到生产中时,我们都必须在文件夹中删除临时文件: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 我们正在按照此处的说明进行修复: http://www.nservicebus.com/faq/TypeNotRegisteredInSerializer.aspx 我想知道是否有更永久的解决方案?我觉得每次部署新代码时,我都在为此而战.从代码中处理此问题的最佳方法是什么?如果那不起作用,最好只是停止应用程序池,删除文件并在每次部署新代码时重新启动应用程序池? 感谢您的任何建议. 解决方案 而不是使用configure.withweb(),请尝试: Configure.With(HttpRuntime.BinDirectory) 这样,它将在部署的Web应用程序中而不是临时文件夹中搜索实际的BIN
当我为我的WebApp构建一个部署包时,软件包包含一个包含以下内容的Archive.xml文件: 问题: 如何控制WebApp安装到并创建新应用程序池的应用程序池?是否有VS设置可以更改以控制上述输出或以其他方式影响部署时间的应用程序池? 到目前为止我发现的内容: 1. msbuild参数 根据我可以告诉MSBuild通过添加以下选项来使用应用程序池,但我看不到生成的输出有任何区别: /p:IncludeAppPool=true 2.一个parameters.xml文件自定义 另一篇关于为msdeploy设置应用程序池的帖子暗示我也许可以修改生成的parameters.xml文件,以便我可以
我正在使用msdeploy部署网站,因此使用以下代码之类的内容. "%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:package=WebAppServer.zip -dest:Auto -setParamFile="was_params.xml" -verbose > webappserversync.log 无论如何是否可以设置应用程序池?我想从命令行进行此操作,而不是在清单或类似的东西中设置它. 应该没关系,但这在IIS7中. 解决方案 生成软件包时,您需要在parameters.xml文件中使用一个条目来设置应用程序池.部署时,您要么在setParameters.xml文件中包含一个值,要么在命令行中使用-setParam. 这是我用来获取一个站点的命令,该命令生成了适当的
当我通过URL访问 时,我有一个在最新mod单声道上运行的ASP.NET应用程序 1. http://myServer.com/App 或 2. http://localhost:81/App 我会为每个地址获得不同的实例.我怎么知道有不同的?通过检查Application_start实际上触发了两次和具有不同值的ASP.NET应用程序变量. 我仅在要通过SSH连接到服务器时才使用第二个地址,并且我使用本地端口转发,以便实际上从端口81上发送的每个请求都将其转发到服务器上的端口80./p> 两个地址指向相同的phisycal位置,我不明白为什么每个人实际上都有两个不同的实例? 谢谢 编辑 特定示例: 这是我将应用程序开始事件的时间存储在global.asax.cs 中的方式 public static string AppStartTime; protected void Application_Start(obj
更新 - 复制问题的过程: 1)在 c:\ projects \ restart-demo 创建网站项目 2)添加默认的web.config和虚拟ASPX页 test.aspx 3)映射IIS指向根文件夹 c:\ projects \ restart-demo 4)使用PerfMon,健康监控,Asax Application_end等的监视应用程序重新启动应用程序,等等. 5)浏览器中的请求页 http://localhost/test.aspx.aspx 应用程序开始 6)创建新文件夹 c:\ projects \ restart-demo \ asdf 应用程序结束 7)浏览器中的请求页 http://localhost/test.aspx.aspx 应用程序开始 8)重命名文件夹 c:\ projects \ restart-demo \ asdf to c:\ projects \ restart-demo \ a
我在类中使用以下方法 - 我从.cs页面填充数据标准: public static SqlDataReader getinfo(string username, string url) { //Initialise connection, string stored in Web.config SqlConnection conNs = new SqlConnection(ConfigurationManager.ConnectionStrings["conNs"].ConnectionString); SqlCommand cmdNs = new SqlCommand("usp_getinfo", conNs); cmdNs.CommandType = CommandType.StoredProcedure; cmdNs.Parameters.Add(new SqlParameter("@username", SqlDbType.VarC
实际上,我期望SqlExcpetion像用户IIS AppPool\My AppPool Name异常而不是Domain\MachineName$. 我创建了一个使用 的应用程序池 管理管道模式:集成 身份:ApplicationPoolidentity 此AppPool分配给了有关的Web应用程序(MVC3).但是某种程度上,WebApp似乎正在以某种方式使用网络服务来连接到SQLServer. 任何想法为什么或我应该更改什么? 解决方案 事实证明,我忘了将连接字符串更改为sqlserver. 因此,他们指向网络中的另一台计算机的位置,因为IIS AppPool\My AppPool Name仅在本地服务器上有效,iis会自动采用网络服务以访问网络中的东西,这就是为什么它显示Domain\MachineName$. p>
我们有一个Active Directory域(我们称其为foodomain)和一个用于IIS应用程序池标识的域用户帐户(foodomain\fooAppPoolUser). 我们想在此用户帐户下运行应用程序池,而不是在Network Service或新的AppPoolIdentity下运行应用程序池,因为我们必须访问SQL Server并在IIS(带有自己的应用程序池)上具有多个应用程序,以访问不同的数据库. 问题是,我找不到清晰的方法解释,必须为该用户帐户设置哪些用户权利以及必须如何设置IIS,以便它可以正常工作. 首先,我有错误(不幸的是我不记得哪些),然后我添加了fooAppPoolUser到本地管理员组(我知道,只是要测试),然后它起作用.现在,我再次删除了用户,重新启动了IIS,但它仍然有效. 所以我有点困惑,想知道,配置/设置必须如何使其正常工作. 我读到的是,该帐户需要在身份验证后的" 模仿客户"权利.这就是我将帐户添加到管理员组的原因(用户权
我想编写脚本并从本地PC运行它以停止并启动服务器上存在的应用程序池和网站. 应用程序池和站点的价值 - 测试 服务器的值-Server1 任何指导都将不胜感激. 解决方案 运行命令提示符具有管理权,并键入以下内容: C:\Windows\System32\inetsrv\appcmd start apppool /apppool.name:"MYAPPPOOLNAME" 或使用stop命令.您可以将其保存在批处理文件中,但必须具有较高特权执行. 对于远程服务器上的应用程序池,您可以使用 psexec : Psexec \\{Computer Name of ISS7 Server} C:\Windows\System32\inetsrv\appcmd recycle apppool my-app-pool
设置"无托管代码"的点是什么意义. 文档说 ASP.NET Core在单独的过程中运行并管理运行时. ASP.NET Core不依赖加载桌面CLR.设置.NET 无托管代码的CLR版本是可选. 由于它是可选的,因此保持默认值 v4.0 的缺点是什么?为什么文档明确指示将其设置为"无托管代码"?目前尚不清楚该特定配置是否存在性能问题. 解决方案 当您指定.net CLR版本为4.0的应用程序池时,IIS将加载到其工作过程中,将加载一些ASP.NET支持库(例如,用于经典管道模式的aspnet_isapi.dll,webengine4.dll用于集成模式) .这样的增加了记忆使用情况和攻击表面,也可能会产生其他影响. 因此,如果您仅运行non-asp.net 4.x应用程序(PHP,ASP.NET核心等),则可以设置"无托管代码"来删除所有麻烦.
我有一个ASP.NET MVC5 Web应用程序,该应用程序配置为在.NET Framework版本4.5.1上运行.但是,我注意到,当我获得某种形式的应用程序运行时,在黄色服务器错误页面底部显示的版本信息说: : 版本信息:Microsoft .NET框架版本:4.0.30319; ASP.NET版本:4.0.30319.34009 为什么这不是4.5.x? 解决方案 不是实际的.NET框架版本.这是Clr. 的版本 从.NET 4到4.5.2它是版本4.在2.0和3.5之间是2.0版. 这也是您的应用程序池配置中您只能选择.NET 2或4. 的原因 请参阅 msdn:.net框架版本和依赖项这件事.
我正在尝试获取 iis 7 应用程序池回收,启动,停止等.我遵循了本文中的步骤,但没有任何成功.我重新启动了应用程序池,事件日志中没有记录. (我检查了"应用程序"和"系统"日志.)但是当我进行登录的IIS重置时. 解决方案 本文清楚地清楚了为什么未在事件日志中注册事件: http://blogs.msdn.com/b/david.wang/archive/2006/02/02/02/28/why-iis6-application-pool-pool-recycle-events-events-events-events-events-are-are-not-not-logged. aspx 其他解决方案 对于 iis 7 ,IIS经理可以用来使回收事件可以记录在Windows事件中: 打开IIS经理. 单击应用程序池. 单击关注的应用程序库,然后单击高级设置... . 在回收下,展开生成回收事件日志条目. 可以记录的可用回收事件是: 应用程序池
我正在阅读以下文章如何如何正确使用ihttpmodule * 现在让我们想一想.应用池.是的.它 意味着某个Web应用程序正在运行多个 一个池中的httpapplication实例.是的.否则 不会被称为游泳池. »有几个?«您可能会问.那不是 只要您知道可能有多个.我们 相信IIS做工作.显然它做得很好,以至于 对于我们开发人员来说,这一事实完全透明 完全了解其内部运作.我们依靠它的坚固性 提供服务.而且确实如此.这些httpapplication中的每一个 池中的实例保留其使用的HTTP模块列表 每个请求都可以处理. * 我有一个问题,即在哪些方案下,应用程序对象可以为一个应用程序运行.到现在为止,我知道每个应用程序都存在一个单个应用程序对象.因此,我很想知道,每个应用程序都可以运行多个实例以及如何确定它是真的吗? 解决方案 每个HttpApplication对象实例是单个请求唯一的.如果您的网站正并行处理多个请求,则每个请求都必须具有自己的实例HttpAp