您的位置:首页 > 编程语言 > ASP

flash与通过xml与asp.net沟通

2006-08-20 01:26 204 查看
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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: