flash与通过xml与asp.net沟通

1、xpath4as
    xpath4as2是xfactorstudio提供的一个as2扩展类,支持xpth1.0。
    到http://www.xfactorstudio.com/ActionScript/AS2/XPath/XPath4AS2.zip下载xpath4as2的最新版本,解压后放到\Macromedia\Flash 8\zh_cn\First Run\Classes下,重新启动flash即可.
    xfactorstudio还提供了一个XmlDataSet类,可以提高处理效率。
    下载:http://www.xfactorstudio.com/Actionscript/AS2/XmlDataSet/XmlDataSet.zip
    
2、flash中的as:
     flash的sendAndLoad方法很有意思,他将传送的xml数据作为一个form请求发送出去。例如下面发送的xml片断:
<login methodName=\"login\" username=\"Admin\" password=\"111111\" />
和下面这样的请求是一样的:
Request.Form.allKeys[0]="login methodName";
Request.Form[0].toString=\"login\" username=\"Admin\" password=\"111111\";
也就是在form中提交了一个名为login methodName的键值对。

XPathAxes.stringValue是一个静态方法,用来获得指定的node类型数组的所有文本值。
XPath.selectNodes也是一个静态方法,有两个参数,参数1指定了xpath查询的内容(xmlNode),参数2是一个xpth查询字符串,该方法返回了符合指定条件的node数组。

import com.xfactorstudio.xml.xpath.*;
var targetURL:String="http://localhost/xxir/WebForm.aspx";
XML.prototype.ignoreWhite = true;

var AXML:XML = new XML();
AXML.onLoad =AXMLOnLoad;
function AXMLOnLoad(success:Boolean) {
    if (success) {
        var nd=XPathAxes.stringValue(XPath.selectNodes(this,"/adminOP/UserName")[0]);
        trace(nd);
        } else {
        trace("connectionFailed");
    }
}

this.login_btn.onPress=function(){
    var QXML:XML = new XML();
    // 创建要发送到服务器的 XML 格式的数据
    var QEmn:XMLNode = QXML.createElement("QParam");
    QEmn.attributes.methodName="login";
    QEmn.attributes.username = "Admin";
    QEmn.attributes.password = "11111";
    QXML.appendChild(QEmn);
    // 将 XML 格式的数据发送到服务器
    QXML.sendAndLoad(targetURL, AXML);
    }

上面的代码很常规,发送的请求是这样的:
<QParam password="11111" username="Admin" methodName="login" />
获得的返回值将是这样的:
<?xml version="1.0"?>
    <adminOP xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <ID>
        1
      </ID>
      <AdminName>
        admin
      </AdminName>
      <UserName>
        admin
      </UserName>
      <Password>
        111111
      </Password>
      <Purview>
        1
      </Purview>
      <LastLoginIP>
        127.0.0.1
      </LastLoginIP>
      <LastLoginTime>
        2005-10-10T07:22:22.0000000+08:00
      </LastLoginTime>
      <LastLogoutTime>
        2005-10-10T08:22:00.0000000+08:00
      </LastLogoutTime>
      <LoginTimes>
        2
      </LoginTimes>
      <RndPassword>
        11111ddff
      </RndPassword>
      <EnableMultiLogin>
        false
      </EnableMultiLogin>
      <AdminPurview_Article>
        0
      </AdminPurview_Article>
      <AdminPurview_Soft>
        0
      </AdminPurview_Soft>
      <AdminPurview_Photo>
        0
      </AdminPurview_Photo>
      <AdminPurview_Shop>
        0
      </AdminPurview_Shop>
      <AdminPurview_Others>
        0-0-0
      </AdminPurview_Others>
      <arrClass_View>
        0-0-0
      </arrClass_View>
      <arrClass_Input>
        0-0-0
      </arrClass_Input>
      <arrClass_Check>
        0-0-0
      </arrClass_Check>
      <arrClass_Manage>
        0-0-0
      </arrClass_Manage>
    </adminOP>


3、asp.net处理请求和回发
    首先将处理请求,返回一个XmlNode类型的值,如下:
           private XmlNode getRequestXML(){
            int vals = Request.TotalBytes;
            byte[] bytes = Request.BinaryRead(vals);
            string strContent = System.Text.Encoding.UTF8.GetString(bytes);
            XmlDocument doc=new XmlDocument();
            doc.LoadXml(strContent);
            return doc.FirstChild;    
            }

    然后根据请求,处理回发,这里使用了一个序列化的类adminOP,返回XmlDocument,代码如下:
             private XmlDocument adminlogin(XmlNode xnd){
            adminOP OP=new adminOP(xnd.Attributes["username"].Value);
            XmlSerializer ops = new XmlSerializer(typeof(adminOP));
            System.IO.MemoryStream bs=new MemoryStream(100);
            ops.Serialize(bs,OP);
            bs.Position=0;
            XmlDocument doc=new XmlDocument(bs);
            doc.Load(xtr);
            return doc;
        }
      将获得序列化后的adminOP类的实例写入Response:
                 Response.Write(adminlogin(getRequestXML()).OuterXml);
            this.Response.Flush();
     最后注意在@ Page中加入contentType="text/xml"指示。

     aspx.cs的代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace akscnClaw
{
    public class WebForm : System.Web.UI.Page
    {
        private void Page_Load(object sender, System.EventArgs e)
        {
            Response.Write(adminlogin(getRequestXML()).OuterXml);
            this.Response.Flush();            
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
        
        private void InitializeComponent()
        {    
            this.Load += new System.EventHandler(this.Page_Load);
        }
        
        //获得XML格式的请求
        private XmlNode getRequestXML(){
            int vals = Request.TotalBytes;
            byte[] bytes = Request.BinaryRead(vals);
            string strContent = System.Text.Encoding.UTF8.GetString(bytes);
            XmlDocument doc=new XmlDocument();
            doc.LoadXml(strContent);
            return doc.FirstChild;    
            }
            
        //序列化输出结果
        private XmlDocument adminlogin(XmlNode xnd){
            adminOP OP=new adminOP(xnd.Attributes["username"].Value);
            XmlSerializer ops = new XmlSerializer(typeof(adminOP));
            System.IO.MemoryStream bs=new MemoryStream(100);
            ops.Serialize(bs,OP);
            bs.Position=0;
            XmlDocument doc=new XmlDocument(bs);
            doc.Load(xtr);
            return doc;
        }
    }
}

你可能感兴趣的:(asp.net)