在Flash中調用WS時的身分識別驗證_5:將數組傳遞到ws

來源:互聯網
上載者:User
前面我們做了個從WS中擷取資料填充Flash的DataGrid的例子。在實踐中,很多時候,我們需要把在DataGrid中修改過的資料再一次傳遞迴伺服器,在伺服器上將這些資料持久化。
在flash中,有很多的方法可以把資料傳回伺服器儲存:LoadVars,拼接xml等等,操作的過程繁瑣、不易用,還受到很多限制,使用Flash+WS的話,還是那句話,非常的方便。還是讓我們用例子來說話。
1、 修改sample2.asmx.cs,增加Web方法GetArray_4,該web方法有一個參數,數組tCar。
        [WebMethod(Description="接受用戶端傳遞過量數組")]
        public string GetArray_4(Car[] tCar){
            string tStr="";
            for (int i=0;i<tCar.Length;i++){
                tStr=tStr+";    "+tCar[i].model;
                }
            return tStr;
            }
2、 修改Flash如下:
function GetArray_4(result){
    trace("ws方法GetArray_4返回的值為:");
    trace("/////////////////////////");    
    trace(result);
    }
……
this.dbBind3_bt.onPress=function(){
    //trace(gb_main.dataProvider.length);
    var i:Number=0;
    var tCar:Array=new Array();
    tCar=gb_main.dataProvider;
    var op_8:PendingCall=myws.GetArray_4(tCar);
    op_8.onResult=GetArray_4;
    }

運行,output視窗會提示:
Error opening URL http://localhost/ws/sample2.asmx

為什麼會這樣呢?原因出在DataGrid組件的dataProvider上,你可以跟蹤一下dataProvider提供的數組,會發現dataProvider不知道為什麼,會增加一些內容資料類型未知的object,但是毫無疑問,對象數組Car[]是可以通過Flash傳遞到ws的。
下面是修改後測試通過的代碼:
/* ======================================================================

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.Collections;
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;
            }
        
        [WebMethod]
        public string[] GetArray_1(){
            string[] strArr={"喬狗","劉鵬","陳波","張成平","費明","陳剛"};
            return strArr;            
            }
            
        [WebMethod(Description="數組的調用:ArrayList")]
        public ArrayList GetArray_2(){
            ArrayList strArr=new ArrayList();
            int i=0;
            for (i=0;i<100;i++){
                strArr.Add("strArr["+i+"]");                
                }
            return strArr;
            }
            
        [WebMethod(Description="數組的調用,包含對象")]
        public Car[] GetArray_3(){
            Car HG=new Car("皇冠",2004);
            Car JM=new Car("佳美",2003);
            Car YK=new Car("雅閣",2004);
            Car BJS=new Car("畢加索",2002);
            /*ArrayList carArr=new ArrayList();
            carArr.Add(HG);
            carArr.Add(JM);
            carArr.Add(YK);
            carArr.Add(BJS);*/
            
            Car[] carArr={HG,JM,YK,BJS};
            return carArr;
            }
        
        [WebMethod(Description="接受用戶端傳遞過量數組")]
        public string GetArray_4(Car[] tCar){
            string tStr="";
            for (int i=0;i<tCar.Length;i++){
                tStr=tStr+";    "+tCar[i].model;
                }
            return tStr;
            }
        }
    
    [Serializable]
    public class Car{
        //聲明欄位model、yearBuilt;
        public string model;
        public int yearBuilt;
        
        //定義構造器
        public Car(string model,int yearBuilt){
            this.model=model;
            this.yearBuilt=yearBuilt;
            }
            
        public Car(){
            
            }
        }
        
    }
/**
   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.*;

gb_main.vScrollPolicy="off";

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);
    }

function GetArray_1(result){
    trace("ws方法GetArray_1返回的值為:");
    trace("/////////////////////////");
    for (var i=0;i<result.length;i++){
        trace(i+":"+result[i]);
        }
    }
    
function GetArray_3(result){
    var myDB:Array=result;
    gb_main.dataProvider=myDB;
    trace(gb_main.dataProvider.length);
    }

function GetArray_4(result){
    trace("ws方法GetArray_4返回的值為:");
    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;
    }
    
this.dbBind1_bt.onPress=function(){
    var op_6:PendingCall=myws.GetArray_1();
    //var op_6:PendingCall=myws.GetArray_2();
    op_6.onResult=GetArray_1;
    }
    
this.dbBind2_bt.onPress=function(){
    var op_7:PendingCall=myws.GetArray_3();
    op_7.onResult=GetArray_3;
    }
    
this.dbBind3_bt.onPress=function(){
    //trace(gb_main.dataProvider[1]);
    trace(gb_main.dataProvider.length);
    var i:Number=0;
    var tCar:Array=new Array();
    for (i=0;i<4;i++){
        tCar.push(gb_main.dataProvider[i]);
        }
    //tCar=gb_main.dataProvider;
    for (i=0;i<(tCar.length/2-1);i++){
        trace(tCar[i].model);
        }
    var op_8:PendingCall=myws.GetArray_4(tCar);
    op_8.onResult=GetArray_4;
    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.