C#利用web service實(shí)現(xiàn)短信發(fā)送

2010-08-28 10:49:27來源:西部e網(wǎng)作者:

  通過編程方式實(shí)現(xiàn)短信息的發(fā)送對(duì)很多人來說是一件比較煩雜的事情,目前一般的解決方法是通過計(jì)算機(jī)和手機(jī)的連線,通過可對(duì)手機(jī)編程的語言編寫相關(guān)的手機(jī)短信息程序來實(shí)現(xiàn),而這種方法對(duì)于一般人來說是很難達(dá)到的,因?yàn)榇朔N方法不僅要有很多必備的硬件設(shè)備,也還需懂得手機(jī)編程的相關(guān)知識(shí)。本文就來探討一下另外一種通過visual c#發(fā)送短信息的簡單實(shí)現(xiàn)方法,這種方法在實(shí)現(xiàn)過程中比我們想象的要簡單許多,只需擁有visual c#一般編程基礎(chǔ),并確定您的計(jì)算機(jī)接入互聯(lián)網(wǎng)即可。下面就來詳細(xì)介紹一下visual c#發(fā)送短信息的具體實(shí)現(xiàn)過程。

  一. visual c#發(fā)送短信息的原理:

  我想當(dāng)很多讀者一看到本文的題目一定會(huì)想本文內(nèi)容一定非常深?yuàn)W,并且作者一定知道了電信的發(fā)送短信的網(wǎng)關(guān)地址,其實(shí)并非如此。本文其實(shí)是利用一個(gè)現(xiàn)成的資源,一個(gè)可發(fā)送短信的web serviec。這個(gè)web service就是新浪網(wǎng)就提供的一個(gè),可供用戶直接調(diào)用的發(fā)送短消息的web service。這個(gè)service的地址是http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl。在這個(gè)service中提供了一個(gè)發(fā)送短消息的方法"sendxml"。此方法的語法格式如下:

string sendxml (carrier , userid , password , mobilenumber , content , msgtype )

  sendxml方法中的六個(gè)參數(shù)均為string類型,并且sendxml方法的返回值也是string類型。

  以下是sendxml方法中的六個(gè)參數(shù)的具體說明:

  ·carrier:運(yùn)營商名稱,具體使用時(shí)此參數(shù)并沒有什么具體要求,即這里面可以隨便輸,輸入的字符串也不會(huì)在對(duì)方手機(jī)中有任何顯示。

  ·userid:在新浪網(wǎng)上注冊(cè)的手機(jī)號(hào),注冊(cè)手機(jī)所用的地址是:http://sms.sina.com.cn,具體注冊(cè)方法下面會(huì)具體介紹。

  ·password:您在新浪網(wǎng)成功注冊(cè)手機(jī)后,新浪網(wǎng)所反饋來的密碼。

  ·mobilenumber:要發(fā)送短信到對(duì)方的手機(jī)號(hào)碼。

  ·content:所要發(fā)送短消息的內(nèi)容。

  ·msgtype:發(fā)送短消息的類型,由于本文發(fā)送的不是彩信,所以輸入"text"。

  調(diào)用此web service只需在visual c#開發(fā)環(huán)境中直接添加web引用,把該地址輸入即可,就可以使用此web service中的sendxml方法發(fā)送短消息了。當(dāng)然發(fā)送短消息的機(jī)器必須接入互聯(lián)網(wǎng)。

  二.在新浪網(wǎng)上注冊(cè)手機(jī)

  按照如下步驟就可在新浪網(wǎng)上注冊(cè)手機(jī):

  1. 打開瀏覽器,并在地址欄中輸入新浪無線的地址:http://sms.sina.com.cn.。在瀏覽器德左上角,可見如圖01界面:


圖01:新浪網(wǎng)注冊(cè)手機(jī)界面之一

  輸入手機(jī)號(hào)后,單擊圖01中的"登陸",如果你的手機(jī)沒有在新浪,則提示如圖02所示信息。


圖02:新浪網(wǎng)注冊(cè)手機(jī)界面之二


  2. 按照?qǐng)D02中的選項(xiàng)輸入相應(yīng)的信息后,單擊"登陸移動(dòng)夢(mèng)網(wǎng)"按鈕,如果注冊(cè)成功,移動(dòng)夢(mèng)網(wǎng)則會(huì)向你注冊(cè)的手機(jī)上發(fā)送一個(gè)8位長度的口令就可以得到圖03所示界面。


圖03:新浪網(wǎng)注冊(cè)手機(jī)界面之三

  這個(gè)口令要保留,下面發(fā)送短信就要使用這個(gè)口令。

  三.本文程序設(shè)計(jì)、調(diào)試和運(yùn)行的環(huán)境:

 。1).微軟公司視窗2000服務(wù)器版。

 。2).visual studio .net 2003企業(yè)構(gòu)建版,.net framework sdk版本號(hào)4322。
  四.visual c#實(shí)現(xiàn)短信息發(fā)送的具體實(shí)現(xiàn)步驟:

  visual c#發(fā)送短信息的關(guān)鍵就是通過web引用新浪網(wǎng)提供的發(fā)送短信息的web service,并在引用完成后。調(diào)用此service的sendxml方法即可。以下就是visual c#引用web service發(fā)送短信息的具體實(shí)現(xiàn)步驟:

  1. 啟動(dòng)visual studio .net。

  2. 選擇菜單【文件】|【新建】|【項(xiàng)目】后,彈出【新建項(xiàng)目】對(duì)話框。

  3. 將【項(xiàng)目類型】設(shè)置為【visual basic項(xiàng)目】。

  4. 將【模板】設(shè)置為【windows應(yīng)用程序】。

  5. 在【名稱】文本框中輸入【短信】。

  6. 在【位置】的文本框中輸入【e:\vs.net項(xiàng)目】,然后單擊【確定】按鈕,這樣在"e:\vs.net項(xiàng)目"目錄中就產(chǎn)生了名稱為"短信"的文件夾,并在里面創(chuàng)建了名稱為"短信"的項(xiàng)目文件。

  7. 把visual studio .net的當(dāng)前窗口切換到【form1.cs(設(shè)計(jì))】窗口,并從【工具箱】中的【windows窗體組件】選項(xiàng)卡中往form1窗體中拖入下列組件,并執(zhí)行相應(yīng)的操作:

  四個(gè)label組件。
  四個(gè)textbox組件。

  一個(gè)button組件,其作用是發(fā)送短信息。并在這個(gè)button組件拖入form1的設(shè)計(jì)窗體后,雙擊它,則系統(tǒng)會(huì)在form1.cs文件分別產(chǎn)生這個(gè)組件的click事件對(duì)應(yīng)的處理代碼。

  8. 把visual studio .net的當(dāng)前窗口切換到form1.vb的代碼編輯窗口,并用下列代碼替換form1.cs中的initializecomponent過程對(duì)應(yīng)的代碼,下列代碼作用是初始化窗體中加入的組件:

private void initializecomponent ( )
{
this.textbox1 = new system.windows.forms.textbox ( ) ;
this.textbox2 = new system.windows.forms.textbox ( ) ;
this.textbox3 = new system.windows.forms.textbox ( ) ;
this.button1 = new system.windows.forms.button ( ) ;
this.label1 = new system.windows.forms.label ( ) ;
this.label2 = new system.windows.forms.label ( ) ;
this.label3 = new system.windows.forms.label ( ) ;
this.label4 = new system.windows.forms.label ( ) ;
this.textbox4 = new system.windows.forms.textbox ( ) ;
this.suspendlayout ( ) ;
this.textbox1.location = new system.drawing.point ( 144 , 16 ) ;
this.textbox1.name = "textbox1" ;
this.textbox1.size = new system.drawing.size ( 184 , 21 ) ;
this.textbox1.tabindex = 0 ;
this.textbox1.text = "" ;
this.textbox2.location = new system.drawing.point ( 144 , 69 ) ;
this.textbox2.name = "textbox2" ;
this.textbox2.passwordchar = ''''''''*'''''''' ;
this.textbox2.size = new system.drawing.size ( 184 , 21 ) ;
this.textbox2.tabindex = 1 ;
this.textbox2.text = "" ;
this.textbox3.location = new system.drawing.point ( 144 , 122 ) ;
this.textbox3.name = "textbox3" ;
this.textbox3.size = new system.drawing.size ( 184 , 21 ) ;
this.textbox3.tabindex = 2 ;
this.textbox3.text = "" ;
this.button1.location = new system.drawing.point ( 152 , 256 ) ;
this.button1.name = "button1" ;
this.button1.size = new system.drawing.size ( 80 , 32 ) ;
this.button1.tabindex = 4 ;
this.button1.text = "發(fā)送" ;
this.button1.click += new system.eventhandler ( this.button1_click ) ;
this.label1.location = new system.drawing.point ( 56 , 24 ) ;
this.label1.name = "label1" ;
this.label1.size = new system.drawing.size ( 88 , 16 ) ;
this.label1.tabindex = 5 ;
this.label1.text = "注冊(cè)手機(jī)號(hào):" ;
this.label2.location = new system.drawing.point ( 88 , 77 ) ;
this.label2.name = "label2" ;
this.label2.size = new system.drawing.size ( 72 , 16 ) ;
this.label2.tabindex = 6 ;
this.label2.text = "口令:" ;
this.label3.location = new system.drawing.point ( 56 , 128 ) ;
this.label3.name = "label3" ;
this.label3.size = new system.drawing.size ( 96 , 16 ) ;
this.label3.tabindex = 7 ;
this.label3.text = "目標(biāo)手機(jī)號(hào):" ;
this.label4.location = new system.drawing.point ( 96 , 176 ) ;
this.label4.name = "label4" ;
this.label4.size = new system.drawing.size ( 72 , 16 ) ;
this.label4.tabindex = 8 ;
this.label4.text = "內(nèi)容:" ;
this.textbox4.location = new system.drawing.point ( 144 , 175 ) ;
this.textbox4.multiline = true ;
this.textbox4.name = "textbox4" ;
this.textbox4.size = new system.drawing.size ( 184 , 48 ) ;
this.textbox4.tabindex = 3 ;
this.textbox4.text = "" ;
this.autoscalebasesize = new system.drawing.size ( 6 , 14 ) ;
this.clientsize = new system.drawing.size ( 410 , 303 ) ;
this.controls.add ( this.button1 ) ;
this.controls.add ( this.textbox4 ) ;
this.controls.add ( this.textbox3 ) ;
this.controls.add ( this.textbox2 ) ;
this.controls.add ( this.textbox1 ) ;
this.controls.add ( this.label4 ) ;
this.controls.add ( this.label3 ) ;
this.controls.add ( this.label2 ) ;
this.controls.add ( this.label1 ) ;
this.formborderstyle = system.windows.forms.formborderstyle.fixedsingle ;
this.maximizebox = false ;
this.name = "form1" ;
this.text = "visual c#實(shí)現(xiàn)短信發(fā)送" ;
this.resumelayout ( false ) ;
}

  至此【短信】項(xiàng)目的界面設(shè)計(jì)和功能實(shí)現(xiàn)的準(zhǔn)備工作就完成了,具體如圖04所示:


圖04:【短信】項(xiàng)目的設(shè)計(jì)界面

  9. 選中【短信】的【解決方法資源管理器】,右擊【引用】,彈出【添加web引用】對(duì)話框。在此對(duì)話框中的【url】文本框中輸入"http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl"后,單擊【轉(zhuǎn)到】按鈕,則會(huì)得到圖05所示界面:


圖05:在【短信】項(xiàng)目中添加web引用的界面

  此時(shí)單擊圖04中的【添加引用】按鈕,則成功實(shí)現(xiàn)在【短信】項(xiàng)目中添加可發(fā)送短信息的新浪網(wǎng)提供的web service。

  10. 把visual stuido .net的當(dāng)前窗口切換到form1.cs的代碼編輯窗口,并用下列代碼替換from1.cs中的button1的click事件對(duì)應(yīng)的代碼,下列代碼的作用是調(diào)用引入的web service中提供的sendxml方法向指定手機(jī)發(fā)送短信息:

private void button1_click ( object sender , system.eventargs e )
{
 短信.cn.com.sina.smsinter.smsws ws = new 短信.cn.com.sina.smsinter.smsws ( ) ;
 string result = ws.sendxml ( "sina" ,textbox1.text ,textbox2.text ,textbox3.text ,textbox4.text ,"new" ) ;
 messagebox.show ( result ) ;
}

  11. 至此,在上述步驟都正確執(zhí)行后,【短信】項(xiàng)目的全部工作就完成了。單擊快捷鍵f5運(yùn)行程序,在輸入【注冊(cè)手機(jī)號(hào)】、【口令】、【目標(biāo)手機(jī)號(hào)】和【內(nèi)容】后,單擊【發(fā)送】按鈕后,程序就會(huì)向指定的手機(jī)號(hào)發(fā)送短信息了。

  五.總結(jié):

  本文介紹的這種visual c#發(fā)送短信息方法,其解決關(guān)鍵是引用web service,調(diào)用此web service中的方法。通觀全文,此種方法是不是很簡單。最后還要提醒諸位,利用這種發(fā)送短信息并不是免費(fèi)的午餐,其資費(fèi)標(biāo)準(zhǔn)可參看新浪無線網(wǎng)站上的相關(guān)說明,每發(fā)送一條收費(fèi)一角錢,從在新浪網(wǎng)注冊(cè)的手機(jī)上收費(fèi)。在使用本文介紹的方法發(fā)送短信息時(shí),在發(fā)送完成后,一般會(huì)有一個(gè)延遲。這是因?yàn)楹笈_(tái)采用了了消息隊(duì)列機(jī)制,不過這種延遲一般只會(huì)有幾秒鐘的時(shí)間。

關(guān)鍵詞:短信C#

贊助商鏈接: