下面讓我們來瞭解一下flash中的Web服務類。
Web 服務類存在於mx.services包中。為了能夠在運行時使用 Web 服務類,WebServiceClasses 組件必須位於 FLA 檔案的庫中。Web服務類包含四個關鍵的類:WebService 類、PendingCall 類、Log 類、SOAPCall 類。其中,WebService 類、PendingCall 類與ws調用直接相關。通過WebService 類的構造器可以在Flash Player中返回指定WebService對象。如下面所示
Var myWebServiceObject:WebService = new WebService(wsdlURI);
參數wsdlURI指向引用的Web服務地址,比如“http://localhost/ws/test.asmx?wsdl”然後使用PendingCall 類型的回調對象,在PendingCall回調對象的onResult方法中處理ws中指定方法的結果。比如:
var op_1:PendingCall=myws. hello ();
op_1.onResult= hello;
下面我們還是用一個例子來看一看Web服務類是怎麼工作的。
說明:這個例子示範了在ws接受來自用戶端的數字簡單類型、日期和時間簡單類型、bool類型、名稱和字串簡單類型以及Array型別參數並返值。
首先還是構造伺服器端的ws。
開啟一個文字檔,聲明一個WebService 處理指示
1、 如下:
<%@ WebService Language="c#" Codebehind="sample2.asmx.cs" Class="wsLearn.sample2" %>
命名為:sample2.asmx,放到虛擬目錄http://localhost/ws/下。
Language 屬性指示開發 XML Web services 所使用的程式設計語言。可以使用任何與 .NET 相容的語言(如 Visual Basic .NET 或 Visual C#)來建立 XML Web services。與 .asmx 頁關聯的支援代碼檔案由 Codebehind 屬性來指示。Class 屬性指示支援代碼檔案中用來實現 XML Web services 功能的類。
2、 建立一個cs文檔:寫入如下代碼:
/* ======================================================================
C# Source File -- Created with SAPIEN Technologies Primalcode 3.0
NAME: sample2.asmx.cs
AUTHOR: JimLee , Dxl School
DATE : 2004-10-7
COMMENT: 這個例子示範了在ws接受來自用戶端的數字簡單類型、日期和時間簡單類
型、bool類型、名稱和字串簡單類型以及Array型別參數並返值。
====================================================================== */
using System;
using System.Web;
using System.Web.Services;
namespace wsLearn{
[WebService(Namespace="http://www.dxlschool.com/ws/",Description="例2,示範ws方法的傳值",Name="s2") ]
public class sample2:System.Web.Services.WebService{
public sample2(){
//
}
[WebMethod]
public string GetUserName(string tName){
return "你好,"+tName;
}
}
}
注意下列幾處代碼:
[WebService(Namespace="http://www.dxlschool.com/ws/",Description="例2,示範ws方法的傳值",Name="s2") ]
WebService 屬性提供以下屬性:
Description - 此屬性的值包含描述性訊息,此訊息將在 XML Web services 的說明檔案(例如服務說明和服務協助頁)產生後顯示給 XML Web services 的潛在使用者。
Name - 此屬性的值包含 XML Web services 的名稱。預設情況下,該值是實現 XML Web services 的類的名稱。Name 屬性標識 XML Web services 的 XML 限定名稱的本地部分。Name 屬性也用於在服務協助頁上顯示 XML Web services 的名稱。
Namespace - 此屬性的值包含 XML Web services 的預設命名空間。XML 命名空間提供了一種在 XML 文檔中建立名稱的方法,該名稱可由統一資源識別項 (URI) 標識。使用 XML 命名空間,可以唯一標識 XML 文檔中的元素或屬性。因而,在 XML Web services 的服務說明中,Namespace 被用作與 XML Web services 直接相關的 XML 元素的預設命名空間。如果不指定命名空間,就使用預設命名空間http://tempuri.org/
public class sample2:System.Web.Services.WebService
類sample2繼承自基類System.Web.Services.WebService,它提供了直接存取常見 ASP.NET 對象(如應用程式和工作階段狀態的對象)的許可權。需要注意的是該類必須是公用的,並且必須有一個公用的預設建構函式(不帶參數的建構函式)。
[WebMethod]
通過在 Public 方法聲明之前放置 WebMethod 屬性可以指定在 XML Web services中可用的方法。Private 方法不能充當 XML Web services 的進入點,儘管它們可以採用相同的類並且 XML Web services 代碼可以調用它們。WebMethod 屬性必須應用到可用作 XML Web services 一部分的每種公用方法中。
3、 將上面的cs檔案命名為sample2.asmx.cs,用csc /t:library $File$將其編譯為sample2.asmx.dll,在虛擬目錄http://localhost/ws/下建立子目錄bin,將sample2.asmx.dll複製到http://localhost/ws/bin/下
下面就可以在瀏覽器中測試你的ws了:http://localhost/ws/sample2.asmx
或者http://localhost/ws/sample2.asmx ?wsdl
下面讓我們在flash中調用這個ws(現在它只包含一個方法GetUserName)。
1、 拖動WebSessionClasses組件到舞台上,將Web服務類包匯入Fla,刪除舞台上的WebSessionClasses組件的執行個體。
2、 拖動一個Button組件到舞台上,命名為:GetUN_bt,設定label屬性為:“GetUserName”;
3、 添加如下動作指令碼:
/**
ActionScript Class File -- Created with SAPIEN Technologies PrimalScript 3.0
@class wsSample_2
@package wsSample_2.as
@author JimLee
@codehint
@example
@tooltip
*/
import mx.services.*;
var myws:WebService=new WebService("http://localhost/ws/sample2.asmx ?wsdl");
function GetUserName(result){
trace("ws返回的值為:");
trace("///////////////////////////");
trace(result);
}
this.GetUN_bt.onPress=function(){
var op_1:PendingCall=myws.GetUserName("喬狗!!");
op_1.onResult=GetUserName;
}
赫赫,一點新東西都沒有,只不過在PendingCall回調的方法中加入了參數值"喬狗!!"而已,就好像使用本地方法一樣爽耶!
下面,你又可以測試一下了。