`
txf2004
  • 浏览: 6855186 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

.NET平台下WEB应用程序的部署的例子

阅读更多

NET平台下WEB应用程序的部署(安装数据库和自动配置)

在.net平台下,部署 Web 解决方案是比较方便的。我们可以利用Visual Studio.NET 2003添加一个WEB安装项目,在部署的“文件系统编辑器”中添加项目的主输出和内容文件,非常简易地完成安装程序的制作。

但是,这样制作的安装程序,只是将web页和asp.net程序编译的dll文件安装到目标机器的iis目录,对于一般的应用程序是可以的(比如用access数据库,可以一起打包到安装程序中);如果数据库是sql SERVER,需要在部署的时候一并安装数据库,安装程序的制作就会复杂一些,需要我们自定义安装程序类。在安装程序类中执行SQL脚本并将连接字符串写入Web.config。

l 安装数据库

微软msdn上介绍过在部署应用程序的时候建立数据库。如:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxwlkWalkthroughUsingCustomActionToCreateDatabaseDuringInstallation.asp

这种方法是创建一个安装程序类,在安装程序类中调用ado.net执行sql 语句(SQL语句放在一个文本文件中)来创建数据库。

但是,这种方法有一个问题,如果用sql Server2000生成了所有建表、视图、存储过程的一个脚本文件,用ADO.NET来执行这个脚本文件,就会因为脚本中有许多“GO”语句而出现错误。当然,我们可以把“GO”替换成换行符,利用ADO.NET一条条执行SQL 语句。很显然,这样的效率比较低。

最好的办法是调用osql执行脚本。(或者创建一个数据库项目的cmd文件,而cmd文件建立数据库的时候也是调用的osql)。

首先,我们新建一个asp.net Web应用程序http://localhost/VbNetTest,并打开VbNetTest 项目

创建部署项目
1. 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“Web 安装项目”。在“名称”框中键入 Test Installer。
3. 单击“确定”关闭对话框。
4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
5. 在“属性”窗口中,选择 ProductName 属性,并键入 GCRM。

将 VbNetTest项目的输出添加到部署项目中
1. 在“文件系统编辑器”中,选择“Web 应用程序”文件夹。在“操作”菜单上,指向“添加”,然后选择“项目输出”。
2. 在“添加项目输出组”对话框中,选择“项目”下拉列表中的“VbNetTest”。
3. 单击“确定”关闭对话框。
4. 从列表中选择“主输出”和“内容文件”组,然后单击“确定”。

创建安装程序类
1. 在“文件”菜单上指向“新建”,然后选择“项目”。
2. 在“新建项目”对话框中,选择“项目类型”窗格中的“Visual Basic 项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 DBCustomAction。
3. 单击“打开”关闭对话框。
4. 从“项目”菜单中选择“添加新项”。
5. 在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入 DBCustomAction。
6. 单击“确定”关闭对话框。

创建自定义安装对话框
1. 在解决方案资源管理器中选择“Test Installer”项目。在“视图”菜单上指向“编辑器”,然后选择“用户界面”。
2. 在用户界面编辑器中,选择“安装”下的“启动”节点。在“操作”菜单上,选择“添加对话框”。
3. 在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。
4. 在“添加对话框”对话框中,选择“文本框 (A)”对话框,然后单击“确定”关闭对话框。
5. 在“操作”菜单上,选择“上移”。重复此步骤,直到“文本框 (A)”对话框位于“安装文件夹”节点之上。
6. 在“属性”窗口中,选择 BannerText 属性并键入:安装数据库.。
7. 选择 BodyText 属性并键入:安装程序将在目标机器上安装数据库。
8. 选择 Edit1Label 属性并键入:数据库名称:。
9. 选择 Edit1Property 属性并键入 CUSTOMTEXTA1。
10. 选择 Edit1Value 属性并键入:GsCrm。
11. 选择 Edit2Label 属性并键入:服务器名:。
12. 选择 Edit2Property 属性并键入 CUSTOMTEXTA2。
13. 选择 Edit2Value 属性并键入:(local)。
14. 选择 Edit3Label 属性并键入:用户名:。
15. 选择 Edit3Value 属性并键入:sa。
16. 选择 Edit3Property 属性并键入 CUSTOMTEXTA3。
17. 选择 Edit4Label 属性并键入:密码:。
18. 选择 Edit4Property 属性并键入 CUSTOMTEXTA4。
19. 选择 Edit2Visible、Edit3Visible 和 Edit4Visible 属性,并将它们设置为 False。

创建自定义操作
1. 在解决方案资源管理器中选择“Test Installer”项目。在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。
2. 在自定义操作编辑器中选择“安装”节点。在“操作”菜单上,选择“添加自定义操作”。
3. 在“选择项目中的项”对话框中,双击“应用程序文件夹”。
4. 选择“主输出来自 DBCustomAction(活动)”项,然后单击“确定”关闭对话框。
5. 在“属性”窗口中,选择 CustomActionData 属性并键入 /dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"。

附/targetdir="[targetdir]\"是安装后的目标路径,为了在dbcustomaction类中获得安装后的路径,我们设置此参数。
另外,安装后的路径也可以通过Reflection得到:
Dim Asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly
MsgBox("Asm.Location")
添加文件
1. 将SQL Server生成的脚本文件DB.sql添加到“Test Installer”项目
2. 将安装文件LisenceFile.rtf添加到“Test Installer”项目
3. 在用户界面编辑器中,选择许可协议,设置LisenceFile属性为LisenceFile.rtf文件

将代码添加到安装程序类中,dbcustomaction.vb类
Imports System.ComponentModel

imports System.Configuration.Install

imports System.IO

imports System.Reflection

<runinstaller(true)> Public Class DBCustomAction

inherits System.Configuration.Install.Installer

#region "组件设计器生成的代码 "

public Sub New()

mybase.new()

'该调用是组件设计器所必需的

initializecomponent()

'在 InitializeComponent() 调用之后添加任何初始化

end Sub

' Installer 重写 dispose 以清理组件列表。

protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

if disposing Then

if Not (components Is Nothing) Then

components.dispose()

end If

end If

mybase.dispose(disposing)

end Sub

private components As System.ComponentModel.IContainer

<system.diagnostics.debuggerstepthrough()> Private Sub InitializeComponent()

end Sub

#end Region

'执行sql 语句

private Sub ExecuteSql(ByVal conn As String, ByVal DatabaseName As String, ByVal Sql As String)

dim mySqlConnection As New SqlClient.SqlConnection(conn)

dim Command As New SqlClient.SqlCommand(Sql, mySqlConnection)

command.connection.open()

command.connection.changedatabase(databasename)

try

command.executenonquery()

finally

'close Connection

command.connection.close()

end Try

end Sub

public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)

' ------------------------建立数据库-------------------------------------------------

try

dim connStr As String = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", Me.Context.Parameters.Item("server"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"))

'根据输入的数据库名称建立数据库

executesql(connstr, "master", "CREATE DATABASE " + Me.Context.Parameters.Item("dbname"))

'调用osql执行脚本

dim sqlProcess As New System.Diagnostics.Process

sqlprocess.startinfo.filename = "osql.exe "

sqlprocess.startinfo.arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"), Me.Context.Parameters.Item("dbname"), Me.Context.Parameters.Item("targetdir"))

sqlprocess.startinfo.windowstyle = ProcessWindowStyle.Hidden

sqlprocess.start()

sqlprocess.waitforexit() '等待执行

sqlprocess.close()

'删除脚本文件

dim sqlFileInfo As New System.IO.FileInfo(String.Format("{0}db.sql", Me.Context.Parameters.Item("targetdir")))

if sqlFileInfo.Exists Then

sqlfileinfo.delete()

end If

catch ex As Exception

throw ex

end Try

' ---------------------将连接字符串写入Web.config-----------------------------------

try

dim FileInfo As System.IO.FileInfo = New System.IO.FileInfo(Me.Context.Parameters.Item("targetdir") & "\web.config")

if Not FileInfo.Exists Then

throw New InstallException("没有找到配置文件")

end If

'实例化xml文档

dim XmlDocument As New System.Xml.XmlDocument

xmldocument.load(fileinfo.fullname)

'查找到appsettings中的节点

dim Node As System.Xml.XmlNode

dim FoundIt As Boolean = False

for Each Node In XmlDocument.Item("configuration").Item("appSettings")

if Node.Name = "add" Then

if Node.Attributes.GetNamedItem("key").Value = "connString" Then

'写入连接字符串

node.attributes.getnameditem("value").value = String.Format("Persist Security Info=False;Data Source={0};Initial Catalog={1};User ID={2};Password={3};Packet Size=4096;Pooling=true;Max Pool Size=100;Min Pool Size=1", _

me.context.parameters.item("server"), Me.Context.Parameters.Item("dbname"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"))

foundit = True

end If

end If

next Node

if Not FoundIt Then

throw New InstallException("web.Config 文件没有包含connString连接字符串设置")

end If

xmldocument.save(fileinfo.fullname)

catch ex As Exception

throw ex

end Try

end Sub

end Class

最后编译生成!

分享到:
评论

相关推荐

    ASP.NET WEB应用程序设计教程(单维锋编著) 图书例子代码-校园音乐吧项目(c#)

    内容包括Web应用程序概念、HTML、DHTML、 C#语言基础、ADO.NET、服务器端标准控件、数据验证控件、导航控件、内部对象、数据绑定控件、母版页、主题与皮肤、AJAX技术、应用程序配置以及软件测试和部署等内容。...

    .net许愿墙源代码(附AJAX的web抽奖程序的小例子)

    Asp.Net许愿墙系统源码 部署:需要以站点或虚拟目录方式建立站点,使用的是相对目录 ... 邀请流程为: ...Upsotname=6CE40EFC4D5ADB23360D0A9702020D29 ...另外在文件夹里还有一个基于AJAX的web抽奖程序的小例子 ajax.aspx

    asp.net知识库

    ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) 体验.net2.0的优雅(3) -- 为您的 SiteMap 添加 控制转发功能 GridView控件使用经验 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! ASP.NET2.0控件...

    Web端算法部署+流媒体服务器算法部署+Flask+AI健身+Python-web实时检测效果显示

    构建一个完整的应用程序,将实时视频流传输到 Web 浏览器。 实现的一个基于人体姿态识别的AI健身系统,可统计训练次数。 注: 1.中间数字为角度。采用的是12,14,16,可自由更改。 2.左上角为fps,左下角为次数统计...

    阿里巴巴API开发sdk .net平台

    调用阿里巴巴开放平台的API你是不是获取不到访问口令,看一下我的例子吧,原因是后台已经更改,而网站的说明没有更新。 IniFile ini = new IniFile(); Dictionary, string&gt; sl = new Dictionary, string&gt;(); sl ...

    ASP.NET常见问题集锦.zip

    提高ASP.Net应用程序性能的十大方法.doc 无废话XML.pdf 概念.txt 求最大最小值示例.txt 用ASP.NET创建自定义文本框.doc 电话卡销售电子商务平台系统.doc 笔记.txt 类结构分析.doc 索引器例子.txt 翻译C#....

    WebSocket服务器的.NET实现 SuperWebSocket的例子

    用户可通过SuperWebSocket来快速的构建可靠的,高性能的websocket服务器端应用程序。 和SuperSocket一样,SuperWebSocket可以控制台和windows服务的形式运行,同时它还支持直接运行在Website之内,这样更简化了...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    4.1 .net应用程序的组成元素 214 4.1.1 模块 214 4.1.2 程序集 215 4.1.3 类型 215 4.2 版本化与部署 216 4.2.1 对版本化更好的支持 216 4.2.2 major.minor.build.revision版本介绍 217 4.2.3 更好的...

    ASP.NET操作SQLite数据库的例子源码

    SQLite是一个轻量级的数据库,部署程序是像Access一样不用安装数据库系统。 本DEMO通过SQLiteHelper演示了Asp.net下对SQLite的增、删、改、查操作。 详尽注释一看就懂,0学习成本,甚至可以直接拿来用。 此外包含了...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP.NET初级程序员以及准备迁移到ASP.NET 2.0的编程老手。该书与《ASP.NET 2.0入门经典(第4版)》...

    ASP.NET2.0高级编程(第4版)1/6

    书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP.NET初级程序员以及准备迁移到ASP.NET 2.0的编程老手。该书与《ASP.NET 2.0入门经典(第4版)》...

    web程序—水晶报表在VS2010下源码实例

    安装水晶报表的部署网上有,版本是CRforVS_13_0.exe。 web程序的源码实例。很简单的小例子,入门使用。

    Spring.net框架

    在这个系列 中,我仅仅利用Sping.net这个框架向大家展示一下Ioc与AOP的强大功能(呵呵,其实写这段话的目的是因为“文章题目”牛皮吹得有点大了,给自 己个台阶下罢了)。 在这个系列中一共包含6个案例,从简单到...

    net学习笔记及其他代码应用

    30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System....

    Web Services 教程

    Web services 把 Web 应用程序提升到了另外一个层面 7 Web services 有两种类型的应用 7 Web Services 平台元素 8 什么是 SOAP? 8 什么是 WSDL? 8 什么是UDDI? 8 Web Service 实例 9 一个实例:ASP.NET Web ...

    C#创建、部署、调用WebService图文实例详解

    软件开发网在以前介绍过关于C#创建、部署、调用WebService的教程,有兴趣的可以参阅:.NET C#创建WebService服务简单实例。本文是通过实例让大家更加详细的了解流程,一起来学习下。 webservice 可以用于分布式应用...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    如果扎实地掌握了asp.net控件的运行机制,开发一个页面级的asp.net应用程序会变得非常简单。本书宗旨就是让开发人员真正理解asp.net技术,帮助开发人员提高asp.net开发的技术水平。学完本书后您不仅能够掌握控件开发...

    web-contact-converter:基于网络的KidslinkedConverter应用程序版本,用于将联系人信息转换为电子表格

    创建于2021年2月一家本地公司经常执行手动将销售线索/联系信息从文本文档传输到电子表格的任务,这一次要花费数小时。 此应用程序可自动执行该过程。 它要求数据输入的格式...该应用程序当前部署在web-contact-convert

    material-web:向参与者传授网站和应用程序基础知识的材料和练习

    材料网向参与者传授网页和应用程序基础知识的材料和练习。安装##要求安装atom.io 将 Atom 包从 atom /*.zip 安装(解压和复制)到 /.atom/packages 目录参与者的本地副本 / ## 网站部署参与者中的平台脚本 / Linux...

    最简单,最适合入门学习的三层架构例子

    本人作为一个程序的爱好者,深感到程序学习是:入门容易,进阶难!(开始说正题 )有很多入门学者在为三层架构感到困惑,不知三层架构如何实现,现在本人详细地详一个简单的例子来说明三层架构的实现,至于三层架构...

Global site tag (gtag.js) - Google Analytics