WebService:一個完成用戶端與伺服器端通訊的技術?一個完成將SOAP映射為.NET類的技術?或者更簡單的認為是XML文檔資訊傳遞的技術?也許在剛接觸到這個的時候我們並不知道WebService究竟意味著什麼,反正只知道他是通過建立一個ASP.NET Web 服務而產生了一個*.asmx檔案,伴隨著這個檔案的還有一個是與其同名的*.cs檔案(VS2005是在AppCode檔案夾下面)。
竟然我們不知道WebService有啥作用,就不用管他了,我們現在想用ASP建立一個頁面,兩個文字框TextBox(一個用來Input,一個用來Output),一個Button,在Input中我們輸入一個名字,然後在Output中我們列印出相應的資訊,這個很容易,需要一個Web頁面,背景處理代碼(簡單的功能用JS,複雜的功能放在後台實現),這樣很容易就實現了當點擊按鈕的時候就列印出了資訊。這個功能太容易了,但是我們就像將它共用出來,讓別人也能使用,現在有個其他的開發商,他習慣開發傳統型應用程式,他也想使用別人的共用的函數介面,他希望之前開發WEB的供應商把這個列印資訊的功能也讓他們使用一下。為了滿足這個要求我們有了以下的認識:①省掉Web頁面,傳統型應用程式可不需要什麼結果頁面。②應用程式之間的整合,不同系統不同語言下的應用程式使用同一個介面。好了,這個時候我們可能在考慮怎麼實現這樣的功能,去網上搜尋半天感覺WebService可以實作類別似的功能,可是我們不知道什麼是WebService,於是就看看CSDN或是MSDN上提供的一些案例,看來感覺也沒什麼太深奧的東西,直接就開始建個項目,開始自己的第一個WebService項目。
VS2005—>建立網站—>ASP.NET Web 服務,在位置處寫上http://localhost/webserver,完成建立,看到AppCode下有個Service.cs檔案,看到的是一個標註了屬性[WebMethod]的一個HelloWorld函數,這個我們先屏蔽掉,然後自己寫一個列印資訊的方法:
[WebMethod]
public string PrintName(string name)
{
return "我輸入的名字是:" + name;
}
先運行看看,可以看到一個首頁面有個PrintName的連結,點擊一下,可以看到一個輸入框,輸入名字,點擊Invoke,可以看到XML文檔:
<?xml version="1.0" encoding="utf-8" ?> <string xmlns=http://localhost/webserver/>我輸入的名字是:wy</string>
現在函數是寫好了,那如何讓其他引用程式調用呢?記得應用程式中一些封裝的方法都是編譯成DLL檔案然後共用使用,這裡也可以試試,可是發現VS05中WebService不能自動產生DLL檔案,只好自己編譯了。
①開啟VS05的命令列,首先需要把.asmx檔案對應為.cs檔案:
WSDL http://ip/地址//項目名稱/*.asmx /n: 命名空間 /out 輸入檔案名稱.cs(這裡我們用PrintName.cs)
②編譯成DLL
csc /t:library /r:system.web.dll /r:system.xml.dll PrintName.cs
經過上面兩步,就可以在VS05的VC目錄下產生一個PrintName.cs檔案和一個PrintName.dll檔案,那這樣我們就可以在應用程式中調用這個DLL了。
(1)應用程式調用:建立一個應用程式,將PrintName.dll添加到引用中去。運行效果:
private NameSp.Service client;
private void btnInvoke_Click(object sender, EventArgs e)
{
client = new Service();
string output;
output = client.PrintName(this.textBox2.Text.ToString());
this.textBox1.Text = output;
}
(2)Web程式調用:建立一個網站,也同樣添加PrintName.dll,接著建立一個頁面,代碼和在上面的代碼完全一樣,效果也是一樣的。
對照著程式再去理解WebService就會容易多了。記得在上面提到了SOAP,那SOAP又是什麼呢?在運行一開始建立的Web 服務是有沒有注意網頁中列出的下面一段XML文檔
//請求POST /webserver/Service.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://localhost/webserver/PrintName"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<PrintName xmlns="http://localhost/webserver/">
<name>string</name> //參數
</PrintName>
</soap:Body>
</soap:Envelope>
//回答
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<PrintNameResponse xmlns="http://localhost/webserver/">
<PrintNameResult>string</PrintNameResult>
</PrintNameResponse>
</soap:Body>
</soap:Envelope>
上面作為請求,下面作為回答,在請求中可以看到PrintName真是函數的方法名,在回答中對應著PrintNameResult.感覺SOAP應該就是XML文檔,他將.cs檔案中的標有[WebMethod]屬性的方法轉變為了XML文檔,而在調用中又轉換為類操作對象。WebService就是完成SOAP到.NET類之間的映射。
只是簡單的根據自己理解的記錄了下來,繼續學習不斷完善!