基本信息
源码名称:C#批量部署站点(包含数据库部署以及iis建站/配置站点)源码下载
源码大小:0.12M
文件格式:.zip
开发语言:C#
更新时间:2015-05-07
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
数据库的部署 站点的建立以及配置
数据库的部署 站点的建立以及配置
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 "/"; } } }