动态创建IIS站点

对WebApi进行单元测试时,一般需要一个IIS站点,一般的做法,是通过写一个批处理的bat脚本来实现,其实通过编码,也能实现该功能。

主要有关注三点:应用程序池、Web站点、绑定(协议类型:http、https,IP地址,端口,主机名)

1.总体代码

  var webSite = app.WebSite;

            using (var sm = new ServerManager())
            {
                //创建应用程序池
                var appPool = sm.ApplicationPools.FirstOrDefault(ap => ap.Name.Equals(webSite.PoolName));

                if (appPool == null)
                {
                    CreateAppPool(sm.ApplicationPools, webSite.PoolName);
                }

                //创建Web站点
                var site = sm.Sites.FirstOrDefault(s => s.Name.Equals(webSite.SiteName));

                if (site == null)
                {
                    CreateWebSite(sm.Sites, webSite, app.InstallPath);
                }

                sm.CommitChanges();
            }

2.创建应用程序池:

 /// <summary>
        /// 创建应用程序池
        /// </summary>
        /// <param name="appPools"></param>
        /// <param name="appPoolName"></param>
        private void CreateAppPool(ApplicationPoolCollection appPools, string appPoolName)
        {
            var appPool = appPools.Add(appPoolName);

            //是否自启动
            appPool.AutoStart = true;
            //队列长度
            appPool.QueueLength = 10000;
            //启动模式
            appPool.StartMode = StartMode.AlwaysRunning;
            //回收时间间隔
            appPool.Recycling.PeriodicRestart.Time = new TimeSpan();
            //闲置超时
            appPool.ProcessModel.IdleTimeout = new TimeSpan();
            //最大工作进程数
            appPool.ProcessModel.MaxProcesses = 1;
        }

3.创建站点

  /// <summary>
        /// 创建Web站点
        /// </summary>
        /// <param name="sites"></param>
        /// <param name="webSite"></param>
        /// <param name="physicalPath"></param>
        private void CreateWebSite(SiteCollection sites, WebSite webSite, string physicalPath)
        {
            Site site = null;
            bool isSiteCreated = false;

            foreach (var binding in webSite.Bindings)
            {
                var bingdingInfo = ConstructBindingInfo(binding);

                if (!isSiteCreated)
                {
                    site = sites.Add(webSite.SiteName, binding.BindingType, bingdingInfo, physicalPath);

                    //是否自启动
                    site.ServerAutoStart = true;

                    isSiteCreated = true;
                }
                else
                {
                    site.Bindings.Add(bingdingInfo, binding.BindingType);
                }
            }

            var root = site.Applications["/"];

            //设置应用程序池
            root.ApplicationPoolName = webSite.PoolName;
            //设置虚拟目录
            //  root.VirtualDirectories["/"].PhysicalPath = pathToRoot;
            //预加载
            root.SetAttributeValue("preloadEnabled", true);
        }

4.创建绑定

  /// <summary>
        /// 构建绑定信息
        /// </summary>
        /// <param name="binding"></param>
        /// <returns></returns>
        private string ConstructBindingInfo(WebSiteBinding binding)
        {
            var sb = new StringBuilder();

            if (!string.IsNullOrEmpty(binding.IP))
            {
                sb.Append(binding.IP);
            }
            else
            {
                sb.Append("*");
            }

            sb.Append(":");

            sb.Append(binding.Port);

            sb.Append(":");

            if (!string.IsNullOrEmpty(binding.HostName))
            {
                sb.Append(binding.HostName);
            }
            else
            {
                sb.Append(string.Empty);
            }

            return sb.ToString();
        }

转载于:https://www.cnblogs.com/liugh/p/8684696.html

原文地址:https://www.cnblogs.com/hofmann/p/12174723.html

时间: 2024-10-28 19:50:40

动态创建IIS站点的相关文章

通过代码动态创建IIS站点

对WebApi进行单元测试时,一般需要一个IIS站点,一般的做法,是通过写一个批处理的bat脚本来实现,其实通过编码,也能实现该功能. 主要有关注三点:应用程序池.Web站点.绑定(协议类型:http.https,IP地址,端口,主机名) 1.总体代码 var webSite = app.WebSite; using (var sm = new ServerManager()) { //创建应用程序池 var appPool = sm.ApplicationPools.FirstOrDefaul

利用ansible批量创建iis站点

准备: 系统必须大于等于windows2008 R2 系统 升级 PowerShell至3.0 安装iis 安装net ansible控制台目录结构 . ├── hosts #ansible 存放客户机IP ├── roles │   └── web │       ├── files │       │   └── web.ps1 # 创建iis站点ps脚本 │       └── tasks │           └── main.yml #ansible 控制脚本 └── web.yml

使用appcmd命令创建iis站点及应用程序池

参考文章:iis7 appcmd的基础命令及简单用法 验证环境:Windows 7    IIS7 AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下,所以执行命令前,先把当前目录切换到该目录下: cd C:\Windows\System32\inetsrv 创建iis站点: appcmd add site /name:"MyTestSite1" /bindings:http/*:8990: /physicalPath:"E:\

C#实现动态发布IIS站点帮助类

准备工作: 1.引用 System.DirectoryServices 系统程序集 2.引用 Microsoft.Web.Administration 程序集,类库位置在 C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll ,直接拷贝到项目引用即可 3.调用方式: string bing = string.Format("{0}:{1}:{2}", item.BingIp, item.Port, item.BingA

cmd下命令行创建 IIS 站点

windows 创建站点命令 appcmd C:\Windows\System32\inetsrv\appcmd.exe SITE 虚拟站点的管理 APP 管理应用程序 VDIR 管理虚拟目录 APPPOOL 管理应用程序池 CONFIG 管理常规配置节 WP 管理工作进程 REQUEST 管理 HTTP 请求 MODULE 管理服务器模块 BACKUP 管理服务器配置备份 TRACE 使用失败请求跟踪日志 list 列出应用程序池 set 配置应用程序池 add 添加新应用程序池 delete

针对windowsserver 创建iis站点访问出错的解决方案(HTTP 错误 500.19 - Internal Server Error)

错误如下:   服务器错误 Internet信息服务 7.0 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginRequest 处理程序 尚未确定 错误代码 0x80070005 配置错误 由于权限不足而无法读取配置文件 配置文件 \\?\C:\Users\Administrator\Desktop\zzu\web.config 请求的 URL htt

C#ASP.NET打包安装部署文件一键安装网站,包括IIS站点创建、数据库附加。

最近在开发web网站安装部署,以前从来没有做过web的安装打包没有头绪就开始上网查资料. 查了两天资料发现网上的资料要么不全要么就有错误,我就总结了网上的资料重新整理的一番,经过本人测试可用无错误 一下为借鉴部分资料的原文地址 此链接为打包ASP.NET网站资料(这个资料有问题,在自定义操作哪一步详情看下面文章):http://www.cnblogs.com/fish520/archive/2016/09/22/5882450.html 此链接为创建IIS站点(其中代码不全我还借鉴的部分其他论坛

使用ASP在IIS创建WEB站点的函数

程序代码: '=========================================================='函数介绍:创建WebSite'本函数使用ADSI,需要Administrators组用户权限'函数名称:CreateWebSite(Computer,IPAddr,PortNum,HostName,WebSiteDirectory,LogDirectory,WebSiteInfo,GuestUserName,GuestUserPass,StartOrStop)'用法

zabbix企业应用:利用自动发现监控IIS站点

如果一台windows server有许多个IIS站点,我们想实现这样一个监控目标:监控每个站点的状态.请求.流量.连接数,而且以后新增加的站点也可以自动加入到监控里,不需要再手动添加. 利用zabbix的自动发现(LLD)功能结合脚本可以实现上面的需求,实现对IIS站点的动态添加,动态监控. 先看一下监控的效果: 上图中的"Web Service(wskh)"是指IIS网站名称为wskh:"Web Service(_Total)"是指IIS下所有的站点. 网站流量