动态创建IIS站点
时间:2020-01-10
本文章向大家介绍动态创建IIS站点,主要包括动态创建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
- Python云计算框架:OpenStack源码分析之RabbitMQ(二)
- 编程获得CPU的主频
- Python多进程并行编程实践:以multiprocessing模块为例
- 由函数clock想到的
- (34) 随机 / 计算机程序的思维逻辑
- 创建和使用Windows静态链接库
- (37) 泛型 (下) - 细节和局限性 / 计算机程序的思维逻辑
- 快速失败Vs安全失败(Java迭代器附示例)
- Flask-SocketIO 文档译文
- 屏幕输出VS文件输出
- 判断一个数是不是2的幂
- (32) 剖析日期和时间 / 计算机程序的思维逻辑
- Python开发微信公众号后台(系列三)
- 【新手向】为何要这样安装Django?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 515C (数学)
- codeforces 1010A(二分答案)
- codeforces 628B(数学)
- codeforces 1385D(dfs)
- codeforces 1353D(优先队列)
- Coins (多重背包二进制优化)
- POJ 2063(完全背包)
- POJ2955(区间dp)
- codeforces 224B(思维+双指针)
- java学习应用篇|idea的基本安装和使用
- codeforces 349B(贪心)
- codeforces 1311D(暴力)
- codeforces 1382C1(思维)
- java学习原理篇|如何学习使用一个新工具
- codeforces 545C(贪心)