在ws和flash用戶端之間進行調用,最令人煩惱的莫過於兩邊同時支援的資料類型太少,下面,我們擴充一下前面的例子,看一看他們之間都可以同時使用那些資料類型。
首先我們來看一看Number類型:
XML 架構類型支援的數字簡單類型很多,在flash中都作為Number類型處理。下面我們對sample2.asmx.cs進行小小的修改:增加一個方法IncAB,如下:
[WebMethod]
public int IncAB(int A,int B){
return A+B;
}此圖片僅顯示局部,請點擊查看完整圖片
在flash的web服務視窗中可以查看IncAB方法的參數和傳回值的類型都是整型。
對wsSample_2.as也作一點小小的修改:
function IncAB(result){
trace("ws方法IncAB返回的值為:");
trace("///////////////////////////");
trace(result);
}
……
this.incAB_bt.onPress=function(){
var a:Number=34;
var b:Number=56;
var op_2:PendingCall=myws.IncAB(a,b);
op_2.onResult=IncAB;
}
測試一下,output視窗會返回
ws方法IncAB返回的值為:
///////////////////////////
90
如果我們將a和b的值分別設定為一個小數了?比如:56.4之類?output將返回
Error opening URL http://localhost/ws/sample2.asmx
如果你想讓提示更加友好,web服務類提供了容錯處理,但是不是我們這裡要討論的內容,後面再說。
對於其他的數字簡單類型,都和這個差不多,可以自己嘗試一下。
下面是擴充後的sample2.asmx.cs檔案,添加了IncAB、GetNow、PassDate、PassBool這四個web方法:
/* ======================================================================
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;
}
[WebMethod]
public int IncAB(int A,int B){
return A+B;
}
[WebMethod]
public DateTime GetNow(){
return DateTime.Now;
}
[WebMethod]
public DateTime PassDate(DateTime dt){
return dt;
}
[WebMethod]
public bool PassBool(bool bl){
return bl;
}
}
}
擴充後的wsSample_2.as:
/**
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);
}
function IncAB(result){
trace("ws方法IncAB返回的值為:");
trace("///////////////////////////");
trace(result);
}
function GetNow(result){
trace("ws方法GetNow返回的值為:");
trace("/////////////////////////");
trace(result);
}
function PassDate(result){
trace("ws方法PassDate返回的值為:");
trace("/////////////////////////");
trace(result);
}
function PassBool(result){
trace("ws方法PassBool返回的值為:");
trace("/////////////////////////");
trace(result);
}
this.GetUN_bt.onPress=function(){
var op_1:PendingCall=myws.GetUserName("喬狗!!");
op_1.onResult=GetUserName;
}
this.incAB_bt.onPress=function(){
var a:Number=34;
var b:Number=56;
var op_2:PendingCall=myws.IncAB(a,b);
op_2.onResult=IncAB;
}
this.GetNow_bt.onPress=function(){
var op_3:PendingCall=myws.GetNow();
op_3.onResult=GetNow;
}
this.PassDT_bt.onPress=function(){
var dt:Date=new Date (77, 4, 2);
var op_4:PendingCall=myws.PassDate(dt);
op_4.onResult=PassDate;
}
this.PassBool_bt.onPress=function(){
var bl:Boolean=true;
var op_5:PendingCall=myws.PassBool(bl);
op_5.onResult=PassBool;
}
例子很簡單,不一一注釋了。