溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何使用WebService更新客戶端軟件

發(fā)布時間:2021-12-01 14:15:09 來源:億速云 閱讀:188 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關C#如何使用WebService更新客戶端軟件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

思路:

先實現(xiàn) WEB端的開發(fā),主要考慮使用C# WebService技術,提供遠程服務的調用函數(shù),返回一個文件的字節(jié)內容,然后寫一個升級程序客戶端,分發(fā)給客戶使用的機器中,(可以隨客戶的軟件一起安裝).該客戶端程序主要連接webserivce,然后將文件保存到本地機(客戶的機器)中.就可以實現(xiàn)!

實現(xiàn)的細節(jié):

要考慮提供給客戶軟件版本問題,低版本的升級,***版本的就不用升級.還要考慮用戶名與密碼在WEB端的認證!

使用技術:

ASP.Net WebService開發(fā),客戶端的異步調用WebService方法.數(shù)據(jù)庫技術!

開始實現(xiàn):

1.建立數(shù)據(jù)庫,使用SQLSERVER2000  1)軟件項目表:softlist(softid, softname,   resume, loginname, loginpwd)  softid:編號  softname:軟件名稱  resume:介紹  loginname:客戶登錄名  loginpwd:密碼    2)各個軟件的版本表 SoftListVersion(softid, subid,   version, UpdatePath, olefile)  softid:主表的軟件編號  subid:各版本數(shù)據(jù)編號  version:軟件版本  filename:升級文件名  olefile:升級文件的二進制內容,是image類型,  (我主要存放MSI的安裝包文件類型,可以使用C#做此類安裝包文件)   3)建立一個視圖,chkVersion,用于檢查版本號  SELECT dbo.SoftListVersion.subid, dbo.softlist.  softname, dbo.SoftListVersion.version  FROM dbo.softlist INNER JOIN dbo.SoftListVersion ON dbo.softlist.softid =   dbo.SoftListVersion.softid   4)再建立一個視圖,vOleFile,用于下載文件  SELECT dbo.SoftListVersion.subid, dbo.softlist.  softname, dbo.SoftListVersion.filename,  dbo.SoftListVersion.olefile, dbo.SoftListVersion.version  FROM dbo.softlist INNER JOIN dbo.SoftListVersion ON dbo.softlist.softid =   dbo.SoftListVersion.softid   2.寫一個WEBSERVICE  1)啟動VS.Net2003,建立一個叫babyWebSvc的項目,  項目類型為(ASP.Net WEB服務)  2)添加一個SoftUpdate.asmx的WEB服務   3)添加一個方法SearchVersion   [WebMethod(Description=”  返回當前軟件升級包的***版本”)]  public string SearchVersion(string softname)  {  string sVersion = ””;  webmod.dbConnStart(); //  (連接)作者自己的連接數(shù)據(jù)庫類,用戶自己完成數(shù)據(jù)庫連接  string strSQL = ”select MAX(version) as   MaxVerID from chkVersion where softname = @softname”;  SqlCommand sqlCmd = new SqlCommand(strSQL,webmod.sqlConn);  sqlCmd.CommandTimeout = 0;  sqlCmd.Parameters.Add(”@softname”,SqlDbType.VarChar).  Value = softname;  SqlDataReader sqlRd = sqlCmd.ExecuteReader();  if(sqlRd.HasRows)  {  sqlRd.Read();  sVersion = Convert.ToString(sqlRd[”MaxVerID”]);  }  sqlRd.Close();   webmod.dbConnEnd(); //(斷開連接)作者自己的連接數(shù)據(jù)庫類,  用戶自己完成數(shù)據(jù)庫連接   return sVersion;  }   4)添加下載文件內容的方法DownloadSoft   [WebMethod(Description=”返回需要下載的文件字節(jié)”)]  public byte[] DownloadSoft(string UserName,string PassWord,  string SoftDnldName,string SoftHeightVersion)  {  //(連接)作者自己的連接數(shù)據(jù)庫類,用戶自己完成數(shù)據(jù)庫連接  webmod.dbConnStart();   //檢查用戶合法性  bool bMember = CheckAuth(UserName,PassWord);  //該WebService內的一個檢查用戶合法性的函數(shù),用戶可以自己完成  if(!bMember)  {  webmod.dbConnEnd();  return null;  }  byte[] b = null;   //我們取出指定軟件名稱的***版本的升級包  string strSQL = ”select olefile from vOleFile where   (filename=@softname) and version=@ver”;  SqlCommand sqlCmd = new SqlCommand(strSQL,webmod.sqlConn);  sqlCmd.CommandTimeout = 0;  sqlCmd.Parameters.Add(”@softname”,SqlDbType.VarChar).  Value = SoftDnldName;  sqlCmd.Parameters.Add(”@ver”, SqlDbType.VarChar).  Value = SoftHeightVersion;  SqlDataReader sqlRd = sqlCmd.ExecuteReader();  if(sqlRd.HasRows)  {  sqlRd.Read();  b = (byte[])sqlRd[”olefile”];//文件的字節(jié)內容  }  sqlRd.Close();   //(斷開連接)作者自己的連接數(shù)據(jù)庫類,用戶自己完成數(shù)據(jù)庫連接  webmod.dbConnEnd();  return b;  }

3.WEB服務的方法完成后,你自己可以啟動,測試,我們現(xiàn)在來寫客戶端的升級程序,假定你在開發(fā)時的WEBSERVICE的URL為:http://localhost/babywebsvc/SoftUpdate.asmx,注意這個URL,我們是要在客戶端引用的

4.啟動VS.Net2003,建立一個C#的Windows項目,在默認的FORM上添加一個按鈕,

5.添加一個新的文件類型(應用程序配置文件)App.config

App.Config文件的內容

〈?xml version=”1.0” encoding=”utf-8”?〉  〈configuration〉  〈appSettings〉  〈add key=”user” value=”test”/〉  〈add key=”pwd” value=”test”/〉  〈add key=”babyRecordSoftName” value=”  TEST.EXE”/〉〈!--記錄在遠程的數(shù)據(jù)庫中的軟件名稱--〉  〈add key=”Version” value=”1.0”/〉  〈/appSettings〉  〈/configuration〉

6.我們在Form啟動的LOAD事件中,添加如下代碼

private void Form1_Load(object sender,   System.EventArgs e)  {  //讀出版本號,該版本號是在AssemblyInfo.cs  中由系統(tǒng)本身設置的,[assembly: AssemblyVersion(”1.0”)]  //以后要更改,可以改此處的AssemblyInfo.cs中的版本號,  例:[assembly: AssemblyVersion(”1.1”)]  //我們的WEBSERVICE中需要這個數(shù)據(jù)做為參數(shù)  string sVersion = Application.ProductVersion;   //寫到App.Cofing文件中,每次調用WEBSERVICE方法時,  從App.Cofing中讀取版本,你也可以直接使用Application.  ProductVersion,我是為了統(tǒng)一管理,全部從config中讀取  this.SaveAppConfig(”Version”,sVersion);  }   //SaveAppConfig函數(shù)的內容  public static void SaveAppConfig  (string AppKey,string AppValue)  {  XmlDocument xDoc = new XmlDocument();  xDoc.Load(Application.ExecutablePath + ”.config”);   XmlNode xNode;  XmlElement xElem1;  XmlElement xElem2;   xNode = xDoc.SelectSingleNode(”//appSettings”);   xElem1 = (XmlElement)xNode.SelectSingleNode(  ”//add[@key=” + AppKey + ”]”);  if ( xElem1 != null ) xElem1.SetAttribute(”  value”,AppValue);  else {  xElem2 = xDoc.CreateElement(”add”);  xElem2.SetAttribute(”key”,AppKey);  xElem2.SetAttribute(”value”,AppValue);  xNode.AppendChild(xElem2);  }  xDoc.Save(Application.ExecutablePath + ”.config”);  }

7.主要部分,開始調用webservice的方法!

準備工作:1)添加一個WEB引用,(先點菜單”項目”-”添加WEB引用”),

在彈出中輸入url的路徑:http://localhost/babywebsvc/SoftUpdate.asmx

2)假定你在開發(fā)時的WEBSERVICE的URL:http://localhost/babywebsvc/SoftUpdate.asmx

3)填入WEB引用名:AutoUpdateWebSvc

4)點下按紐完成WEB引用的添加

8.在你的Button1_click事件中添加如下CODE,主要使用異步調用

private string svcUser = ””;  private string svcPwd = ””;  private string svcSoftName = ””;  private string svcCurrVersion = ””;  private string svcDnldFileName = ”Test.MSI”;  //下載下來的文件名,  private byte[] fbyte = null;   //下載后的升級文件的內容  private void Button1_Click(object sender,   System.EventArgs e)  {  //讀取App.config文件中的配置信息  svcUser = System.Configuration.  ConfigurationSettings.AppSettings[”user”];   //需要人證的用戶名  svcPwd = System.Configuration.  ConfigurationSettings.AppSettings[”pwd”];   //認證密碼  svcSoftName = System.Configuration.  ConfigurationSettings.AppSettings  [”babyRecordSoftName”];//軟件名稱  svcCurrVersion = System.Configuration.  ConfigurationSettings.AppSettings[”Version”];  //當前版本號   try  {  AutoUpdateWebSvc.SoftUpdate aSvc =   new AutoUpdateWebSvc.SoftUpdate();   //此處可以改成自己實際應用時的URL,  不管WEB引用是動態(tài)還是靜態(tài),調用都會指向該URL  aSvc.Url = ”  http://localhost/babyWebSvc/SoftUpdate.asmx”;   if(Button1.Text.Trim() == ”檢 查”)  {  //檢查***版本  System.AsyncCallback cb = new AsyncCallback  (SearchVersionCallBack);//異步回調方法,  并檢查是否有高版本的升級軟件存在  aSvc.BeginSearchVersion(svcSoftName,cb,aSvc);  }  else if(Button1.Text.Trim() == ”升 級”)  {  //開始調用下載服務  InvokeDownload(); //函數(shù)體見下面的CODE  }   }  catch(Exception ex)  {  MessageBox.Show(ex.Message);  }  }    //檢查***版本的異步回調方法  private void SearchVersionCallBack(System.  IAsyncResult ar)  {  if(ar==null)return;  if(ar.IsCompleted)  {  try  {  AutoUpdateWebSvc.SoftUpdate aSvc =   (AutoUpdateWebSvc.SoftUpdate)ar.AsyncState;  string sVersion = aSvc.EndSearchVersion(ar);  aSvc.Dispose();    if(svcCurrVersion.Trim() == sVersion.Trim())  MessageBox.Show”你的軟件當前版本已經(jīng)是***的了,  無需進行升級...”);  else if((string.Compare(svcCurrVersion.Trim(),  sVersion.Trim()))==-1)  {   MessageBox.Show(”你的軟件當前版本比較低,  可以進行升級...”);  Button1.Text = ”升 級”;  }   }  catch(Exception ex)  {  MessageBox.Show(ex.Message);  }  }  }   //調用遠程的WEB服務,開始下載  private void InvokeDownload()  {  try  {  AutoUpdateWebSvc.SoftUpdate aSvc =   new AutoUpdateWebSvc.SoftUpdate();  //此處可以改成自己實際應用時的URL,  不管WEB引用是動態(tài)還是靜態(tài),調用都會指向該URL  aSvc.Url = ”  http://localhost/babyWebSvc/SoftUpdate.asmx”;   //開始下載  System.AsyncCallback cb =   new AsyncCallback(DownloadSoftCallBack);  //異步回調方法,保存文件  aSvc.BeginDownloadSoft(svcUser,svcPwd,  svcDnldFileName,lblVersion.Text.Trim(),cb,aSvc);   }  catch(Exception ex)  {  MessageBox.Show(ex.Message);  }  }   //下載方法執(zhí)行完成后,異步回調方法  private void DownloadSoftCallBack(System.  IAsyncResult ar)  {  if(ar==null)  {  MessageBox.Show(”升級過程中出現(xiàn)錯誤,  不能進行升級,請稍后再試...”);  return;  }  if(ar.IsCompleted)  {  try  {  AutoUpdateWebSvc.SoftUpdate aSvc =   (AutoUpdateWebSvc.SoftUpdate)ar.AsyncState;  fbyte = aSvc.EndDownloadSoft(ar);  aSvc.Dispose();   //使用線程,保存文件  Thread th = new Thread(new ThreadStart(Save2Disk));  th.Start();   }  catch(Exception ex)  {  MessageBox.Show(”升級過程中出現(xiàn)錯誤,”+ex.Message);  }  }  }    //將下載下來的字節(jié)數(shù)組保存成文件  private void Save2Disk()  {  try  {  FileInfo finfo = new FileInfo  (Application.ExecutablePath+svcDnldFileName);  if(finfo.Exists)finfo.Delete();//文件存在就刪除它  Stream stream = finfo.OpenWrite();   prosBar.Maximum = fbyte.Length;//prosBar是一個進度條  prosBar.Minimum = 0;  prosBar.Step = 1;  int i=0;  foreach(byte b in fbyte)  {  stream.WriteByte(b);  prosBar.Value += 1;  }  stream.Flush();  stream.Close();   DialogResult dr = MessageBox.Show  (”下載完成,是否現(xiàn)在就安裝升級程序...”,”  提示信息”,MessageBoxButtons.OKCancel,  MessageBoxIcon.Information,MessageBoxDefaultButton.  Button1);  if(dr == DialogResult.OK)  {  ExecSetup();//啟動下載下來的安裝程序,用戶可以自己完成  }  }  catch(Exception ex)  {  MessageBox.Show(”升級過程中出現(xiàn)錯誤,”+ex.Message);  }  uiButton2.Enabled = true;  }

9:總結,客戶端調用,是從,點擊Buttton1開始,搜索版本號,SearchVersion,當找到高版本升級包時,開始執(zhí)行下載的方法DownloadSoft,然后保存到本地Save2Disk.不管客戶端的調用是同步還是異步,WEBService的方法都是一樣寫的,只不過同步調用,是直接使用WEBService中的方法名稱,異步調用則會由系統(tǒng)自動生成BeginXXX()與EndXXX()的方法名稱,提供給你使用。

關于“C#如何使用WebService更新客戶端軟件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI