在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → C#批量部署站点(包含数据库部署以及iis建站/配置站点)源码下载

C#批量部署站点(包含数据库部署以及iis建站/配置站点)源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.12M
  • 下载次数:37
  • 浏览次数:604
  • 发布时间:2015-05-07
  • 实例类别:C#语言基础
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 数据库 C# iis 站点

实例介绍

【实例简介】数据库的部署 站点的建立以及配置
【实例截图】

【核心代码】


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   "/";
		}

	}
}


标签: 数据库 C# iis 站点

实例下载地址

C#批量部署站点(包含数据库部署以及iis建站/配置站点)源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警