天天看點

web service簡介

<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";  

    //}  

    /// &lt;summary&gt; 

    /// 判斷一個數是不是質數  

    /// &lt;/summary&gt; 

    /// &lt;param name="number"&gt;要判斷的數&lt;/param&gt; 

    /// &lt;returns&gt;傳回結果&lt;/returns&gt; 

    [WebMethod(Description = "判斷一個數是不是質數")] //聲明此函數為web service方法,可以供外 界調用  

    public string IsPrimeNumber(int number)  

    {   

        // 以下為算法,貌似不是最優的  

        string value = "";  

        if (number &lt;= 0)  

        {  

            value = number.ToString() + "is not prime number";  

            return value;  

        }  

        else  

            for (int i = 2; i &lt; number / 2; i++)  

            {  

                if (number % i == 0)  

                {  

                    value = number.ToString() + "is not prime number";  

                    return value;  

                }  

            }  

            value = number.ToString() + "is prime number";  

&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="show.aspx.cs" Inherits="show" %&gt; 

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"&gt; 

&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt; 

&lt;head runat="server"&gt; 

    &lt;title&gt;無标題頁&lt;/title&gt; 

&lt;/head&gt; 

&lt;body&gt; 

    &lt;form id="form1" runat="server"&gt; 

    &lt;div&gt; 

        請輸入要判斷的整數:&lt;asp:TextBox ID="TextBox1" runat="server" Width="98px"&gt;&lt;/asp:TextBox&gt;&lt;br /&gt; 

        &lt;asp:Button ID="Button1" runat="server" Text="确定 " OnClick="Button1_Click" /&gt; &lt;br /&gt; 

        &lt;asp:Label ID="Label1" runat="server"&gt;&lt;/asp:Label&gt;&lt;/div&gt; 

    &lt;/form&gt; 

&lt;/body&gt; 

&lt;/html&gt; 

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