一、结合目的
通过Click Once发布的软件,已经具备了自动安装及自动更新的功能。但如果软件是CS结构并使用了Oracle数据库,则客户端必须安装Oracle的部分组件,或者还有可能需要进行配置。为了解决这一问题,我进行了Web Service与Click Once结合的试验,效果良好。
二、Click Once概述
Click Once是Visual Studio 2005中,用于部署/更新Windows程序的一项新技术。
在VS2005中,可以把写好的程序发布到FTP,文件共享或者网页上。用户点击一下,就可以直接安装程序并运行。以后若对程序作了改动,可以发布新版本。客户端会自动检查程序的更新并获取最新版本。
与传统的安装模式相比: 1)clickonce的安装路径名是一个类似guid的文件夹,以此来区别每次更新。安装文件被拷贝到了每个用户的配置文件中,即 C:/Documents and Settings/<UserName>/Local Settings/Apps/2.0目录下。 2)对同一台机器上的每个用户,都需要安装一次。安装时不需要管理员的权限,普通用户即可。
这项技术也有一些限制,例如: 1)只能更新Windows程序,对于服务就不能更新了 2)只能更新托管代码编写的程序
三、Web Service概述
Web Service是一个应用组件,它逻辑性地为其他应用程序提供数据与服务。各应用程序通过网络协议和规定的一些标准数据格式(HTTP、XML、SOAP)来访问Web Service,通过Web Service内部执行得到所需结果。 Web Service可以在任何支持网络通信的操作系统中实施运行。它可以接受和生成Message(消息),Message的形式严格定义了Web Service接口。只要用户能生成和使用Web Service接口所规定的Message,就可以用任何语言,在任何平台上调用Web service。 Web Service是一种URL地址资源,通过URL可程序化地把信息返回给需要获取这种资源的客户端。Web Service的一个重要特点是客户端不需要知道服务端是怎样运行的。
四、创建Web Service
启动VS2005,打开[File]->[New]->[Web Site],新建ASP.NET Web Service,如图: 按下OK后,VS2005会自动创建项目,并在IIS中自动建立虚拟目录TestWebSite。在Solution Explorer中找到Service.asmx,点击右键,选择[View Code],在代码的开始处添加引用: using System.Data.SqlClient; using System.Data.OleDb; using System.Data;
在类中添加成员函数SQLDB(string Query)、OracleDB(string Query)和AccessDB(string Query),用于连接MS SQL SERVER、ORACLE和Access。
[WebMethod]
public DataSet SQLDB(string Query)
{
try
{
SqlConnection CS = new SqlConnection("Data Source=192.168.2.250;database=Repertory;User ID =sa;Password=tenghe");
SqlDataAdapter myCommand = new SqlDataAdapter(Query, CS);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "Results");
return myDataSet;
}
catch (Exception ex)
{
return DataError(ex);
}
}
[WebMethod]
public DataSet OracleDB(string Query)
{
try
{
OleDbConnection OleDbConnection1 = new OleDbConnection("Provider=OraOLEDB.Oracle;Data Source=fthERP;Persist Security Info=True;User ID=system;Password=mbpdkjx;Unicode=True");
OleDbDataAdapter daAttendees = new OleDbDataAdapter(Query, OleDbConnection1);
DataSet ds = new DataSet();
daAttendees.Fill(ds, "Attendees");
return ds;
}
catch (Exception ex)
{
return DataError(ex);
}
}
[WebMethod]
public DataSet AccessDB(string Query)
{
try
{
string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ this.Server.MapPath("AccessWebServices.mdb");
OleDbConnection myAccessConn = new OleDbConnection(strAccessConn);
OleDbCommand myAccessCommand = new OleDbCommand(Query, myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
myAccessConn.Open();
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet, "Results");
myAccessConn.Close();
return myDataSet;
}
catch (Exception ex)
{
return DataError(ex);
}
} 最后写上处理错误的方法: public DataSet DataError(Exception ex){ DataSet errDS = new DataSet("Errors"); DataTable errTable = errDS.Tables.Add("Error"); errTable.Columns.Add("Message"); errTable.Rows.Add(new Object[] { ex.Message }); return errDS; }
注意,如果是ACCESS数据库,需要将AccessWebServices.mdb放在TestWebSite目录下。接着,编译项目,成功后按[Ctrl+F5]查看Web Service是否正常工作,如下图所示:
页面中列举了我们写的成员函数,单击其中一个进行测试,如下图所示:
输入查询条件,点击[Invoke],若出现如下数据,则表示连接成功。
连接失败,则出现Errors信息,如下图所示意:
五、调用Web Service
新建一个Windows Application项目,命名为TestApplication,在项目上点击右键,选择[Add Web Reference]来添加Web Service的引用:
在[URL]中输入Web Service所在的路径,若地址正确将可以看到一个服务被找到。在[Web Reference Name]中将“localhost”改为“dbWebService”,点击[Add Reference]完成引用。
接下来我们在Form1中添加dataGridView1及button1,双击button1,在事件中添加代码: TestApplication.dbWebService.Service Database = new TestApplication.dbWebService.Service(); DataSet ds = Database.OracleDB("select * from ftdept"); dataGridView1.DataSource = ds.Tables[0];
编译运行该项目,得到如下结果:
六、IIS的配置
首先建立FTP站点。(这里只简略地讲重要步骤)打开Internet信息服务器,在[默认FTP站点]上点击右键,选择[属性]。弹出对话框中我们将主目录中的[读取]、[写入]、[记录访问]全部打上勾,如图所示意:
然后在[默认网站]上点击右键,选择[新建]->[虚拟目录]。虚拟目录配置如下图所示:
注意:本地路径必须是程序发布的地址,另外还需在[文档]中要添加程序的发布页面。
七、用Click Once发布
在TestApplication项目上点击右键,选择[Porperties] ->[Publish],如下图所示:
在[Publish Location]处填写用于存放发布程序的FTP地址(如图),或文件路径如//192.168.12.30/AQMWarehouseUpdate/ ;
在[Installation URL]处填写用于安装程序的HTTP地址(如图),或文件路径如//192.168.12.30/AQMWarehouseUpdate/;
在[Application File]中选择需要发布的资源(图片、网页、dll、dsn等),当然这些资源需要先加入到项目中才能显示在该列表中。如图:
在[Prerequisites]中选择需要一起发布的插件(程序运行时所需的,将会和程序一步安装到位),如图:
[Updates]和[Options]选项卡的内容可酌情填写。
填写上版本号,点击[Publish Now]按纽。倏而会弹出连接对话框,可根据FTP的权限设置,选择匿名连接,或输入用户名、密码。连上FTP后不久便发布成功了。如下图:
单击[Install]便可体验到Click Once的效果了。