对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

通过代码动态创建IIS站点相关推荐

  1. PHP动态创建Web站点

    在这一篇中我写了一些动态创建Web站点的一些内容,例如黏性表单.发送电子邮件.日期函数等.希望能对大家有所帮助,别忘了好评哦. PHP有4个用于使用外部函数的函数:include().include_ ...

  2. 代码动态创建checkbox

    根据数据库的内容动态创建Checkbox控件并显示在Panel上 dataset ds=new dataset(); CheckBox[ ] cb=new CheckBox[ds.tables[0]. ...

  3. powershell创建iis站点、应用程序及应用程序池

    之前工作用到的,还有一点需要优化的地方 try {Import-Module WebAdministration -ErrorAction Stop }catch [System.SystemExce ...

  4. iis管理常用命令 创建IIS站点 应用应用程序 及虚拟目录

    ::防止中文输出乱码 chcp 65001::临时设置PATH set PATH=%SystemRoot%\system32\inetsrv;%PATH% ::列出所有站点 appcmd list s ...

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

    错误如下:   服务器错误 Internet信息服务 7.0 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详 ...

  6. php整么新建站点,PHP动态创建Web站点的方法

    PHP有4个用于使用外部函数的函数:include().include_once().require()和require_once(). 为了使用它们,PHP脚本中将包括如下代码行: include_ ...

  7. 通过代码动态创建Windows服务

    开发完Windows服务后,一般通过如下命令进行注册Windows服务 @echo off %SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\inst ...

  8. VS2005 ASP.NET2.0安装项目的制作(包括数据库创建、站点创建、IIS属性修改、Web.Config文件修改)

    站点: 如果新建默认的Web安装项目,那它将创建的默认网站下的一个虚拟应用程序目录而不是一个新的站点.故我们只有创建新的安装项目,而不是Web安装项目.然后通过安装类进行自定义操作,创建新站如下图: ...

  9. Angular动态创建组件之Portals

    本文主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的内容.如:Angular多级依赖注入.ViewContainerRef,Portal ...

最新文章

  1. epub 电子书软件代码销售
  2. 新入驻博客园立一个flag
  3. java excel sheet页_Java导出Excel Sheet页
  4. Java高级面试题!java小游戏制作视频
  5. [设计模式] javascript 之 策略模式
  6. aelf宣布推出集中式资产管理系统CAM
  7. 基于深度学习的自动化行人检测和监控系统
  8. matlab2013语言设置,科学网—macOS MATLAB 更改界面语言设置——中文改为英文 - 李航的博文...
  9. 关于pycharm安装出现的interpreter field is empty,无法创建项目存储位置
  10. Java、JSP员工考勤管理系统
  11. 技术贴:物联网最低功耗解决方案由何种传感器实现的?
  12. 2021年电赛仪器仪表类重难点
  13. 台式计算机总是重启,台式电脑总是自动重启,查不出问题!
  14. [从头读历史] 第248节 先天八卦和后天八卦
  15. 婴儿纸尿裤的综合分析
  16. Android Studio添加常用快捷工具图标
  17. 牛客刷题——Python入门总结
  18. 杀死O2O的三大杀手?!
  19. 简单理解 柯理化函数
  20. Docker中搭建redis分片集群,搭建redis哨兵结构,实现springboot中对redis分片集群、哨兵结构的访问,Redis缓存雪崩、缓存击穿处理(非关系型数据库技术课程 第十二周)

热门文章

  1. JavaScript实现在线MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程序员在线工具网...
  2. java笔记 -- java运算
  3. 关于移动CRM的学习(一)
  4. 程序员:如何成为一个全栈的工程师?
  5. LruCache缓存处理及异步加载图片类的封装
  6. php实现图片缩放功能类
  7. Jquery 选择器大全 【转载】
  8. 刚刚做了个chrome浏览器 博客园转载插件,欢迎试用,多提意见!
  9. 手杀***病毒Trojan.Win32.Generic.11EBD5EC
  10. 在HYPER-V中利用差异磁盘和SYSPREP技术安装多个WINDOWS 2008