Asp.NetWeb服務學習

来源: http://www.cnblogs.com/scottckt/archive/2008/06/04/1213934.html 作者:网友
 

3、名詞:
    RPC
Remote Procedure Calls遠程過程調用
    WSDL
Web Service Description LanguageWeb服務描述語言
      UDDIUniversal DescriptionDiscoveryand Integration
 

4SOAP消息
    是客戶機和服務器之間通信的基本單元。
SOAP消息包含一個SOAP封套,該封套把所有的SOAP消息封裝在一個塊中。SOAP封套本身由兩部分組成: SOAP標題和SOAP體。標題是可選的,SOA體是必須的。如下圖:
 

 

 
<!--[if mso & !supportInlineShapes & supportFields]-->
 

5、處理Web服務的命名空間
.Net Framework中有三個命名空間可以處理Web服務:
    System.Web.Services命名空間中的類用於創建Web服務。
    System.Web.Services.Description:通過WSDL描述Web服務。
    System.Web.Services.Protocols:創建SOAP請求和響應。

6、創建Asp.net Web服務方法:
    6.1 File->New->Web Site,選擇 “Asp.net Web服務”。
       6.2  修改Service1.cs中的代碼,加入自己需要的方法ReverseString()。代碼如下:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
/*
 * WebService屬性:WebService類用屬性WebService來標記。
 * WebServiceBinding屬性:用於把Web服務標記為可交互操作的一致性級別。
 */
[WebService(Namespace = "http://192.168.1.79/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service()
    {
        //如果使用設計的元件,請取消註解下行程式碼
        //InitializeComponent();        
    }
    /*
     * 加入WebMethod才會在服務頁面中顯示
     * WebMethod屬性:使用WebMethod屬性標記的方法可從WebMethod中調用,並可以被客戶機上調用。
     * 沒有標記的,則不能被客戶機調用。使用屬性類WebMehodAttribute,方法就可以在遠程客戶機上調用,
     * 並可以定義是否緩存響應時間有多長,會話狀態是否與指定的參數一起存儲。     *
     */
    [WebMethod]
    public string ReverseString(string message) //自己添加的方法。獲得倒序后的值
    {
        char[] arr = message.ToCharArray();
        //顛倒順序
        Array.Reverse(arr);
        message = new string(arr);
        return message;
    }
}    這樣一個「字符倒序」的服務就做好了。
   6.3 運行服務:在頁面上會看到自己添加的ReverseString方法。單擊ReverseString方法。在Value中輸入字符值「ab」,單擊「叫用」,在彈出的頁頁中會得到值「ba」。如下。
  <?xml version="1.0" encoding="utf-8" ?>
  <string xmlns="http://192.168.1.79/">ba</string>
 
  6.4說明:
      生成文件:
          Service.asmx:保存Web服務類。所有Web服務都用.asmx擴展名來標識。
          Service1.cs:后台代碼。放在App_Code目錄下,便於使用。
       [WebService(Namespace = "http://192.168.1.79/")]中的Namespace的內容主要用於唯一標識XML元素,其中的鏈接不一定存在。
 
 
7、創建客端程序:
    7.1 客戶程序說明:
          要調用一個方法,客戶機必須創建一個與Web服務所在的服務器之間的連接,並發送一個Http請求,傳送一個SOAP消息。方法調用必須轉換為SOAP消息。我們創建時,這部分內容System.Web.Services.Protocols.SoapHttpClientProtocol類會在后台自動完成。
          如果不使用SoaHttpClientProtocol類,可以使用其它代理程序類,HttpGetClientProtocol和httpPostClientProtocol僅執行簡單的HTTPGET或HTTP Post請求,沒有SOAP調用的系統開銷。HttpGetClientProtocol和httpPostClientProtocol的缺點是其它的Web服務不支持它,且只能發送簡單數據。
  7.2創建方法:
     7.2.1 新建一個應用程序,加入兩個TextBox和一個按鍵。
     7.2.2 選擇項目,Project->Add Web Reference。加入參考。在Url中輸入的剛剛服務啟動后的Http地址:「http://localhost:4587/WebServiceSample/Service.asmx」。修改參考名稱。單擊「加入參考」。此時,方案中會加自動加入一些內容:其中Web References為加入的Web參考。
     7.2.3 在需要調用的地方加入代碼(下邊為按鈕的代碼):

        void btnCommit_Click(object sender, EventArgs e)
        {
            //實例化代理為類
            WebServicesSample.Service ws = new ServiceSimpleClient.WebServicesSample.Service();
            //把SOAP消息傳送給服務器,以調用web服務
            textBox2.Text = ws.ReverseString(textBox1.Text);
        }
    7.2.4 這樣運行程序后,在Textbox1中輸入內容,單擊按鈕,就會在TextBox2中倒序顯示
    7.2.5 說明:在顯示所有文件后,在Web References\"Web參考名"\Reference.map"有一個Reference.cs,此為代理程序的源碼。此為系統自動生成的代碼。
    其中需要說明地方列出如下:

    /*
     * Service類派生於SoapHttpClientProtocol類
     * 類System.Web.Services.Protocols.SoapHttpClientProtocol是客戶端代理程序的基類。
     * Invoke()方法轉換參數,建立一個SOAP消息,發送給Web服務。調用哪個Web服務由 Url屬性確定。
     * SoaHttpClientprotocol類也支持使用Begininvoke()和EndInvoke()方法的異步調用。
     * WebServiceBindingAttribute屬性:把綁定值設置為Web服務
     */
    /// <remarks/>   
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.1433")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name = "ServiceSoap",
Namespace = "http://192.168.1.79/")]
    public partial class Service : System.Web.Services.Protocols.SoapHttpClientProtocol
    {
    }

        /// <remarks/>
        public Service()
        {
            //屬性Url設置為服務。
            this.Url = global::ServiceSimpleClient.Properties.Settings.Default.
ServiceSimpleClient_WebServicesSample_Service;
        }

        //ReverseString的客戶端
        /// <remarks/>
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://192.168.1.79/ReverseString",
RequestNamespace = "http://192.168.1.79/", ResponseNamespace = "http://192.168.1.79/",
Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.
Protocols.SoapParameterStyle.Wrapped)]
        public string ReverseString(string message)
        {
            //調用SoapHttpClientProtocol.Invoke()方法,建立一個SOAP消息,發送給Web服務。
            object[] results = this.Invoke("ReverseString", new object[] {
                        message});
            return ((string)(results[0]));
        }
 
 

相关文档推荐

DeepSeek 搞钱指令库.PDF

1743659940  0.95MB 22页 积分5

T GDWJ 016 公立医院全面预算管理工作指南.PDF

1743652887  1.62MB 79页 积分6

人工智能技术发展与应用实践.PDF

1743586449 史树明 5.88MB 35页 积分6

DeepSeek行业应用案例集解锁.PDF

1743586338  5.03MB 152页 积分6

2025AI大模型产业市场前景及投资研究报告.PDF

1743586288  4.47MB 22页 积分0

AI韧性AI安全的革命性基准模型.PDF

1743586206  1.91MB 38页 积分4

Deepseek大模型生态报告.PDF

1743586174 赛迪 1.26MB 149页 积分6

DeepSeek在金融银行的应用方案.PDF

1743586138  1.12MB 146页 积分6

AI为中心的数字化转型战略理解与落地安排.PDF

1743586083 侯宏 1.42MB 16页 积分5

深度解读 DeepSeek 部署、使用、安全.PDF

1743586019 天津大学 5.47MB 46页 积分6

相关文章推荐