我是靠谱客的博主 顺利羊,最近开发中收集的这篇文章主要介绍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# 创建网站,并添加虚拟目录)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部