2008
04.23


Небольшой пример передачи типизированного объекта от сервера (.NET) во Flash CS3 используя FluorineFx.

Информация по теме:
Общая информация по FluorineFx и Flash Remoting
Сравнение WebORB-vs-FluorineFx

Создайте ValueObjects во флэше и на серверной стороне.

ActionScript 3.0:

package vo
{
   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#):

namespace TimeLineServices.vo
{
    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 приложение должно содержать следующий код:

public ActivityVO GetActivity()
        {
            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 вызываем удаленный метод:

package services
{
   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.


google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

No Comment.

Add Your Comment