دقيقا نيازي به استفاده از Web-Service ها نيست، اين امکان فقط در فلش برای ايجاد Application های reusable و با سرعت بالا قرار داده شده. همونطور که قبلا هم گفتم Web-Service ها از اساس با سيستم های قديمی تفاوت دارند، براي ارتباط با يک Web-Service ميتوان از Port هاي گوناگون و Protocol های بسيار بهينه شده اي استفاده کرد.
فلش در نسخه 7 از 3 Protocol استاندارد TCP برای ارتباط با سرور استفاده ميکند:
- HTTP
- RTMP
-SOAP
اگر کسی از من بهترين امکان قرار داده شده در فلش نسخه 6 را بپرسد بدون شک جواب من NetConnection Class خواهد بود. NetConnection دنيايي جديدی را به روی فلش باز کرد، Flashcom، Remoting و WebService ها هر کدام قابليت هايي در اختيار فلش قرار ميدهند که به سختی ميتوان نمونه مشبهی براي آن پيدا کرد. برای مثال به راحتی امکان ارتباط بين فلش و ColdFusion، ASP، PHP، Java و ده ها محيط ديگر روي سرور با استفاده از Remoting وجود دارد.
همچنين امکانات ارتباطات Real Time با سرور با استفاده از Flashcom و Breez فقط با استفاده از NetConnection Class وجود دارد.
خوب برای تماس با يک Web-Service از هر 3 Protocol بالا ميتوان استفاده کرد:
روش اول و شايد بهترين روش براي مشكل شما استفاده از Built-in SOAP Parser درون فلش 7 مي باشد. از آنجايي كه ايجاد و تفسير فايل هاي SOAP كار آساني نيست macromedia يك component به نام WebServiceConnector براي اين كار قرار داده است. براي استفاده از آن WebServiceConnector Component را درون برنامه drag كنيد و كد زير را براي ارتباط با WebService وارد كنيد.
اين برنامه با WebService مجاني
http://ws.cdyne.com/whoisquery/whois.asmx?wsdl ارتباط برقرار مي كند و اطلاعات مربوط به majidonline.com را بر مي گرداند:
کد:
import mx.data.components.WebServiceConnector;
var wscListener:Object = new Object();
var wsConn:WebServiceConnector = new WebServiceConnector();
wscListener.result = function(evt:Object)
{
trace(evt.target.results);
};
wscListener.status= function(evt:Object)
{
trace(evt.code);
};
wsConn.addEventListener("result", wscListener);
wsConn.addEventListener("status", wscListener);
wsConn.WSDLURL = "http://ws.cdyne.com/whoisquery/whois.asmx?wsdl";
wsConn.operation = "GetWhois";
wsConn.params = ["www.majidonline.com",0];
wsConn.trigger();
روش دوم استفاده از remoting مي باشد. remoting قوي ترين ابزار ارتباطي فلش و Application Server هاي مبتني بر Java و Net. مي باشد. شركت macromedia فقط از remoting مبتني بر Java و Net. توليد خود پشتيباني مي كند و AMFPHP و يا OpenAMF مورد تاييد اين شركت نيست.
نكته قابل توجه در مورد remoting اين است كه remoting فقط براي ارتباط با WebService ها نيست. از remoting مي توان براي ارتباط با صفحات ديناميك cfm. , .asp و ... ارتباط با WebService ها، ارتباط با فايلهاي dll. ايجاد شده توسط ++VC يا Delphi و همچنين EJB ها و Servlet هاي توليد شده توسط Java استفاده كرد. remoting از پروتكلي به نام AMF با header هاي http استفاده مي كند و در واقع مدلي شبيه SOAP ولي بهينه شده براي فلش مي باشد بنابراين براي انتقال حجم زياد data خيلي سريع تر از روش قبلي مي باشد و نيازي به تفسير فايلهاي SOPA ندارد.
براي استفاده از remoting در سمت سرور نياز به Application Server هاي ColdFusion يا JRun كه remoting را پشتيباني مي كنند مي باشد در غير اين صورت بايد remoting را به عنوان يك service جداگانه بر روي سرور نصب كرد.
براي استفاده از remoting در سمت client بايد ابتدا class هاي مورد نياز remoting را در برنامه وارد كرد و سپس به remoting server كه gateway ناميده مي شود connect كرد. مثلا براي تست به gateway شركت macromedia متصل مي شويم كه براي تست قرار داده شده است. اين gateway فقط براي تست مي باشد و از آن نمي توان براي مصارف تجاري استفاده كرد. امكان block كردن يك domain هميشه براي macromedia هست.
remoting gateway شركت macromedia بدين صورت است:
کد:
http://examples.macromedia.com/flashservices/gateway
gateway هاي ColdFusion و Java مانند بالا مي باشند. flashservices در اينجا Java application context و gateway هم servlet mapping مي باشد.
براي ارتباط با remoting مراحل زير را انجام مي دهيم:
-از منوي Window \ Other Pannels \ Common Libraries \ Remoting را انتخاب كرده و از library باز شده RemotingClasses را به درون برنامه drag مي كنيم. ( در صورتي كه remoting components بر روي سيستم نصب نكرده ايد آنرا از سايت macromedia در يافت كنيد)
- كد هاي زير را براي ارتباط با سرور وارد كنيد:
کد:
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent
function GetWhois_Result (res:ResultEvent):Void
{
trace(res.result);
};
function GetWhois_Fault (fault:FaultEvent):Void
{
trace(fault.fault.description);
};
var myResponder:RelayResponder = new RelayResponder(this,"GetWhois_Result","GetWhois_Fault");
var myService:Service = new Service("http://examples.macromedia.com/flashservices/gateway", null, "http://ws.cdyne.com/whoisquery/whois.asmx?wsdl", null, myResponder );
var temp_pc:PendingCall = myService.GetWhois("www.majidonline.com",0);
من شخصا هرگز از component هاي remoting شركت macromedia استفاده نمي كنم و سعي مي كنم كلاس هاي مورد نياز را خودم بنويسم ولي در هر حال اگر كسي در مورد API برنامه بالا مشكلي داره در help remoting كاملا توضيح داده شده.
- روش سوم استفاده از يك Application Server رابط مانند Flashcom و يا Breez براي ارتباط با WebService مي باشد. جالب اينكه Flashcom و Breez خود داراي Built-in Remoting مي باشند و مي توانند به Application Server هاي ديگر متصل شوند. اين روش كه به معماري چند لايه اي (Multi-Tier) معروف است بهترين و مطمئن ترين راه ايجاد application هايي است كه ارتباطات زيادي با WebService ها دارند و همچنين client ها نيازمند authorized شدن بر روي سرور هستند. به طور كلي معماري چند لايه اي به علت امنيت بسيار بالا و انعطاف پذيري زياد بهترين شيوه پياده سازي application هاي تحت سرور هستند ولي در عين حال نيازمند كد بيشتر و تجربه در شاخه هاي متفاوتي است و از حوصله مطلب خارج است.
اميدوارم مفيد بوده باشه