一、什么是WebService?為什么需要WebService?
WebService是兩個計算機之間通訊(交談)的技術,網絡中一台計算機想要調用另一台計算機的方法時,此時可以需要WebService。
很火的SOA、雲計算在技術層面上都是WebService
二、自己做一個WebService
例子:
服務器端添加一個ashx頁面代碼如下
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
try
{
int Number1 = int.Parse(context.Request["number1"]);
int Number2 = int.Parse(context.Request["number2"]);
int summer = Number1 + Number2;
context.Response.Write(summer);
}
catch { }
}
客戶端調用服務器端的的方法代碼如下:
WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8;
string s = wc.DownloadString("http://localhost:6563/ShowSummer.ashx?number1=" +
textBox1.Text + "&number2=" + textBox2.Text);
textBox3.Text = s;
}
顯示的結果:
客戶端調用服務端的方法用到了WebClient.
WebClient類提供用於將數據發送到由 URI 標識的資源及從這樣的資源接收數據的常用方法。
做了一個簡單的自己編寫Webservice小例子,但是由於服務端的方法很多,參數也各不一樣。沒有解決統一的數據格式和自描述。所以客戶端在調用起來很麻煩,為了解決這些問題引入了WebService
三、WebService原理
規定請求數據格式是,函數名為根節點,參數列表為子節點:
WebService中所有的請求、返回都是XML格式,所有語言都支持XML格式。
WSDL:描述了WebService提供了哪些方法。
SOAP協議:描述了向服務器發送什么格式的調用數據,以及服務器會返回什么格式的數據。
規定所有的方法頁面在請求后加wsdl這個參數的時候返回一個方法列表、方法參數、方法返回值的xml:
< operations>
<operation Name="Add">
<input>
<num1 type="int"/>
<num2 type="int"/>
</input >
<output>
<ret type="int"/>
</output>
</ operation >
</operations>
這樣服務方法就自描述了,用wsdl參數訪問就可以得知這個服務提供什么方法、方法的參數是什么了。
WSDL:對WebService能夠提供的服務進行描述的協議。服務器只有返回這個格式的數據,代碼生成器才能根據WSDL生成代碼。
請求、返回的XML數據格式(有哪些節點、節點的名字等等)WebService 用SOAP協議進行規定,方法描述信息XML用WSDL協議規定。WebService技術是與語言、平台無關,因此.net可以訪問java編寫的WebService、java也可以訪問.net編寫的webservice,php、python等各種語言也幾乎都支持webservice,因此可以說webservice可以實現跨語言方法調用。
但是如果自己構建請求、返回xml,解析xml請求,自己負責方法描述信息更新是很麻煩的,.net就提供了簡化開發WebService、使用WebService的技術,簡單的讓人不敢相信
四、引用WebService做一個實例
服務器端添加一個Web服務,增加一個Add方法
客戶端添加Webservice引用
運行結果如上
五、總結WebService
l 1、服務器端:就想寫普通方法一樣,不需要處理請求、響應。
l 2、客戶端添加對asmx的“服務器引用”,然后就可以調用***SoapClient類中的方法。就“好像”直接調用了服務端的方法。
l 添加服務引用的時候工具讀取asmx的WSDL自動生成了ServiceReference1中的類,這些類幫我們來拼Http請求,並且把Http返回值拆成函數的返回。
l 服務器端新建“Web服務”(asmx),在遠端可以調用的方法上標注[WebMethod]。
l 客戶端“添加服務引用”,填寫asmx的地址。然后就可以調用Service References下自動生成的***SoapClient類了。
l 用WebService的時候如果服務端的接口定義發生變化,則需要重新添加對服務端的引用,因為Service References中的類是工具讀取WSDL定義自動生成的。在服務引用上點擊右鍵,選擇“更新服務引用”。如果只是修改了WebService內部實現,而接口沒變,則不需要“更新服務引用”,因為WSDL沒變,Soap沒變。