<b>什麼是Web Service?</b>
Web Service主要是為了使原來各孤立的站點之間的資訊能夠互相通信、共享而提出的一種接口。 Web Service所使用的是Internet上統一、開放的标準,如HTTP、XML、SOAP(簡單對象通路協定)、WSDL等,是以Web Service可以在任何支援這些标準的環境(Windows,Linux)中使用。注:SOAP協定(Simple Object Access Protocal,簡單對象通路協定),它是一個用于分散和分布式環境下網絡資訊交換的基于XML的通訊協定。在此協定下,軟體元件或應用程式能夠通過标準的HTTP協定進行通訊。它的設計目标就是簡單性和擴充性,這有助于大量異構程式和平台之間的互操作性,進而使存在的應用程式能夠被廣泛的使用者通路。
Web Service是建構網際網路分布式系統的基本部件。Web Services 正成為企業應用內建(Enterprise Application Integration)的有效平台。你可以使用網際網路中提供的Web Service建構應用程式,而不必考慮這些Web Service是怎樣運作的。
<b>Web Service </b><b>三個基本技術</b>
Web Service通過标準通信協定,在網際網路上釋出有用的程式子產品(以服務的方式),目前大部分是用SOAP來作通信協定。
Web Service提供一份詳細的接口說明書,來幫助使用者建構應用程式,這個接口說明書叫作WSDL(Web Service Description Language)。
通常已釋出的Web Service要注冊到管理伺服器,這樣便于使用者查詢和使用。這個是通過UDDI(Universal Discovery Description and Integration)來完成的。
<b>為什麼要用Web Service?</b>
Web Servcie最主要的優點是,使用不同程式和在不同系統平台上開發出來的程式,都可以互相通信。現在很多人在問:“不是CORBA和DCE也有那些優點嗎?跟它們有什麼不同呢?”。第一個不同點是,SOAP作為Web Service的基本通信協定,比它們簡單地多,是以投入和使用的代價也是小的。現在不僅有很多大公司釋出的Web Service,也有個人釋出的。另一個不同點是,Web Service使用标準的網際網路協定-XML、HTTP和TCP/IP。很多公司已經從實踐當中對這些協定積累了豐富的經驗,是以相比CORBA和DCE要交的學費要少地多。
如果把現有的應用程式以Web Service部件形式釋出,可以幫助其他的公司(人)構件功能強大的應用程式。舉個例子,你要開發一個采購系統,可以自動地獲得供應商的報價,而且可以實時追蹤送貨過程。如果供應商已經釋出了報價和送貨這兩個Web Service,那麼你就可以直接使用它們,而不必自己開發這些功能了。
在未來,會出現更有趣的Web Service(現在做不到的),來幫助我們建構應用程式。
<b>SOAP</b>
SOAP是Web Service的基本通信協定。因為SOAP與DCOM和CORBA在概念上有相同之處,是以很多人在問:“SOAP是怎樣激活對象的?”或“SOAP在使用什麼命名服務(Naming Service)?”。或許在執行SOAP的過程當中會用到這些,但這些并不在SOAP規範要考慮的範疇之内。SOAP隻是定義SOAP消息的XML格式(XML Format),如果你用一對SOAP标記(SOAP Elements)把XML文檔括起來,那麼這個就是一個SOAP消息,這不是很簡單嗎?
SOAP規範還定義了怎樣用XML來描述程式資料(Program Data),怎樣執行RPC(Remote Procedure Call)。這些可選的規範是為了建構RPC-style的應用程式(用戶端SOAP消息包含函數名和在函數中用到的參數,而伺服器端SOAP消息包含執行函數之後的結果)。大多數SOAP解決方案都支援RPC-style應用程式,因為很多程式員已對DCOM或CORBA熟悉。SOAP還支援Document-style應用程式(SOAP消息隻包含XML文本資訊)。Document-style應用程式有很好的靈活性,是以很多用RPC很難建構的Web Service用這種方式建構。
最後SOAP規範還定義了HTTP消息是怎樣傳輸SOAP消息的。這并不代表SOAP隻能用HTTP來作為傳輸協定,MSMQ、SMTP、TCP/IP都可以做SOAP的傳輸協定。
很多大公司根據SOAP規範,都開發出了自己的SOAP解決方案。這些解決方案都是相對于某種語言。比如說Microsoft SOAP toolkit2.0把COM函數轉換成SOAP消息,而Apache toolkit把JAVA函數轉換成SOAP消息。這樣難免帶來一些相容性問題。
現在SOAP的很多另人矚目的特性已成為現實(SOAP已經運作于不同的硬體和軟體平台),而且有70多個解決方案。之是以SOAP被人們所愛戴,是因為SOAP比其他同類技術(CORBA、DCE)簡單易用。
安全性對于應用程式來說是很重要的。那麼SOAP的安全性如何呢?對于把HTTP作為傳輸協定的SOAP來說是沒有問題的,因為HTTP協定已經有很好的安全構架。那麼用其他傳輸協定會出現安全問題嗎?不是的,你不必擔心,因為已經有這方面的規範了。
<b>WSDL</b>
WSDL是一種XML文檔,它定義SOAP消息和這些消息是怎樣交換的。IDL(Interface Description Language)是用于COM和CORBA的,WSDL是用于SOAP的。WSDL是一種XML文檔,是以我們可以閱讀和編輯,但很多時候是用工具來建立、由程式來閱讀。
舉個例子,你要使用供應商的Web Service建構應用程式。你可以向供應商索取使用Web Service的範例,然後按照範例來建構應用程式。這樣可能出現意料不到的錯誤,比如,你在程式中使用的客戶代碼的資料類型是integer,而供應商使用的資料類型是string.。WSDL詳細定義用戶端消息的格式,需要什麼樣的參數,這樣可以避免不必要的錯誤。
U<b>DDI</b>
UDDI可以比喻成電話本,電話本裡記錄的是電話資訊,而UDDI記錄的是Web Service資訊。你可以不把Web Service注冊到UDDI。但如果要讓全球的人知道你的Web Service,最好還是注冊到UDDI。
UDDI目錄說明檔案也是一個XML文檔,它包括三個部分。“白頁(White Paper)”說明提供Web Service的公司(人)資訊,比如說名稱、位址和聯系方式等等。“黃頁(Yellow Paper)”說明UDDI目錄的分類,比如說金融、服務和印刷等等。“綠頁(green Paper)”說明接口(Web Service 提供的)的詳細資訊。
UDDI提供多種查詢方式,來幫助你找到需要的Web Service。如果你查詢與财務有關的Web Service,那麼UDDI會提供詳細的資訊。
代碼
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http://127.0.0.1/")] //調用此web service的位址
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {
//如果使用設計的元件,請取消注釋以下行
//InitializeComponent();
}
//[WebMethod]
//public string HelloWorld() {
// return "Hello World";
//}
/// <summary>
/// 判斷一個數是不是質數
/// </summary>
/// <param name="number">要判斷的數</param>
/// <returns>傳回結果</returns>
[WebMethod(Description = "判斷一個數是不是質數")] //聲明此函數為web service方法,可以供外 界調用
public string IsPrimeNumber(int number)
{
// 以下為算法,貌似不是最優的
string value = "";
if (number <= 0)
{
value = number.ToString() + "is not prime number";
return value;
}
else
for (int i = 2; i < number / 2; i++)
{
if (number % i == 0)
{
value = number.ToString() + "is not prime number";
return value;
}
}
value = number.ToString() + "is prime number";
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="show.aspx.cs" Inherits="show" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無标題頁</title>
</head>
<body>
<form id="form1" runat="server">
<div>
請輸入要判斷的整數:<asp:TextBox ID="TextBox1" runat="server" Width="98px"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="确定 " OnClick="Button1_Click" /> <br />
<asp:Label ID="Label1" runat="server"></asp:Label></div>
</form>
</body>
</html>
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class show : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
{
protected void Button1_Click(object sender, EventArgs e)
int number = Convert.ToInt32(TextBox1.Text); //擷取文本框的值,并轉化 為int型
WebReference.Service se = new WebReference.Service(); //執行個體化要調用的 webservice對象
Label1.Text = se.IsPrimeNumber(number); //調用webservice的函數,輸出結 果
本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1079262