国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET Web Service

2024-07-10 13:11:56
字體:
來源:轉載
供稿:網友

    現在internet正在不斷地發展著,在互聯網應用剛開始的時候,我們瀏覽的網頁只是靜態的,不可交互的。而現在隨著技術的日益發展,將提供給網頁瀏覽者一個可編程的web 站點。這些站點將在組織、應用、服務、驅動上更加緊密的結合在一起,這些站點將通過一些應用軟件直接連接到另一個web 站點,這些可編程的web 站點相比傳統的web站點來說,將變得更加能重復使用,也更加智能化!
  
    .net平臺給我們提供了一種運行環境,即公用語言運行環境(clr,common language runtime)。對 clr來說,它提供了一種內置機制來創建一個可編程的站點,、對于web 程序開發者和vb 程序員來說,這將是一致、熟悉的。這種模型是可以重復使用,也可以再擴展。 它包含了開放的internet標準(http, xml, soap, sdl)。以便它能被網頁瀏覽者訪問。
    asp.net 使用.asmx 文件來對web services的支持。.asmx 文件和.aspx文件一樣都屬于文本文件。它包含在.aspx文件之中,成為asp.net應用程序的一部分。
  
    下面我們將舉一個簡單的例子來介紹.asmx文件,我們還是從"hello,world"這個經典的例子說起,代碼如下:
  <!-- 文件名:webservice/sisam.asmx -->
  <%@ webservice language="vb" class="helloworld" %>
  imports system.web.services
  public class helloworld :inherits webservice
  public function <webmethod( )> sayhelloworld( ) as string
  return("hello world")
  end function
  end class
  
   說明:
  
    1.編碼最開始必須進行webservice聲明,從而定義這個文件為一個web service。而且,在同一行中設置好編程語言的類型。
  
    2.然后,引入名字空間system.web.services。注意,這個名字空間屬于最基本的元素,必須要包含它。
  
    3.接著,聲明service中的功能模塊,也就是類模塊,這里的類名叫helloworld。這個類來源于基類webservice,而且應該是public類型。
  
    4.最后,定義service的可訪問方法。在表示方法的符號前面,要設置好自定義屬性。對應于c#語言,屬性值就是[webmethod];對應于vb,就是。如果沒有設置這個屬性,那么這個方法就不能從service中訪問。一個局部應用可以使用任何的public類型的類,但是只有具備[webmethod]的類才可以通過soap被遠程地訪問。
  
    當對service的請求發生時,.asmx文件將自動地被asp.net運行環境所編譯。隨后的請求就可以由緩沖的預編譯類型對象執行。
  
    為了測試編寫好的代碼,我們需用一個支持asp.net的web服務器。假設這個web服務器的名稱叫做server1,其上有一個虛擬目錄test。請跟隨下面步驟開始測試:
  
  
    1.將代碼保存為helloworld.asmx
  
    2.放到web服務器foo的虛擬目錄bar下
  
    3.打開internet explorer5,在地址欄輸入http://server1/test/helloworld.asmx
  
    這時,我們將看到關于這個web service的公用方法-也就是那些標記為webmethod屬性的字符,并得知調用這些方法可以使用的協議,比如soap或者http get。
  
    在internet explorer的地址欄中輸入http://foo/bar/helloworld.asmx?sdl后,將產生基于服務描述語言(service description language :sdl)語法的具備相同信息的xml文件。這個sdl文件非常重要,客戶端就是使用它來訪問service。

    從客戶端進行訪問:
  
    除了允許開發者使用的創建web services的技術以外,microsoft的.net框架給客戶端提供了一套訪問并使用web services的精致且高深的工具和代碼。由于web services是基于如簡單對象訪問協議soap(simple object access protocol)和http這樣的開放協議標準的,從而,我們就可以使用這種客戶端技術使用非asp.net的web services。當然,這也需用高水平地合成asp.net web services和這種客戶端技術。
  
    sdk中有一個工具叫做webserviceutil.exe,我們可以使用它來下載一個web services的sdl描述語言,并創建表達這個service的代理類。比如,當我們輸入以下命令,就可以創建一個叫做helloworld.cs的代理類:
  
     webserviceutil /c:proxy /pa:http://somedomain.com/somefolder/helloworld.asmx?sdl 
  
    這個類看起來與前面創建的類非常相似。它包含一個方法sayhelloworld,該方法返回一個字符串。將這個代理類編譯到一個應用程序中,然后調用這個代理類的方法,結果就是:通過http,這個代理類包裝soap請求,然后接收soap編碼響應,最后匯集成為一個字符串。
  
    請看關于web service的一個客戶端例程:
  
  
    客戶端訪問的文件:clint.aspx,內容如下:
  
  
  <%@ import namespace="datatypesservice" %>
  
  <html>
  <style>
  div
  {
  font: 8pt verdana;
  background-color:cccccc;
  border-color:black;
  border-width:1;
  border-style:solid;
  padding:10,10,10,10;
  }
  
  </style>
  
  <script language="vb" runat="server">
  
  public sub page_load(sender as object, e as eventargs)
  
  dim d as datatypes = new datatypes()
  message1.innerhtml = d.sayhello()
  message1.innerhtml = message1.innerhtml & d.sayhelloname("bob")
  message3.innerhtml = message3.innerhtml & d.getmode()
  
  dim myintarray as integer() = d.getintarray()
  dim mystring as string = "contents of the array:<br>"
  
  for i = 0 to myintarray.length - 1
  mystring = mystring & myintarray(i) & "<br>"
  next
  
  message2.innerhtml = message2.innerhtml & mystring
  
  dim myorder as order = d.getorder()
  message4.innerhtml = message4.innerhtml & "<br>orderid: " & myorder.orderid
  message4.innerhtml = message4.innerhtml & "<br>price: " & myorder.price
  
  dim myorders as order() = d.getorders()
  message5.innerhtml = message5.innerhtml & "<br>orderid: " & myorders(0).orderid
  message5.innerhtml = message5.innerhtml & "<br>price: " & myorders(0).price
  
  end sub
  
  </script>
  
  <body >
  <h4>using datatypes with web services</h4>
  
  <h5>methods that return a primitive (string): </h5>
  <div id="message1" runat="server"/>
  
  <h5>methods that return an array of primitives (integers): </h5>
  <div id="message2" runat="server"/>
  
  <h5>method that returns an enum: </h5>
  <div id="message3" runat="server"/>
  
  <h5>method that returns a class/struct: </h5>
  <div id="message4" runat="server"/>
  
  <h5>method that returns an array of classes/structs: </h5>
  <div id="message5" runat="server"/>
  
  </body>
  </html>
  
  
    在客戶端程序中,我們使用<%@ import namespace="datatypesservice" %>來引入datatypesservice這個我們自定義的名字空間。然后在程序中只是調用了datatypesservice中的方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 茶陵县| 泽普县| 贺兰县| 资源县| 固安县| 长武县| 鱼台县| 香河县| 嘉定区| 翁牛特旗| 广安市| 沈丘县| 永胜县| 泾源县| 乐业县| 内黄县| 陈巴尔虎旗| 镶黄旗| 景宁| 南丹县| 高陵县| 枝江市| 龙川县| 都江堰市| 长阳| 马关县| 资源县| 奉新县| 淮南市| 齐河县| 南陵县| 大城县| 宁明县| 临邑县| 荔浦县| 西乡县| 房产| 乌审旗| 即墨市| 甘洛县| 始兴县|