Web服務(Web Services),其實就是一種無須購買并部署的組件,是一種被一次部署到Internet中然后到處可用的一種新型組件,所有應用只需要能夠連入Internet,就可以使用和集成Web服務。
Web服務基于一套描述軟件通信語法和語義的核心標準。xml提供表示數據的通用語法;簡單對象訪問協議(SOAP)提供數據交換的語義;Web服務描述語言(WSDL)提供描述Web服務功能的機制。其他規范統稱為WS-*體系結構,用于定義Web服務發現、事件、附件、安全性、可靠的消息傳送、事務和管理方面的功能。
Web服務提供了定義良好的接口,這些接口描述了它所提供的服務,用戶可以通過這些接口來調用Web服務提供的功能。開發者可以通過把遠程服務、本地服務和用戶代碼結合在一起來創建應用程序。
Web服務既可以在內部由單個應用程序使用,也可通過Internet公開供任意數量的應用程序使用。由于可以通過標準接口訪問,因此Web服務使異構系統能夠作為一個計算網絡協同運行。
Web服務正在開創一個分布式應用程序開發的新時代。作為Internet的下一個革命性的進步,Web服務將成為把所有計算設備鏈接到一起的基本結構。
Web服務的設計是基于兼容性很強的開放式標準。為了確保最大限度的兼容性和可擴展性,Web服務體系被建設得盡可能通用。
Web服務的標準如下:
1.WSDL:告訴客戶端一個Web服務中都提供了什么方法,這些方法包含什么參數、將要返回什么值以及如何與這些方法進行交互。
2.SOAP:在信息發送到一個Web服務之前,提供對信息進行編碼的標準。
3.HTTP:所有的Web服務交互發生時所遵循的協議。
4.DISCO:該標準提供包含對Web服務的鏈接或以一種特殊的途徑來提供Web服務的列表。
5.UDDI:這個標準提供創建業務的信息。
SOAP
在.NET中,客戶端在與Web服務交互時有下面三種協議能夠使用:
1.HTTP GET:使用該協議與Web服務交互時,會把客戶端發送的信息編碼后放在查詢字符串里,而客戶端獲取的Web服務的信息則是以一個基本的XML文檔的形式存在。
2.HTTP POST:使用該協議與Web服務交互時,會把參數放在請求體里面,而獲取的信息則是以一個基本的XML文檔的形式存在。
3.SOAP:使用該協議與Web服務交互時,請求和獲取的信息都是以XML形式存在。同HTTP GET和HTTP POST一樣,SOAP也是運行于HTTP之上,但它綁定信息則是采用一個更詳細的基于XML的語言來描述。
盡管.NET有能力支持以上三種協議,但是為了安全,通常會限制使用前兩種協議。默認情況下,.NET禁用HTTP GET,而且對于本地計算機限制HTTP POST。這意味著程序員可以使用前兩種協議測試Web服務,但不能使用它們來訪問一個遠程計算機上的Web服務。可以在Web.Config文件里改變這些設置,但.NET不推薦這樣做。
從本質上來說,當使用SOAP時,程序員只需要簡單的使用SOAP標準來編碼信息即可。
與Web服務交互
WSDL和SOAP標準使得Web服務同客戶端的交互成為可能,但它們沒有說明如何進行交互。以下三個組件在Web服務同客戶端的交互中扮演重要角色:
1.一個定制的Web服務類,該類提供一些功能。
2.一個客戶端應用程序,該程序使用上面組件的功能。
3.一個代理類,該類扮演上面兩個組件間的接口角色。該代理類包含所有Web服務方法的說明,而且根據選擇的協議處理所有與Web服務交互相關的細節問題。
實際交互過程的執行步驟:
1.客戶端創建一個代理類的實例。
2.客戶端調用代理類的方法。
3.在后臺,代理類以恰當的形式發送信息到Web服務,并且接收相應的反應信息。
4.代理類返回調用代碼的結果。
在使用交互過程中需要注意以下內容:
1.并不是所有的數據類型都支持方法參數和返回值。如大部分.NE類對象都不能在該交互過程中被傳遞(DataSet除外)。
2.網絡調用花費很少的但可計量的時間。如果需要在一行代碼中使用幾個Web服務方法,則這個延遲會被累加的。
3.除非Web服務采用特殊步驟來記憶狀態,狀態數據會被丟失的。這意味著程序員應該把Web服務看成是一個無狀態的實用類,而該類包含很多程序員需要使用的方法。
4.在與Web服務的交互中,會出現錯誤且可能被中斷。程序員在構建一個健壯的應用程序時要考慮到很多因素。
創建Web服務
創建Web服務的步驟:
1. 右鍵點擊網站名稱。在彈出的快捷菜單中選擇“添加新項”命令。
2. 在彈出的“添加新項”選擇“已安裝模板”下的“Visual C#”模板,并在模板文件列表中選中“Web 服務”,然后在“名稱”文本框輸入該文件的名稱“WebService.asmx”,單擊“添加”按鈕。
3. 在解決方案資源管理器中出現Web服務的文件。
在asp.net中,所有的Web服務類都會繼承于System.Web.WebService類。該類包含一個構造函數,一般情況下可以不需要改構造函數。
WebMethod用來提供描述它所標識的方法的接口,WebMethod的屬性如下:
1.Description:Web服務的方法的描述信息、對Web服務的方法的功能注釋。
2.Enablesession:指示Web服務是否啟動Session標志,主要通過Cookie完成,默認為false。
3.MessageName:主要實現方法重載后的重命名。
4.TransactionOption:指示XML Web services方法的事務支持。
5.CacheDuration:指定緩存時間的屬性。
6.BufferResponse:配置Web服務的方法是否等到響應被完全緩沖后,才發送信息給請求端。
創建Web服務中的方法
利用上述步驟創建Web服務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 的摘要說明13 /// </summary>14 [WebService(Namespace = "http://tempuri.org/")]15 [WebServiceBinding(ConformsTo = WsiPRofiles.BasicProfile1_1)]16 [System.ComponentModel.ToolboxItem(false)]17 // 若要允許使用 ASP.NET Ajax 從腳本中調用此 Web 服務,請取消注釋以下行。 18 // [System.Web.Script.Services.ScriptService]19 public class WebService1 : System.Web.Services.WebService20 {21 22 [WebMethod(Description="獲取學生信息")]23 public DataSet GetStudent(string name)24 {25 if (name == "")26 return null;27 DataSet dataSet = new DataSet("Student");28 string connString = "Data Source=追風的蝸牛;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服務
右鍵單擊項目名稱,為項目添加服務引用,選擇此解決方案中的Web服務,選擇剛剛創建的Web服務。
添加頁面Default.aspx,添加一個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 }
新聞熱點
疑難解答