国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C#實現Windows后臺服務實例淺析

開發 后端
C#實現Windows后臺服務實例向你詳細介紹了一個C#實現Windows后臺服務的準備和實施的全過程,希望對你學習C#實現Windows后臺服務有所幫助。

C#實現Windows后臺服務實例之前要明白的一些概念:所謂Windows后臺服務,即后臺自動運行的程序,一般隨操作系統啟動而啟動,在我的電腦 服務后應用程序 服務里面能看到當前電腦的服務.一般而言,程序上用VC、C++寫Windows服務,但是我對這些語言不是很熟,一般編程用C#較多,所以就用C#語言寫了一個Windows服務.

C#實現Windows后臺服務實例其實需求是這樣的,做那個報價系統的時候加入了發短信的功能,訂單處理完即將發貨的時候要發送短信都客戶手機上,公司內部員工處理訂單超時要自動發短信,群發產品促銷信息到客戶手機上等,還有定時發送短信的需求,所以***面決定把發短信的模塊獨立出來,以后還有什么功能方便一起調用,而最終選擇了采用Windows后臺服務.

C#實現Windows后臺服務實例其實Windows服務并不好做到通用,它并不能在用戶的界面顯示一些什么信息等,它只是在后臺默默的處理一些事情,起著輔助的作用.那如何實現發送段信通用調用的接口呢?它們之間的信息又是如何來交互呢?數據庫!對,就是它存儲數據信息的.而數據庫都能很方便的訪問操作.把發送短信的后臺服務定時去訪問一個數據庫,而另外任何要發送短信的地方也訪問數據庫,并插入一條要發送的短信到表里面,稍后Windows后臺服務訪問該表將此短信發送出去.這可能是一個比較蠢的方法,但實現起來較簡單.

C#實現Windows后臺服務實例首先,由于它是要安裝的,所以它運行的時候就需要一個安裝類Installer將服務安裝到計算機,新建一個后臺服務安裝類繼承自Installer,安裝初始化的時候是以容器進行安裝的,所以還要建立ServiceProcessInstaller和ServiceInstaller服務信息組件添加到容器安裝,在Installer類增加如下代碼:

  1. private System.ComponentModel.IContainer components = null;  
  2. private System.ServiceProcess.ServiceProcessInstaller spInstaller;  
  3. private System.ServiceProcess.ServiceInstaller sInstaller;  
  4. private void InitializeComponent()  
  5. {  
  6. components = new System.ComponentModel.Container();  
  7.  
  8. // 創建ServiceProcessInstaller對象和ServiceInstaller對象  
  9. this.spInstaller = new System.ServiceProcess.
  10. ServiceProcessInstaller();  
  11. this.sInstaller = new System.ServiceProcess.ServiceInstaller();  
  12.  
  13. // 設定ServiceProcessInstaller對象的帳號、用戶名和密碼等信息  
  14. this.spInstaller.Account = System.ServiceProcess.
  15. ServiceAccount.LocalSystem;  
  16. this.spInstaller.Username = null;  
  17. this.spInstaller.Password = null;  
  18.  
  19. // 設定服務名稱  
  20. this.sInstaller.ServiceName = "SendMessage";  
  21. sInstaller.DisplayName = "發送短信服務";  
  22. sInstaller.Description = "一個定時發送短信的服務";  
  23.  
  24. // 設定服務的啟動方式  
  25. this.sInstaller.StartType = System.ServiceProcess.
  26. ServiceStartMode.Automatic;  
  27.  
  28. this.Installers.AddRange(new System.Configuration.
  29. Install.Installer[] { this.spInstaller, this.sInstaller });  

C#實現Windows后臺服務實例再添加一個服務類繼承自ServiceBase,我們可以重寫基類的OnStart、OnPause、OnStop、OnContinue等方法來實現我們需要的功能并設置指定一些屬性.由于是定事發送短信的服務,自然少不了Windows記時器,在OnStart事件里我們寫入服務日志,并初始化記時器.

  1. private System.Timers.Timer time;  
  2. private static readonly string CurrentPath = 
  3. Application.StartupPath + "\\";  
  4. protected override void OnStart(string[] args)  
  5. {  
  6. string path = CurrentPath + "Log\\start-stop.log";  
  7. FileStream fs = new FileStream(path, FileMode.
  8. Append, FileAccess.Write);  
  9. StreamWriter sw = new StreamWriter(fs);  
  10. sw.WriteLine("The Service is Starting On " + 
  11. DateTime.Now.ToString());  
  12. sw.Flush();  
  13. sw.Close();  
  14. fs.Close();  
  15.  
  16. time = new System.Timers.Timer(1000 * Convert.
  17. ToInt32(GetSettings("TimeSpan")));  
  18. time.Enabled = true;  
  19. time.Elapsed += this.TimeOut;  
  20. time.Start();  

C#實現Windows后臺服務實例實例化記時器類啟動后,將在指定時間間隔觸發Elapsed指定事件,如上GetSettings為讀取我App.config文件里一個配置節點(值為30)的方法,所以上面將會每隔30秒調用TimeOut方法.而改方法就是我們發短信的具體操作.代碼如下:

  1. private void TimeOut(object sender, EventArgs e)  
  2. {  
  3. try 
  4. {  
  5. if (GetSettings("Enabled").ToLower() == "true")  
  6. {  
  7. SqlConnection con = new SqlConnection(GetSettings("ConnString"));  
  8. SqlCommand cmd = new SqlCommand("select [sysid],
  9. [admin_inner_code],[user_inner_code],[phone],
  10. [message],[sendtime] from [tbl_note_outbox]", con);  
  11. con.Open();  
  12. SqlDataReader rdr = cmd.ExecuteReader();  
  13. while (rdr.Read())  
  14. {  
  15. string phone = rdr["phone"].ToString();  
  16. string message = rdr["message"].ToString();  
  17. string sendtime = rdr["sendtime"].ToString();  
  18. System.Text.Encoding encoder = System.Text.Encoding.GetEncoding("GB2312");  
  19. string url = string.Format("http://211.155.23.205/
  20. isapi.dll?SendSms&AgentID={0}&PassWord={1}&phone={2}&msg={3}&sendtime={4}"
  21. GetSettings("AgentID"), GetSettings("PassWord"), 
  22. phone,System.Web.HttpUtility.UrlEncode( message,encoder), sendtime);  
  23. System.Net.WebClient wClient = new System.Net.WebClient();  
  24. string msg = System.Text.Encoding.Default.GetString(wClient.DownloadData(url));  
  25. wClient.Dispose();  
  26.  
  27. //刪除已經發送成功的,并保存發送記錄  
  28. if (msg == "發送成功")  
  29. {  
  30. DateTime dtsend = sendtime == "0" ? DateTime.Now : 
  31. DateTime.ParseExact(sendtime, "yyyyMMddHHmmss"null);  
  32. string sql = string.Format("delete from 
  33. [tbl_note_outbox] where [sysid]={0} INSERT INTO [tbl_note_log] 
  34. ([admin_inner_code],[user_inner_code],[status],[phone],
  35. [message],[sendtime]) VALUES('{1}','{2}','{3}','{4}','{5}','{6}')",
  36.  rdr["sysid"], rdr["admin_inner_code"], rdr["user_inner_code"],
  37.  msg, phone, message, dtsend);  
  38. SqlConnection conn = new SqlConnection(GetSettings("ConnString"));  
  39. SqlCommand delete = new SqlCommand(sql, conn);  
  40. conn.Open();  
  41. delete.ExecuteNonQuery();  
  42. conn.Close();  
  43. delete.Dispose();  
  44. }  
  45.  
  46. }  
  47. rdr.Close();  
  48. con.Close();  
  49. cmd.Dispose();  
  50. }  
  51. }  
  52. catch (Exception ex)  
  53. {  
  54. string errorPath = CurrentPath + "Log\\error.log";  
  55. if (!File.Exists(errorPath))  
  56. {  
  57. FileStream create = File.Create(errorPath);  
  58. create.Close();  
  59. }  
  60. FileStream fs = new FileStream(errorPath, 
  61. FileMode.Append, FileAccess.Write);  
  62. StreamWriter sw = new StreamWriter(fs);  
  63. sw.WriteLine("Exception: " +ex.Message+" --"+
  64.  DateTime.Now.ToString());  
  65. sw.Flush();  
  66. sw.Close();  
  67. fs.Close();  
  68. }  
  69.  

C#實現Windows后臺服務實例上面我們使用try、catch訪問數據庫,并記錄錯誤異常信息. 發送短信是使用發送一個Web請求發送出去的,要注意請求url字符串的編碼類型,要與請求頁面編碼一致,不然會出現亂碼.上面我們請求的是智網通集團短信(網址:http://www.09168.net/)的Web接口,通過訪問他的網站來實現發短信,當然還要傳遞一些用戶名、密碼、手機號碼和要發送的短信息等參數.他的收費平均大概為7分/條的樣子,其實我原本不想用發送Web請求的這樣方式來發送短信的,它本身提供了調用它發送短信的DLL,而且還有vc、delphi調用的Demo,但是沒有用C#調用的例子,我剛開始試著用非托管動態鏈接庫他提供的DLL,不知方法調用那里出錯了一直都沒能成功發送出短信,所以后來就用了他的Web方式接口了.他頁面直接返回發送短信的狀態信息.返回發送成功則短信發送成功,成功后我再將此條信息從要發送短信表里刪除并保存在發送記錄表里面,以備日后方便查詢.其實登陸他的官網進入后臺也能方便的查詢,如下圖.

保存在發送記錄表里面 

C#實現Windows后臺服務實例發送短信服務的代碼基本上搞定了,就看怎么在服務器上安裝部署了.C#寫的Windows后臺服務不能直接安裝,需要借助.NET Framework里面的InstallUtil.exe安裝工具安裝,我們可以做成一個執行CMD命令的文件BAT文件來安裝啟動它,命令如下:

  1. %windir%\Microsoft.NET\  
  2. Framework\v2.0.50727\  
  3. InstallUtil.exe %CD%\  
  4. SendMessage.exe  
  5. net start SendMessage 

安裝啟動 

安裝完成以后,我們可以在我的電腦管理服務里面看到才安裝上的后臺服務.

后臺服務 

經測試,采用定時訪問數據庫發送短信的服務并不是很耗資源,剛啟動的時候只占用內存為7、8M左右,經過在服務器上連續運行幾天不關閉占用的內存也只升到15M左右,運行比較穩定,這里提供一個短信二次開發接口說明,有興趣的朋友可以去下載看下.

智網動力集團短信二次開發說明文檔示例

特別申明:本文及內容如非特別注明,均為本人Jonllen原創,版權均歸原作者個人所有,轉載必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

C#實現Windows后臺服務實例的基本情況就向你介紹到這里,希望對你了解和學習C#實現Windows后臺服務實例有所幫助。

【編輯推薦】

  1. C#windows服務狀態改變操作淺析
  2. C#Windows服務程序開發實例介紹
  3. C#啟動Windows服務及關閉實例實現
  4. C#啟動Windows服務的窗體程序淺析
  5. C#Windows服務程序之安裝項目
責任編輯:仲衡 來源: 百度空間
相關推薦

2009-08-14 11:00:16

C#創建Windows

2009-08-27 13:30:11

C# interfac

2009-08-27 18:09:49

C#接口的實現

2009-08-14 16:32:50

C#啟動Windows

2009-08-14 16:02:50

C#啟動windows

2009-08-14 14:17:16

C#Windows服務

2009-08-27 17:59:56

C#接口定義

2009-08-18 13:49:21

C# 操作Excel

2009-08-24 10:37:27

C# 泛型

2009-08-17 17:49:20

C# 枚舉

2009-09-09 13:57:28

C# XML解析

2009-08-14 16:41:22

C#啟動Windows

2009-12-11 13:59:35

F#

2009-08-31 15:11:23

C#調用水晶報表

2009-08-17 14:36:15

C#進度條實現

2009-08-14 09:50:46

C#復制構造函數

2009-08-31 18:38:59

C#寫文件

2009-08-19 11:34:06

C#操作Word

2009-08-12 15:26:38

C#讀取XML文檔

2009-09-01 13:13:28

C#打開Word文檔
點贊
收藏

51CTO技術棧公眾號

国产精品香蕉视屏| 黄视频网站在线观看| 日本免费新一区视频| 成人天堂噜噜噜| 久本草在线中文字幕亚洲| 国产一区二区成人| 婷婷丁香在线| 777午夜精品免费视频| 亚洲高清国产精品| 午夜日韩在线电影| 青娱在线视频| 亚洲sss视频在线视频| 久草.com| 亚洲久草在线视频| 毛片毛片毛片毛片毛片毛片| 国产日韩欧美在线一区| 欧美视频第一区| 久久久久国产精品免费免费搜索| 在线观看av的网址| 国产美女娇喘av呻吟久久| 伊人天天久久大香线蕉av色| 日韩精品欧美精品| 在线视频不卡国产| 国产在线精品一区在线观看麻豆| 一区二区三区|亚洲午夜| 久久中文在线| 亚洲mv在线看| 青青草一区二区三区| 视频在线一区二区三区| 免费av网站大全久久| 在线国产99| 成人免费视频caoporn| 五十路熟女丰满大屁股| 久久亚洲一区二区三区四区| 白嫩少妇丰满一区二区| 国产欧美日韩亚州综合 | 欧美在线观看日本一区| 亚洲三级网页| 91美女片黄在线观| 亚洲精品孕妇| 日本亚洲导航| 国产白丝网站精品污在线入口| 日本天堂免费a| 久久精品亚洲一区二区三区浴池| 国产精品区在线| 午夜av一区二区三区| 91精彩视频在线观看| 91.com在线观看| 69堂精品视频在线播放| 色中色综合影院手机版在线观看| 日韩深夜福利| 快播亚洲色图| 99国内精品久久| 李宗瑞系列合集久久| 日韩视频免费直播| 四虎精品在线观看| 成人免费看片视频| 韩国成人精品a∨在线观看| 99视频在线视频| 在线中文字幕一区| 国产亚洲精彩久久| 成人免费在线视频网站| 久久se精品一区精品二区| 亚洲最大综合网| 欧美日韩精品免费| 四虎国产精品永久在线国在线 | 精品国产第一福利网站| 久久人91精品久久久久久不卡 | 视频二区在线| 亚洲精品小视频| 国产成人1区| 日韩精品欧美一区二区三区| 91亚洲午夜精品久久久久久| 色综合成人av| 色青青草原桃花久久综合| 日韩免费视频| 久草视频国产在线| 欧美三级三级三级爽爽爽| 三级成人在线| 91美女高潮出水| 91免费版在线看| 伊人在我在线看导航| 久久久久中文字幕| 久久精品国产亚洲aⅴ| 影音先锋导航| 色妞色视频一区二区三区四区| 欧美/亚洲一区| 成人性生生活性生交12| 7777精品久久久大香线蕉| 欧洲在线一区| 国产一区 在线播放| 欧美片网站yy| 日韩成人影院| 香蕉视频禁止18| 亚洲欧洲xxxx| 男女精品网站| 免费成人av电影| 日本韩国欧美精品大片卡二| 成人免费视频视频| 超碰在线最新网址| 国产麻豆日韩| 亚洲国产精品一区二区www在线 | 日韩一级免费看| 欧美另类videos死尸| 天堂久久一区| 天堂√在线观看一区二区| 丰满岳妇乱一区二区三区| 国产精品久久久久久久久久白浆| 黄网站色视频免费观看| 精品国产伦一区二区三区观看方式| 大色综合视频网站在线播放| 性生交免费视频| 久久综合久久八八| av电影在线观看不卡| 欧美办公室脚交xxxx| 免费在线观看一区二区| 欧美天天综合色影久久精品| 人体久久天天| 在线观看成人影院| 欧美激情中文网| 久久精品网站免费观看| 台湾天天综合人成在线| 成人在线播放网址| 亚洲色图第一页| 韩国v欧美v日本v亚洲v| 国产一区二中文字幕在线看| 久久国产人妖系列| 国产小视频免费在线网址| 午夜精品久久久久久久99热| 国产.欧美.日韩| 高清电影在线观看免费| www.久久艹| 欧美视频在线观看免费| 日韩不卡一区| 最近最好的中文字幕2019免费| 欧美噜噜久久久xxx| 97久久精品人人澡人人爽| 亚洲成人va| 六月婷婷在线视频| 在线色欧美三级视频| 成人av网站免费观看| 99精品女人在线观看免费视频 | 色豆豆成人网| 97干在线视频| 久热精品视频在线| 国产婷婷色一区二区三区四区| 玖玖精品一区| 91淫黄看大片| 国产成人亚洲综合91精品| 亚洲一区二区三区四区中文字幕 | 久久精品中文字幕电影| 96av麻豆蜜桃一区二区| crdy在线观看欧美| 少妇一级淫免费播放| 日韩免费av片在线观看| 亚洲成人一区二区在线观看| 影视一区二区| 青春草在线视频| 分分操这里只有精品| 久久久久久久久久久亚洲| 国产精品欧美久久久久一区二区| 看全色黄大色大片免费久久久| 免费观影入口看日本视频| 91一区二区三区| 日韩免费观看高清完整版在线观看| 麻豆久久久久久| 日韩伦理一区二区| 在线播放91| 亚洲欧洲日夜超级视频| www.xxxx欧美| 亚洲综合图片区| 亚洲欧洲一区二区天堂久久| 大黄网站在线观看| 欧美日韩大尺度| 91精品入口蜜桃| 精品一区二区三区电影| 久久精品夜夜夜夜久久| 欧美wwwww| 草莓视频丝瓜在线观看丝瓜18| 日韩免费视频播放| 亚洲在线观看视频| 亚洲欧美日韩高清| 亚洲成人7777| 国内一区二区视频| 视频精品在线观看| 91豆花视频在线播放| 成人女性文胸| 日韩电影免费观看高清完整| 欧美裸体xxxx极品少妇| 色哟哟一区二区三区| 国产成人精品综合在线观看| 久久不见久久见免费视频7| 牛牛在线精品视频| va中文字幕| 一区二区三区的久久的视频| 午夜欧美大片免费观看| 欧美成人免费网站| 亚洲成人综合在线| 国产大片一区二区| 亚洲先锋成人|