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, $"创建虚拟目录失败,原因:网站创建失败");
                    }
                }
            });
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值