ASP.NET 기반의 플래시 객체 직렬화 ASP.NET
2009.10.29 19:44 EDIT
액션스크립트 상의 객체를 ASP.NET 페이지에 저장해 보자.
먼저 저장을 수행할 액션스크립트 상의 코드는 다음과 같다.
private function serialize():void{
//직렬화에 필요한 클래스를 등록한다.
registerClassAlias("org.manalith.MyClass",MyClass);
//저장을 수행할 ASP.NET 페이지의 URL을 지정한다.
var url:String = "http://localhost:56746/SaveClass.ashx";
//직렬화 할 객체 생성
var MY_OBJECT:MyClass = new MyClass();
var arr:ByteArray = new ByteArray();
arr.writeObject(MY_OBJECT);
arr.position = 0;
arr.compress();
var req:URLRequest = new URLRequest(url);
req.method = URLRequestMethod.POST;
req.data = arr;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(req);
}
저장을 수행할 ASP.NET 페이지(SaveClass.ashx) 코드는 다음과 같다.
public class SavePage : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
byte[] b = context.Request.BinaryRead(context.Request.TotalBytes);
string path = context.Server.MapPath("Upload/savedClass.dat");
//기존에 같은 이름의 파일이 있으면 지운다.
if (File.Exists(path))
{
File.Delete(path);
}
using (FileStream fs = File.Create(path))
{
for (int i = 0; i < b.Length; i++)
{
fs.WriteByte(b[i]);
}
}
context.Response.ContentType = "text/plain";
context.Response.Write("저장이 완료되었습니다.");
}
public bool IsReusable
{
get
{
return true;
}
}
}
실행해서 myClass.dat 파일로 저장된 내용을 확인해 보자. 잘 저장이 되었으면 이제 불러오기를 할 차례다.
먼저 데이터를 불러 오는 ASP.NET 페이지(LoadClass.ashx)는 다음과 같다.
public class LoadPage : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string path = context.Server.MapPath("Upload/savedClass.dat");
if (File.Exists(path))
{
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "savedClass.dat");
context.Response.ContentType = "application/octet-stream";
context.Response.WriteFile(path);
}
else
{
context.Response.ContentType = "text/plain";
context.Response.Write("해당되는 데이터가 없습니다.");
}
}
public bool IsReusable
{
get
{
return true;
}
}
}
액션 스크립트의 다음과 같은 코드로 불러온다.
private function deserialize():void{
//역직렬화 시에도 클래스 등록이 필요하다.
registerClassAlias("org.manalith.MyClass",MyClass);
//불러오는 페이지의 뒤에는 매번 새로운 내용을 가져오기 위해 임의의 파라미터를 붙인다.
var url:String = "http://localhost:56746/LoadClass.ashx?uniq=" + new Date().getTime(), deserialize_complete);
var req:URLRequest = new URLRequest(url);
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(req);
}
private function complateHandler(evt:Event):void{
var arr:ByteArray = URLLoader(evt.target).data as ByteArray;
if(arr != null){
arr.uncompress();
var MY_OBJECT:MyClass = arr.readObject() as MyClass;
Alert.show(MY_OBJECT.myId);
}
}
이 글은 아래 문서의 도움을 받았다. 원문이 PHP 기반이라 굳이 ASP.NET으로 만들었다.
Serializing Flash Objects over HTTP - Part 2http://www.roboncode.com/articles/187
- Tag :
- ActionScript, Flex, Flash, 플렉스, 플래시, ASP.NET, 직렬화, serialize, serialization