我遇到了以下问题.
我运行以下代码
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
Run Code Online (Sandbox Code Playgroud)
在两个过程中.其中一个进程运行,LOCAL_SYSTEM并且此代码成功.另一个在IIS中在属于"Users"本地组的本地用户帐户下运行,在那里我得到以下异常:
System.Security.Cryptography.CryptographicException
Object was not found.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password)
//my code here
Run Code Online (Sandbox Code Playgroud)
所以我用Google搜索了一下,找到了一个类似问题的答案.我尝试启用LoadUserProfile应用程序池,现在可以正常运行.
问题是我没有得到我设置时会发生LoadUserProfile什么以及可能产生的后果.我的意思是,如果它是一个"好"的东西那么为什么它不是默认"开启",为什么它毕竟在那里?
当我LoadUserProfile在IIS池中设置时会发生什么,它会产生什么负面影响?
我一直在寻找这方面的信息无济于事.我需要这个的背景是我在这里问的另一个问题.更具体地说,在App_Data中创建/更新/删除文件会导致池回收吗?
如果有人能提供导致回收的详细清单,那就太好了.
更新:由于两个用户已经注意到我也很乐意回答指定仅回收AppDomain而不是整个池的原因.
如何从C#(.net 2)重新启动(回收)IIS应用程序池?
感谢您发布示例代码吗?
我想看看如何使用IIS PowerShell Cmdlet New-WebAppPool来指定要使用的.NET Framework版本.目前,它默认为v2.0,但我使用MVC,这不起作用,因为这是一个v4.0功能.我们真的希望每个站点都有自己的应用程序池,似乎我们必须手动创建这些池,因为无法通过脚本配置它们.有没有办法自动化这个?
我担心答案是"你不能",因为文档似乎没有提供任何设置它的参数,谷歌正在蹲下; 它给我的印象是,只能以脚本方式设置站点是可以接受的,而且关于配置应用程序池的一些事情就是"没有完成".我无法想象为什么不 - 如果你是自动化过程的一个主要部分,为什么你不能自动化其他主要部分?
任何可能通过PowerShell了解如何做到这一点的人都会帮助我.
windows iis powershell application-pool .net-framework-version
我在IIS中遇到超时问题.在web.config中,会话超时设置为60分钟,但在20分钟后会话结束.
此问题仅发生在IIS7中而不是IIS5中.
经过一番调查,我发现这是由于应用程序池的超时.如果应用程序池在没有执行任何操作的情况下保留20分钟,则IIS将结束会话.
如果应用程序使用defaultAppPool,则总会发生这种情况,但如果我将App Pool更改为经典的.NET App Pool,则不会发生超时.
两种模式都有空闲超时,但仅在DefaultAppPool中发生这种情况.
场景:我使用Web部署项目部署了一个n层企业ASP.NET应用程序.所有层都生成ASP.NET应用程序使用的独立程序集.
问题:当我运行应用程序时.部署后第一次将相关程序集加载到内存中需要花费大量时间.但一旦加载其照明快速应用程序.如果没有用户访问该应用程序,IIS将从内存中卸载程序集,当用户尝试在以后的实例上访问该应用程序时,它会再次加载所有程序集,并且需要花费相同的时间来加载它这是第一次这样做.
我正在寻找一种解决方案,使我能够将我的程序集加载到内存中,持续覆盖程序集的易变性,以实现内存驻留.
或任何其他解决方案,让我的用户愉快地使用该应用程序解决上述问题.
是否有人熟悉获取与进程ID关联的应用程序池的方法?我正在使用Win32_Process查询W3WP服务并返回PID现在我正在尝试获取与之关联的应用程序池.
我注意到在我的一个生产网络应用程序中,当我手动回收应用程序池时,基于在任务管理器中观察,回收的工作进程可能需要超过60秒以实际完全销毁.但是,如果我完全停止应用程序池,则工作进程几乎立即消失 - 在1-2秒内消失.
所以,我的问题是双重的:
a)当应用程序池被回收而不是停止时,为什么要花费这么长时间来销毁进程(更有意义的是,释放由它使用/锁定的资源); 和
b)假设我已经阻止流量被定向到服务器,是否有任何理由不停止/启动而不是回收?
编辑:
为了澄清,在我回收或停止应用程序池之前,我阻止流量被发送到有问题的服务器(服务器在负载平衡群集中,我从负载均衡器中删除服务器).因此,理论上,在我对应用程序池执行任何操作时,不应该向网站发出请求.
编辑Part Deux:
在阅读Igal的链接后,对我来说似乎很明显发生了什么.当我回收应用程序池时,新进程已启动,但由于根本没有流量,因此它没有将新进程注册为正常运行,因此在超时之前它不会关闭旧进程(即90秒).
有了这些知识,我很清楚"回收"功能专门用于在实时服务器的中游使用,并且因为我事先手动排出流量,所以我应该使用停止/启动.
application-pool ×10
iis ×8
asp.net ×4
.net ×3
iis-7 ×3
c# ×2
appdomain ×1
asp.net-mvc ×1
assemblies ×1
pid ×1
powershell ×1
recycle ×1
windows ×1