Web服務(wù)(Web Services),其實(shí)就是一種無(wú)須購(gòu)買并部署的組件,是一種被一次部署到Internet中然后到處可用的一種新型組件,所有應(yīng)用只需要能夠連入Internet,就可以使用和集成Web服務(wù)。
Web服務(wù)基于一套描述軟件通信語(yǔ)法和語(yǔ)義的核心標(biāo)準(zhǔn)。xml提供表示數(shù)據(jù)的通用語(yǔ)法;簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP)提供數(shù)據(jù)交換的語(yǔ)義;Web服務(wù)描述語(yǔ)言(WSDL)提供描述Web服務(wù)功能的機(jī)制。其他規(guī)范統(tǒng)稱為WS-*體系結(jié)構(gòu),用于定義Web服務(wù)發(fā)現(xiàn)、事件、附件、安全性、可靠的消息傳送、事務(wù)和管理方面的功能。
Web服務(wù)提供了定義良好的接口,這些接口描述了它所提供的服務(wù),用戶可以通過(guò)這些接口來(lái)調(diào)用Web服務(wù)提供的功能。開發(fā)者可以通過(guò)把遠(yuǎn)程服務(wù)、本地服務(wù)和用戶代碼結(jié)合在一起來(lái)創(chuàng)建應(yīng)用程序。
Web服務(wù)既可以在內(nèi)部由單個(gè)應(yīng)用程序使用,也可通過(guò)Internet公開供任意數(shù)量的應(yīng)用程序使用。由于可以通過(guò)標(biāo)準(zhǔn)接口訪問(wèn),因此Web服務(wù)使異構(gòu)系統(tǒng)能夠作為一個(gè)計(jì)算網(wǎng)絡(luò)協(xié)同運(yùn)行。
Web服務(wù)正在開創(chuàng)一個(gè)分布式應(yīng)用程序開發(fā)的新時(shí)代。作為Internet的下一個(gè)革命性的進(jìn)步,Web服務(wù)將成為把所有計(jì)算設(shè)備鏈接到一起的基本結(jié)構(gòu)。
Web服務(wù)的設(shè)計(jì)是基于兼容性很強(qiáng)的開放式標(biāo)準(zhǔn)。為了確保最大限度的兼容性和可擴(kuò)展性,Web服務(wù)體系被建設(shè)得盡可能通用。
Web服務(wù)的標(biāo)準(zhǔn)如下:
1.WSDL:告訴客戶端一個(gè)Web服務(wù)中都提供了什么方法,這些方法包含什么參數(shù)、將要返回什么值以及如何與這些方法進(jìn)行交互。
2.SOAP:在信息發(fā)送到一個(gè)Web服務(wù)之前,提供對(duì)信息進(jìn)行編碼的標(biāo)準(zhǔn)。
3.HTTP:所有的Web服務(wù)交互發(fā)生時(shí)所遵循的協(xié)議。
4.DISCO:該標(biāo)準(zhǔn)提供包含對(duì)Web服務(wù)的鏈接或以一種特殊的途徑來(lái)提供Web服務(wù)的列表。
5.UDDI:這個(gè)標(biāo)準(zhǔn)提供創(chuàng)建業(yè)務(wù)的信息。
SOAP
在.NET中,客戶端在與Web服務(wù)交互時(shí)有下面三種協(xié)議能夠使用:
1.HTTP GET:使用該協(xié)議與Web服務(wù)交互時(shí),會(huì)把客戶端發(fā)送的信息編碼后放在查詢字符串里,而客戶端獲取的Web服務(wù)的信息則是以一個(gè)基本的XML文檔的形式存在。
2.HTTP POST:使用該協(xié)議與Web服務(wù)交互時(shí),會(huì)把參數(shù)放在請(qǐng)求體里面,而獲取的信息則是以一個(gè)基本的XML文檔的形式存在。
3.SOAP:使用該協(xié)議與Web服務(wù)交互時(shí),請(qǐng)求和獲取的信息都是以XML形式存在。同HTTP GET和HTTP POST一樣,SOAP也是運(yùn)行于HTTP之上,但它綁定信息則是采用一個(gè)更詳細(xì)的基于XML的語(yǔ)言來(lái)描述。
盡管.NET有能力支持以上三種協(xié)議,但是為了安全,通常會(huì)限制使用前兩種協(xié)議。默認(rèn)情況下,.NET禁用HTTP GET,而且對(duì)于本地計(jì)算機(jī)限制HTTP POST。這意味著程序員可以使用前兩種協(xié)議測(cè)試Web服務(wù),但不能使用它們來(lái)訪問(wèn)一個(gè)遠(yuǎn)程計(jì)算機(jī)上的Web服務(wù)。可以在Web.Config文件里改變這些設(shè)置,但.NET不推薦這樣做。
從本質(zhì)上來(lái)說(shuō),當(dāng)使用SOAP時(shí),程序員只需要簡(jiǎn)單的使用SOAP標(biāo)準(zhǔn)來(lái)編碼信息即可。
與Web服務(wù)交互
WSDL和SOAP標(biāo)準(zhǔn)使得Web服務(wù)同客戶端的交互成為可能,但它們沒(méi)有說(shuō)明如何進(jìn)行交互。以下三個(gè)組件在Web服務(wù)同客戶端的交互中扮演重要角色:
1.一個(gè)定制的Web服務(wù)類,該類提供一些功能。
2.一個(gè)客戶端應(yīng)用程序,該程序使用上面組件的功能。
3.一個(gè)代理類,該類扮演上面兩個(gè)組件間的接口角色。該代理類包含所有Web服務(wù)方法的說(shuō)明,而且根據(jù)選擇的協(xié)議處理所有與Web服務(wù)交互相關(guān)的細(xì)節(jié)問(wèn)題。
實(shí)際交互過(guò)程的執(zhí)行步驟:
1.客戶端創(chuàng)建一個(gè)代理類的實(shí)例。
2.客戶端調(diào)用代理類的方法。
3.在后臺(tái),代理類以恰當(dāng)?shù)男问桨l(fā)送信息到Web服務(wù),并且接收相應(yīng)的反應(yīng)信息。
4.代理類返回調(diào)用代碼的結(jié)果。
在使用交互過(guò)程中需要注意以下內(nèi)容:
1.并不是所有的數(shù)據(jù)類型都支持方法參數(shù)和返回值。如大部分.NE類對(duì)象都不能在該交互過(guò)程中被傳遞(DataSet除外)。
2.網(wǎng)絡(luò)調(diào)用花費(fèi)很少的但可計(jì)量的時(shí)間。如果需要在一行代碼中使用幾個(gè)Web服務(wù)方法,則這個(gè)延遲會(huì)被累加的。
3.除非Web服務(wù)采用特殊步驟來(lái)記憶狀態(tài),狀態(tài)數(shù)據(jù)會(huì)被丟失的。這意味著程序員應(yīng)該把Web服務(wù)看成是一個(gè)無(wú)狀態(tài)的實(shí)用類,而該類包含很多程序員需要使用的方法。
4.在與Web服務(wù)的交互中,會(huì)出現(xiàn)錯(cuò)誤且可能被中斷。程序員在構(gòu)建一個(gè)健壯的應(yīng)用程序時(shí)要考慮到很多因素。
創(chuàng)建Web服務(wù)
創(chuàng)建Web服務(wù)的步驟:
1. 右鍵點(diǎn)擊網(wǎng)站名稱。在彈出的快捷菜單中選擇“添加新項(xiàng)”命令。
2. 在彈出的“添加新項(xiàng)”選擇“已安裝模板”下的“Visual C#”模板,并在模板文件列表中選中“Web 服務(wù)”,然后在“名稱”文本框輸入該文件的名稱“WebService.asmx”,單擊“添加”按鈕。
3. 在解決方案資源管理器中出現(xiàn)Web服務(wù)的文件。
在asp.net中,所有的Web服務(wù)類都會(huì)繼承于System.Web.WebService類。該類包含一個(gè)構(gòu)造函數(shù),一般情況下可以不需要改構(gòu)造函數(shù)。
WebMethod用來(lái)提供描述它所標(biāo)識(shí)的方法的接口,WebMethod的屬性如下:
1.Description:Web服務(wù)的方法的描述信息、對(duì)Web服務(wù)的方法的功能注釋。
2.Enablesession:指示Web服務(wù)是否啟動(dòng)Session標(biāo)志,主要通過(guò)Cookie完成,默認(rèn)為false。
3.MessageName:主要實(shí)現(xiàn)方法重載后的重命名。
4.TransactionOption:指示XML Web services方法的事務(wù)支持。
5.CacheDuration:指定緩存時(shí)間的屬性。
6.BufferResponse:配置Web服務(wù)的方法是否等到響應(yīng)被完全緩沖后,才發(fā)送信息給請(qǐng)求端。
創(chuàng)建Web服務(wù)中的方法
利用上述步驟創(chuàng)建Web服務(wù)WebService1.asmx,修改WebService1.asmx.cs中的代碼,如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Linq; 6 using System.Web; 7 using System.Web.Services; 8 9 namespace Webapplication110 {11 /// <summary>12 /// WebService1 的摘要說(shuō)明13 /// </summary>14 [WebService(Namespace = "http://tempuri.org/")]15 [WebServiceBinding(ConformsTo = WsiPRofiles.BasicProfile1_1)]16 [System.ComponentModel.ToolboxItem(false)]17 // 若要允許使用 ASP.NET Ajax 從腳本中調(diào)用此 Web 服務(wù),請(qǐng)取消注釋以下行。 18 // [System.Web.Script.Services.ScriptService]19 public class WebService1 : System.Web.Services.WebService20 {21 22 [WebMethod(Description="獲取學(xué)生信息")]23 public DataSet GetStudent(string name)24 {25 if (name == "")26 return null;27 DataSet dataSet = new DataSet("Student");28 string connString = "Data Source=追風(fēng)的蝸牛;Initial Catalog=Student;Integrated Security=True";29 string sql = "select * from Student where stuName='" + name + "'";30 SqlConnection sqlConnection = new SqlConnection(connString);31 try32 {33 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, sqlConnection);34 sqlConnection.Open();35 sqlDataAdapter.Fill(dataSet);36 return dataSet;37 }38 catch39 {40 sqlConnection.Close();41 return null;42 }43 }44 }45 }
使用存在的Web服務(wù)
右鍵單擊項(xiàng)目名稱,為項(xiàng)目添加服務(wù)引用,選擇此解決方案中的Web服務(wù),選擇剛剛創(chuàng)建的Web服務(wù)。
添加頁(yè)面Default.aspx,添加一個(gè)DetailsView控件,Default.aspx.cs中的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Linq; 5 using System.Web; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 9 namespace WebApplication110 {11 public partial class Default : System.Web.UI.Page12 {13 protected void Page_Load(object sender, EventArgs e)14 {15 WebService1 server1 = new WebService1();16 DataSet dataSet = server1.GetStudent("吳彤");17 if (dataSet != null)18 {19 this.DetailsView1.DataSource = dataSet.Tables[0].DefaultView;20 this.DetailsView1.DataBind();21 }22 }23 }24 }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注