我是靠谱客的博主 顺利羊,最近开发中收集的这篇文章主要介绍IIS 创建虚拟目录: 无法提交配置更改,因为文件已在磁盘上更改。( 附:C# 创建网站,并添加虚拟目录),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
在使用 ServerManager 类时出现了该问题;
目标是循环创建虚拟目录,但是循环体内不能反复使用同一个 ServerManager。
因此建议:声明静态化服务管理类
public static ServerManager sm = new ServerManager();
在使用时添加锁更保险。
这里我写了一个公共类,用于代码创建网站,并添加虚拟目录:
///创建网站
public static bool Create_Web(string ip, string port, string web_name, string web_path = "D://TOECProgramFiles//TOEC_PlayBack_Video")
{
try
{
DirectoryInfo dir = new DirectoryInfo(web_path);
if (!dir.Exists)
{
Directory.CreateDirectory(web_path);
File.WriteAllText(web_path + "//视频回放缓存地址-请勿删除!!!.txt", "本目录为视频回放模块的虚拟目录映射地址,请勿删除!");
}
Site old = sm.Sites.FirstOrDefault(n => n.Name == web_name);
if (old != null)
{
return true;
}
else
{
//创建应用池
if (sm.ApplicationPools[web_name] == null)
{
sm.ApplicationPools.Add(web_name);
ApplicationPool curAppPool = sm.ApplicationPools[web_name];
curAppPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
curAppPool.Failure.RapidFailProtection = true;
curAppPool.Enable32BitAppOnWin64 = true;
sm.ApplicationPools[web_name].ManagedRuntimeVersion = "v4.0";//必须这么写才能选中默认V4.0.30319
curAppPool.AutoStart = true;
}
Site curweb = sm.Sites.Add(web_name, "http", ip + ":" + port + ":", dir.FullName);
//curweb.Bindings.Add("202.202.202.1:" + port + ":", "http"); //绑定默认IP
curweb.Applications[0].ApplicationPoolName = web_name;
curweb.ServerAutoStart = true; //开启站点
sm.CommitChanges();
return true;
}
}
catch (Exception ex)
{
Logger.Info(Logger.logPath_DMSSocket, Logger.logName_DMSSocketContents, $"网站创建失败:{ex.Message}");
return false;
}
}
/// <summary>
/// 创建虚拟目录
/// </summary>
public static void Create_VirtualDir(string ip, string port, string web_name, string virtal_name, string real_path)
{
Task.Factory.StartNew(() =>
{
lock (locker)
{
bool flag = Create_Web(ip, port, web_name);
if (flag)
{
ServerManager sm = new ServerManager();
Site curweb = sm.Sites.FirstOrDefault(n => n.Name == web_name);
VirtualDirectory vdc = curweb.Applications[0].VirtualDirectories.FirstOrDefault(n => n.PhysicalPath == real_path);
if (vdc != null) { Logger.Info(Logger.logPath_DMSSocket, Logger.logName_DMSSocketContents, $"虚拟目录({virtal_name})已存在"); return; }
int i = 0;
while (true)
{
Thread.Sleep(1000);
if (vdc == null && i++ < 3)
{
//创建虚拟目录
curweb.Applications[0].VirtualDirectories.Add("/" + virtal_name, real_path);
sm.CommitChanges();
vdc = curweb.Applications[0].VirtualDirectories.FirstOrDefault(n => n.PhysicalPath == real_path);
}
else
{
if (i < 3)
{
Logger.Info(Logger.logPath_DMSSocket, Logger.logName_DMSSocketContents, $"虚拟目录({virtal_name})创建成功");
}
else
{
Logger.Info(Logger.logPath_DMSSocket, Logger.logName_DMSSocketContents, $"虚拟目录({virtal_name})失败,重试次数超过{i} ");
}
break;
}
}
//设置权限
Helper_FileDir.AddSecurityControll2Folder(real_path);
}
else
{
Logger.Error(Logger.logPath_DMSSocket, Logger.logName_DMSSocketContents, $"创建虚拟目录失败,原因:网站创建失败");
}
}
});
}
}
}
最后
以上就是顺利羊为你收集整理的IIS 创建虚拟目录: 无法提交配置更改,因为文件已在磁盘上更改。( 附:C# 创建网站,并添加虚拟目录)的全部内容,希望文章能够帮你解决IIS 创建虚拟目录: 无法提交配置更改,因为文件已在磁盘上更改。( 附:C# 创建网站,并添加虚拟目录)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复