我的目的是在Winform程序里面,可以直接啟動一個HTTP服務端,給下游客戶連接使用。
查找相關技術,有兩種方法:
1.使用C#動態添加網站應用到IIS中,借用IIS的管理能力來提供HTTP接口。本文即對此做說明
2.在Winform程序中實現Web服務器邏輯,自己監聽和管理客戶端請求;
利用IIS7自帶類庫管理IIS現在變的更強大更方便,而完全可以不需要用DirecotryEntry這個類了(樂博網中很多.net管理iis6.0的文章都用到了DirecotryEntry這個類 ),Microsoft.Web.Administration.dll位于IIS的目錄(%WinDir%//System32//InetSrv)下,使用時需要引用,它基本上可以管理IIS7的各項配置。
這個類庫的主體結構如下:
這里只舉幾個例子說明一下基本功能,更多功能請參考MSDN。
建立站點
string SiteName="樂博網"; //站點名稱string BindArgs="*:80:"; //綁定參數,注意格式string apl="http"; //類型string path="e://樂博網"; //網站路徑ServerManager sm = new ServerManager();sm.Sites.Add(SiteName,apl,BindArgs,path);sm.CommitChanges();
修改站點
Site site=sm.Sites["newsite"];site.Name=SiteName;site.Bindings[0].EndPoint.Port=9999;site.Applications[0].VirtualDirectories[0].PhysicalPath=path;sm.CommitChanges();
刪除站點
Site site=sm.Sites["樂博網"];sm.Sites.Remove(site);sm.CommitChanges();
站點操作
方法一:
#region CreateWebsite 添加網站 public string CreateWebSite(string serverID, string serverComment, string defaultVrootPath, string HostName, string IP, string Port) { try { ManagementObject oW3SVC = new ManagementObject (_scope, new ManagementPath(@"IIsWebService='W3SVC'"), null); if (IsWebSiteExists (serverID)) { return "Site Already Exists..."; } ManagementBaseObject inputParameters = oW3SVC.GetMethodParameters ("CreateNewSite"); ManagementBaseObject[] serverBinding = new ManagementBaseObject[1]; serverBinding[0] = CreateServerBinding(HostName, IP, Port); inputParameters["ServerComment"] = serverComment; inputParameters["ServerBindings"] = serverBinding; inputParameters["PathOfRootVirtualDir"] = defaultVrootPath; inputParameters["ServerId"] = serverID; ManagementBaseObject outParameter = null; outParameter = oW3SVC.InvokeMethod("CreateNewSite", inputParameters, null); // 啟動網站 string serverName = "W3SVC/" + serverID; ManagementObject webSite = new ManagementObject(_scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null); webSite.InvokeMethod("Start", null); return (string)outParameter.Properties["ReturnValue"].Value; } catch (Exception ex) { return ex.Message; } } public ManagementObject CreateServerBinding(string HostName, string IP, string Port) { try { ManagementClass classBinding = new ManagementClass(_scope, new ManagementPath("ServerBinding"), null); ManagementObject serverBinding = classBinding.CreateInstance(); serverBinding.Properties["Hostname"].Value = HostName; serverBinding.Properties["IP"].Value = IP; serverBinding.Properties["Port"].Value = Port; serverBinding.Put(); return serverBinding; } catch { return null; } } #endregion #region 添加網站事件 protected void AddWebsite_Click(object sender, EventArgs e) { IISManager iis = new IISManager(); iis.Connect(); string serverID = "5556"; string serverComment = "Create Website"; string defaultVrootPath = @"D:/web"; string HostName = "World"; string IP = ""; string Port = "9898"; ReturnMessage.Text = iis.CreateWebSite(serverID,serverComment,defaultVrootPath,HostName,IP,Port); } #endregion #region DeleteSite 刪除站點 public string DeleteSite(string serverID) { try { string serverName = "W3SVC/" + serverID; ManagementObject webSite = new ManagementObject(_scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null); webSite.InvokeMethod("Stop", null); webSite.Delete(); webSite = null; return "Delete the site succesfully!"; } catch (Exception deleteEx) { return deleteEx.Message; } } #endregion
新聞熱點
疑難解答
圖片精選