Передача ValueObject’ов из FluorineFx во Flash CS3
WD479 | Апрель 23, 2008
Небольшой пример передачи типизированного объекта от сервера (.NET) во Flash CS3 используя FluorineFx.
Информация по теме:
Общая информация по FluorineFx и Flash Remoting
Сравнение WebORB-vs-FluorineFx
Создайте ValueObjects во флэше и на серверной стороне.
ActionScript 3.0:
{
public class ActivityVO
{
public function ActivityVO()
{
}
private var activitySubject:String;
private var activityEvent:String;
public function get ActivitySubject():String
{
return activitySubject;
}
public function set ActivitySubject(value:String):void
{
activitySubject = value;
}
public function get ActivityEvent():String
{
return activityEvent;
}
public function set ActivityEvent(value:String):void
{
activityEvent = value;
}
}
}
.NET (C#):
{
public class ActivityVO
{
private string activitySubject;
public string ActivitySubject
{
get { return activitySubject; }
set { activitySubject = value; }
}
private string activityEvent;
public string ActivityEvent
{
get { return activityEvent; }
set { activityEvent = value; }
}
}
}
.NET приложение должно содержать следующий код:
{
ActivityVO activityTest = new ActivityVO();
activityTest.ActivityEvent = "test event";
activityTest.ActivitySubject = "test subject";
return activityTest;
}
public Array GetActivities()
{
ArrayList list = new ArrayList();
ActivityVO activityTest = new ActivityVO();
activityTest.ActivityEvent = "test event";
activityTest.ActivitySubject = "test subject";
list.Add(activityTest);
string query = "SELECT * FROM Activities";
using (SqlConnection connection = new SqlConnection(connString))
{
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
ActivityVO activity = new ActivityVO();
if (!reader.IsDBNull(reader.GetOrdinal("Subject")))
activity.ActivitySubject = reader.GetString(reader.GetOrdinal("Subject"));
if (!reader.IsDBNull(reader.GetOrdinal("Event")))
activity.ActivityEvent = reader.GetString(reader.GetOrdinal("Event"));
list.Add(activity);
}
}
}
return list.ToArray();
}
// два метода - один возвращает объект типа ActvityVO, а другой - массив таких объектов.
В ActionScript вызываем удаленный метод:
{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;
import flash.net.registerClassAlias;
import vo.ActivityVO;
public class TestDAO
{
private var _connection:NetConnection;
private var _responder:Responder;
public function TestDAO()
{
registerClassAlias("TimeLineServices.vo.ActivityVO", ActivityVO);
_connection = new NetConnection();
_connection.objectEncoding = ObjectEncoding.AMF3;
_connection.connect(Main.SERVICE_URL);
}
public function GetActivities():void
{
var responder:Responder = new Responder(onResult, onFault);
//_connection.call("TimeLineServices.Sample.GetActivity", responder);
_connection.call("TimeLineServices.Sample.GetActivities", responder);
}
private function onResult(result:Object):void
{
var activities:Array = result as Array;
var activity:ActivityVO = activities[0] as ActivityVO;
//var activity:ActivityVO = result as ActivityVO;
trace(activity.ActivitySubject);
}
private function onFault(error:Object):void
{
trace("error: " + error.description);
}
}
}
Примечание: строка registerClassAlias(”TimeLineServices.vo.ActivityVO”, ActivityVO); находится внутри AS3-класса TestDAO. Она связывает ValueObjects в AS с соответствующими классами в .NET.
(В AS2 вместо этого надо было использовать Object.registerClass(). В AS3 Object.registerClass() была удаленна).
Обратите внимание на то, что метод GetActivities() на сервере возвращает массив. Даже если мы на сервере собираем элементы в ArrayList, вернуть нам надо массив - list.ToArray(). Происходит это потому что флэш не поддерживает комплексные объекты, такие как ArrayCollection.
Пример взят с официального форума FluorineFx.





Очень полезно.
Спасибо
смешных ситуаций в жизни было много - помню в детстве на даче слушал Kreator, так пришла бабушка сказала что магнитофон испортился
Очень полезная вещь, спасибо!!
Мне нравятся Ваши посты, заставляет задуматься)