use*_*333 5 c# application-pool servermanager
我正在尝试使用该类创建应用程序池ServerManager。这是我的代码:
using (ServerManager serverManager = new ServerManager()) {
if (!serverManager.ApplicationPools.Any(p => p.Name == poolName)) {
ApplicationPool newPool = serverManager.ApplicationPools.Add(poolName);
newPool.ManagedRuntimeVersion = "v4.0";
newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
newPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
newPool.ProcessModel.UserName = user;
newPool.ProcessModel.Password = pass;
serverManager.CommitChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序池已创建,但未为其设置标识 - IIS 管理器中的应用程序池表中的标识列为空。我究竟做错了什么?
用户采用域\用户名的形式,并且传递的凭据是正确的(代码的另一部分检查这些凭据)。
小智 2
看一下这段代码。它对我有用:
public static ApplicationPool GetOrCreateApplicationPool(ServerManager serverManager, string applicationPoolName, string userName, SecureString password)
{
if (!serverManager.ApplicationPools.Any(p => p.Name.Equals(applicationPoolName)))
{
ApplicationPool appPool = serverManager.ApplicationPools.CreateElement();
appPool.Name = applicationPoolName;
appPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
appPool.ManagedRuntimeVersion = "v4.0";
if(password != null)
{
if (!(string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(password.ToPlainTextString())))
{
appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
appPool.ProcessModel.UserName = userName;
appPool.ProcessModel.Password = password.ToPlainTextString();
}
}
serverManager.ApplicationPools.Add(appPool);
serverManager.CommitChanges();
}
return serverManager.ApplicationPools.First(p => p.Name.Equals(applicationPoolName));
}
Run Code Online (Sandbox Code Playgroud)
当然,还有一些其他方法(例如扩展)可能会导致这段代码无法运行,但想法是存在的,并且当前正在我的应用程序上运行。