发布:2020/10/14 23:46:06作者:管理员 来源:本站 浏览次数:1177
最近接到需求 简化部署IIS网站 之前都是手动部署,别人嫌弃麻烦 没办法就各种找办法实现自动化部署,最终找到 利用 Microsoft.Web.Administration.dll 实现网站程序一键发布的功能 比之前写的方法好用了很多;优点是可以直观的设置网站各方面的配置,缺点目前没发现 做下备忘
Microsoft.Web.Administration.dll 在 %WinDir%\\System32\\InetSrv 目录下
using Microsoft.Web.Administration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
namespace MedicalServiceMIS.Common
{
/// <summary>
/// 网站发布帮助类
/// </summary>
public class PublishWebHelper
{
private string WebName;
private int Port;
private string ServerDomainName;
public PublishWebHelper(string WebName, int Port, string ServerDomainName = null)
{
this.WebName = WebName;
this.Port = Port;
this.ServerDomainName = ServerDomainName;
}
public bool Execute(string WebsiteDirectory, out string ErrorContent)
{
ServiceController service = ServiceController.GetServices("127.0.0.1").FirstOrDefault(x => x.ServiceName == "W3SVC");
if (service is null)
{
ErrorContent = "服务器尚未安装 IIS 服务模块!";
return false;
}
if (!System.IO.Directory.Exists(WebsiteDirectory))
{
ErrorContent = "指定目录不存在!";
return false;
}
try
{
ServerManager iismanager = new ServerManager();
//判断应用程序池是否存在
if (iismanager.ApplicationPools[WebName] != null)
{
//移除应用程序池
iismanager.ApplicationPools.Remove(iismanager.ApplicationPools[WebName]);
}
//判断web应用程序是否存在
if (iismanager.Sites[WebName] != null)
{
///移除应用程序
iismanager.Sites.Remove(iismanager.Sites[WebName]);
}
//建立web应用程序(第二个参数为安装文件的地址)
iismanager.Sites.Add(WebName, WebsiteDirectory, Port);
//添加web应用程序池
ApplicationPool pool = iismanager.ApplicationPools.Add(WebName);
#region 应用程序池配置
pool.StartMode = StartMode.AlwaysRunning;//启动模式
pool.Recycling.PeriodicRestart.Schedule.Add(new TimeSpan(03, 00, 00));//凌晨回收一次资源
pool.Cpu.Limit = 50000;//限制最大CPU 50%
pool.Cpu.Action = ProcessorAction.ThrottleUnderLoad;//竞争cpu时限制使用最大cpu 百分比
//设置web应用程序池的Framework版本(注意版本号大小写问题)
pool.ManagedRuntimeVersion = "v4.0";
//设置是否启用32为应用程序
pool.Enable32BitAppOnWin64 = true;
///设置专用内存限制 1G 超出释放一次
pool.Recycling.PeriodicRestart.PrivateMemory = 512000 * 2;
#endregion
//设置web网站的应用程序池
var website = iismanager.Sites[WebName];
website.Applications[0].ApplicationPoolName = WebName;
if (!string.IsNullOrEmpty(ServerDomainName))
{
string str = website.Bindings[0].Host.Split(new char[] { '.' })[0];
string bindingInformation = $"*:{Port}:{str}{ServerDomainName}";
website.Bindings.Add(bindingInformation, "http");
}
//提交更改
iismanager.CommitChanges();
}
catch (Exception ex)
{
ErrorContent = ex.Message;
return false;
}
ErrorContent = "部署成功";
return true;
}
}
}
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4