实例介绍
【实例简介】数据库的部署 站点的建立以及配置
【实例截图】
【实例截图】
【核心代码】
using System.Collections.Generic; namespace Deploy { using System; using System.IO; using System.IO.Compression; using System.Configuration; using System.Xml; using System.Xml.Linq; using Microsoft.Web.Administration; using System.Linq; internal class DeployHelper { private ServerManager _manager; private ServerManager Manager { get { return _manager ?? (_manager = new ServerManager()); } } private readonly string _dbConnectionString; private readonly string _applicationPoolName; private readonly string _cacheStorage; private readonly string _dataSource; private readonly string _directory; private readonly string _networkDirectory; private readonly string _redisHost; private readonly string _siteName; private readonly string _redisConnectionString; private readonly string _redisDefaultDb; private readonly int _configurations; // private readonly Dictionary<string, object> _appSettings; private readonly LogHelper _logHelper; public DeployHelper(bool logEnabled = false) { _dbConnectionString = ConfigurationManager.AppSettings["DbConnectionString"]; _applicationPoolName = ConfigurationManager.AppSettings["ApplicationPoolName"]; _cacheStorage = ConfigurationManager.AppSettings["CacheStorage"]; _dataSource = ConfigurationManager.AppSettings["DataSource"]; _directory = ConfigurationManager.AppSettings["Directory"]; _networkDirectory = ConfigurationManager.AppSettings["NetworkDirectory"]; _redisHost = ConfigurationManager.AppSettings["RedisHost"]; _siteName = ConfigurationManager.AppSettings["SiteName"]; _redisConnectionString = ConfigurationManager.AppSettings["RedisConnectionString"]; _redisDefaultDb = ConfigurationManager.AppSettings["RedisDefaultDb"]; _configurations = 1; Int32.TryParse(ConfigurationManager.AppSettings["Configurations"], out _configurations); _logHelper = new LogHelper(logEnabled); } private void PrepareArchive(string sourceArchive, string siteName) { var extractPath = string.Concat(_directory, siteName); if (!Directory.Exists(extractPath)) { _logHelper.LogStart("PrepareArchive"); var sourceArchiveName = Path.GetFileName(sourceArchive); var cachePath = string.Concat(_cacheStorage, sourceArchiveName); if (!File.Exists(cachePath)) { File.Copy(sourceArchive, cachePath); } ZipFile.ExtractToDirectory(cachePath, extractPath); _logHelper.LogEnd(); } else { throw new IOException("Extract Directory Is Not Empty"); } } private void PrepareApplicationPool() { _logHelper.LogStart("PrepareApplicationPool"); var pool = Manager.ApplicationPools[_applicationPoolName]; if (pool == null) { throw new Exception("Application Pool Does Not Exist"); /*pool = Manager.ApplicationPools.Add(_applicationPoolName); pool.Recycle();*/ } _logHelper.LogEnd(); } private void PrepareSite(string siteName) { _logHelper.LogStart("PrepareSite"); var rootSite = Manager.Sites[_siteName]; if (rootSite == null) { throw new Exception("Root Site Does Not Exist"); } if (rootSite.Applications.Any(application => application.Path.Contains(siteName))) { throw new Exception("Application Already Exists"); } var physicalPath = string.Concat(_directory, siteName); var webAppLoader = rootSite.Applications.Add("/" siteName, physicalPath); webAppLoader.ApplicationPoolName = _applicationPoolName; for (int configuration = 0; configuration < _configurations; configuration ) { var webApp = rootSite.Applications.Add("/" siteName "/" configuration, physicalPath "\\Terrasoft.WebApp"); webApp.ApplicationPoolName = _applicationPoolName; } _logHelper.LogEnd(); } private void ConfigSite(string siteName) { _logHelper.LogStart("ConfigSite"); // ConfigWithLinq(siteName); ConfigWithXml(siteName); _logHelper.LogEnd(); } private void ConfigWithXml(string siteName) { var connectionStrings = new XmlDocument(); var filename = _directory siteName "\\ConnectionStrings.config"; connectionStrings.Load(filename); XmlNodeList nodes = connectionStrings.SelectNodes("/connectionStrings/add"); if (nodes == null) { return; } foreach (XmlNode node in nodes) { if (node.Attributes == null) { continue; } var nameAttribute = node.Attributes["name"]; if (nameAttribute != null && nameAttribute.Value == "db") { var connectionStringValue = string.Format(_dbConnectionString, _dataSource, siteName); node.Attributes["connectionString"].Value = connectionStringValue; } if (nameAttribute != null && nameAttribute.Value == "redis") { var connectionStringValue = string.Format(_redisConnectionString, _redisHost, _redisDefaultDb); node.Attributes["connectionString"].Value = connectionStringValue; } } connectionStrings.Save(filename); } private void ConfigWithLinq(string siteName) { var connectionStrings = XDocument.Load(_directory siteName "\\ConnectionStrings.config"); var query = from section in connectionStrings.Descendants("add") where section.Attribute("name").Value == "db" select section; } private void PrepareDb(string siteName) { _logHelper.LogStart("PrepareDb"); var initialCatalog = "master"; var path = string.Concat(_networkDirectory, siteName, "\\db"); var fileName = Directory.EnumerateFiles(path, "*.bak", SearchOption.TopDirectoryOnly).Select(Path.GetFileName).First(); var connectionStringValue = string.Format(_dbConnectionString, _dataSource, initialCatalog); DbHelper.RestoreDb(connectionStringValue, siteName, path, fileName); _logHelper.LogEnd(); } public string Deploy(string sourceArchive, string siteName) { PrepareArchive(sourceArchive, siteName); PrepareApplicationPool(); PrepareSite(siteName); ConfigSite(siteName); PrepareDb(siteName); Manager.CommitChanges(); return @"http://p-tarasov:84/" siteName "/"; } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论