C#创建IIS站点

原创 Laughing  2018-03-09 22:49  阅读 747 次 评论 0 条

利用IIS7自带类库管理IIS现在变的更强大更方便,而完全可以不需要用DirecotryEntry这个类了(网上很多.net管理iis6.0的文章都用到了DirecotryEntry这个类 ),Microsoft.Web.Administration.dll位于IIS的目录(%WinDir%\\System32\\InetSrv)下,使用时需要引用,它基本上可以管理IIS7的各项配置。

这个类库的主体结构如下:

主要代码如下

前端代码

  1. <%@ Page Title="IIS管理" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Manager.aspx.cs" Inherits="IISManager.Ide.Net.Cn.Manager" %>  
  2.   
  3. <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">  
  4.     <h2><%:Page.Title %></h2>  
  5.     <asp:Panel CssClass="panel panel-default" runat="server">  
  6.         <div class="panel-body">  
  7.             <asp:Label runat="server" CssClass="control-label">网站IP</asp:Label><asp:TextBox CssClass="form-control" Width="100%" runat="server" ID="txtIP" ClientIDMode="Static" ToolTip="网站名称">localhost</asp:TextBox>  
  8.             <br />  
  9.             <asp:Label runat="server" CssClass="control-label">网站名称</asp:Label><asp:TextBox CssClass="form-control" Width="100%" runat="server" ID="txtSiteName" ClientIDMode="Static" ToolTip="网站名称">test</asp:TextBox>  
  10.             <br />  
  11.             <asp:Label runat="server" CssClass="control-label">物理路径</asp:Label><asp:TextBox CssClass="form-control" Width="100%" runat="server" ID="txtPath" ClientIDMode="Static" ToolTip="网站路径">c:\test</asp:TextBox>  
  12.             <br />  
  13.             <asp:Label runat="server" CssClass="control-label">端口</asp:Label><asp:TextBox CssClass="form-control" Width="100%" runat="server" ID="txtPort" ClientIDMode="Static" ToolTip="网站端口">1234</asp:TextBox>  
  14.             <br />  
  15.             <asp:Button ID="btnAdd" EnableViewState="false" UseSubmitBehavior="false" runat="server" Text="提交" CssClass="btn btn-default" OnClick="btnAdd_Click"></asp:Button>  
  16.         </div>  
  17.     </asp:Panel>  
  18. </asp:Content>  

后台代码

  1. using Microsoft.Web.Administration;  
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Configuration;  
  5. using System.IO;  
  6. using System.Linq;  
  7. using System.Web;  
  8. using System.Web.UI;  
  9. using System.Web.UI.WebControls;  
  10.   
  11. namespace IISManager.Ide.Net.Cn  
  12. {  
  13.     public partial class Manager : Page  
  14.     {  
  15.         string ip = string.Empty;  
  16.         protected void Page_Load(object sender, EventArgs e)  
  17.         {  
  18.             if (!ConfigurationManager.AppSettings.AllKeys.Contains("IP"))  
  19.             {  
  20.                 Response.Write("<script>alert('config文件配置不正确')</script>");  
  21.                 Response.Write(" <script> window.close(); </script> ");  
  22.                 return;  
  23.             }  
  24.             ip = ConfigurationManager.AppSettings["IP"];  
  25.             if (string.IsNullOrEmpty(ip))  
  26.             {  
  27.                 Response.Write("<script>alert('请配置IP地址')</script>");  
  28.                 Response.Write(" <script> window.close(); </script> ");  
  29.                 return;  
  30.             }  
  31.         }  
  32.   
  33.         protected void btnAdd_Click(object sender, EventArgs e)  
  34.         {  
  35.             try  
  36.             {  
  37.                 string siteName = txtSiteName.Text.Trim();  
  38.                 int port = Convert.ToInt32(txtPort.Text.Trim());  
  39.                 string path = txtPath.Text.Trim();  
  40.                 FileInfo fi = new FileInfo(path);  
  41.                 if ((fi.Attributes & FileAttributes.Directory) != 0)  
  42.                 {  
  43.                 }  
  44.                 else  
  45.                 {  
  46.                     Response.Write("<script>alert('文件路径无效')</script>");  
  47.                 }  
  48.   
  49.                 ServerManager sm = ServerManager.OpenRemote(this.txtIP.Text.Trim());  
  50.                 //创建应用程序池  
  51.                 //先检测是否存在,如果存在不进行操作  
  52.                 //如果创建的应用程序池已经存在,系统不会进行创建  
  53.                 ApplicationPool appPool = sm.ApplicationPools.FirstOrDefault(x => x.Name == siteName);  
  54.                 if (appPool != null)  
  55.                 {  
  56.                     sm.ApplicationPools.Remove(appPool);  
  57.                 }  
  58.                 appPool = sm.ApplicationPools.Add(siteName);  
  59.                 appPool.AutoStart = true;//是否自动启动,true代表创建完成后自动启动  
  60.                 appPool.Enable32BitAppOnWin64 = false;//启动32位支持  
  61.                 appPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;//托管管道模式Integrated = 0, Classic = 1  
  62.                 appPool.ManagedRuntimeVersion = "v4.0";//版本  
  63.                 appPool.QueueLength = 10000;//队列长度,如果操作限制将显示503  
  64.                 appPool.Recycling.PeriodicRestart.Time = new TimeSpan(0, 5, 0);//固定回收时间  
  65.                 appPool.ProcessModel.IdleTimeout = new TimeSpan(0, 5, 0);//5分钟闲置超时  
  66.                 appPool.ProcessModel.MaxProcesses = 1;//最大进程数  
  67.                 appPool.ProcessModel.PingingEnabled = true;//是否允许ping  
  68.                 appPool.ProcessModel.PingInterval = new TimeSpan(0, 0, 40);//ping间隔  
  69.                 appPool.ProcessModel.PingResponseTime = new TimeSpan(0, 0, 10);//ping最大相应时间 10秒  
  70.                 appPool.ProcessModel.ShutdownTimeLimit = new TimeSpan(0, 0, 50);//关闭时间限制  
  71.                 appPool.ProcessModel.StartupTimeLimit = new TimeSpan(0, 0, 50);//启动时间限制  
  72.                                                                                //创建站点  
  73.                 Site site = sm.Sites.FirstOrDefault(x => x.Name == siteName);  
  74.                 if (site != null)  
  75.                 {  
  76.                     sm.Sites.Remove(site);  
  77.                 }  
  78.                 site = sm.Sites.Add(siteName, path, port);  
  79.                 site.ServerAutoStart = true;//自动启动  
  80.                 Application root = site.Applications["/"];  
  81.                 root.ApplicationPoolName = appPool.Name;//设置应用程序池  
  82.                 site.Bindings[0].EndPoint.Port = port;//终点端口号  
  83.                 site.Limits.MaxBandwidth = 2000000;//最大带宽  
  84.                 site.Limits.MaxConnections = 1000;//最大连接数  
  85.                 site.LogFile.Directory = path + "\\log";//日志文件路径  
  86.                 site.LogFile.Enabled = true;//开启日志  
  87.                 site.LogFile.LogExtFileFlags = LogExtFileFlags.Date;//日志文件形式  
  88.                 site.LogFile.LogFormat = LogFormat.Custom;//日志格式  
  89.                 site.LogFile.Period = LoggingRolloverPeriod.Hourly;//日志文件记录时间间隔  
  90.                 site.LogFile.TruncateSize = 1048577;//日志文件截取大小  
  91.                 site.TraceFailedRequestsLogging.MaxLogFiles = 100;//失败请求最大跟踪日志数量  
  92.                 site.TraceFailedRequestsLogging.Directory = path + "\\tracelog";//失败请求日志路径  
  93.                 site.TraceFailedRequestsLogging.Enabled = true;//启用失败请求跟踪  
  94.                                                                //site.SetAttributeValue("preloadEnabled", true);//启用预加载  
  95.                 sm.CommitChanges();  
  96.                 Response.Write("<script>alert('创建成功')</script>");  
  97.             }  
  98.             catch (Exception ex)  
  99.             {  
  100.                 Response.Write("<script>alert('创建失败,请检查输入先是否正确')</script>");  
  101.             }  
  102.         }  
  103.     }  
  104. }  

配置文件

  1. <?xml version="1.0"?>  
  2. <!--  
  3.   有关如何配置 ASP.NET 应用程序的详细信息,请访问  
  4.   https://go.microsoft.com/fwlink/?LinkId=169433  
  5. -->  
  6. <configuration>  
  7.   <!--  
  8.     有关 web.config 更改的说明,请参见 http://go.microsoft.com/fwlink/?LinkId=235367。  
  9.   
  10.     可在 <httpRuntime> 标记上设置以下特性。  
  11.       <system.Web>  
  12.         <httpRuntime targetFramework="4.6.1" />  
  13.       </system.Web>  
  14.   -->  
  15.   <appSettings>  
  16.     <add key="SiteName" value="IIS管理系统"/>  
  17.     <add key="IP" value="58.87.77.174"/>  
  18.   </appSettings>  
  19.   <system.web>  
  20.     <identity impersonate="true" userName="administrator" password="123456"/>  
  21.     <compilation debug="true" targetFramework="4.6.1"/>  
  22.     <httpRuntime/>  
  23.     <pages controlRenderingCompatibilityVersion="4.0">  
  24.       <namespaces>  
  25.         <add namespace="System.Web.Optimization"/>  
  26.       </namespaces>  
  27.       <controls>  
  28.         <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt"/>  
  29.       </controls>  
  30.     </pages>  
  31.     <httpModules>  
  32.       <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>  
  33.     </httpModules>  
  34.   </system.web>  
  35.   <runtime>  
  36.     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
  37.       <dependentAssembly>  
  38.         <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed"/>  
  39.         <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>  
  40.       </dependentAssembly>  
  41.       <dependentAssembly>  
  42.         <assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35"/>  
  43.         <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234"/>  
  44.       </dependentAssembly>  
  45.     </assemblyBinding>  
  46.   </runtime>  
  47.   <system.webServer>  
  48.     <validation validateIntegratedModeConfiguration="false"/>  
  49.     <modules>  
  50.       <remove name="ApplicationInsightsWebTracking"/>  
  51.       <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler"/>  
  52.     </modules>  
  53.   </system.webServer>  
  54.   <system.codedom>  
  55.     <compilers>  
  56.       <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>  
  57.       <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>  
  58.     </compilers>  
  59.   </system.codedom>  
  60. </configuration>  
温馨提示

配置文件主要是identity节点,配置登陆用户

如果web.config没有配置或者配置错误,你会看到如下错误信息

本文地址:https://www.lisen.me/csharp-create-iis-website.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情