المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : درس: استخدام ال Web service (تمكن الفلاش من التواصل مع مختلف اللغات)


hilalss
15 Jul 2008, 10:15 PM
السلام عليكم ...
بعد غيابي الطويل عن منتدى سفن ... أود أن أقدم لكم درس عن ال Web Service في الفلاش.

مستوى الدرس: متوسط – محترف.

أهداف الدرس: التعرف على طريقة ربط الفلاش مع البرامج الأخرى بطريقة web service.


المفردات:

Simple Object Access Protocol :SOAP
وهو بروتوكول يعتمد على الXML لتمرير البيانات والمعلومات عن طريق الHTTP.

Web Services Description Language :WSDL
لوصف الخدمات و العمليات الموجودة. وتكتب بال XML

EXtensible Markup Language :XML


ماذا سنستفيد من الدرس: هذا الدرس سيفتح الأفق لعملية تمرير البيانات بين الفلاش وأي لغة أخرى تدعم SOAP و WSDL.

اللغات المستخدمة في الدرس: PHP + ActionScript 2.0+

ملاحظات أخرى:
- استخدمت professional Flash 8 لتنفيذ هذا الدرس.
- ال XML هي الأساس في تناقل المعلومات في هذا الدرس ... ولكن لا يتطلب منك أن تكون فاهم لها لتنفيذ هذا المشروع، إنما ستكون إضافة مهمة للمبرمج.
- لأن هذا القسم مختص بالفلاش ... بإمكانك تجاهل القسم المختص بال php والذهاب مباشرة لتعلم الجزء المختص بالفلاش واستخدم بدل جزء الphp الوصلة التالية التي بها نفس ما ذكر في الدرس معد وجاهز للإستخدام: http://www.techvoicellc.com/Tutorials/server.php?wsdl
- يمكن استخدام أي لغة أخرى بدل الPHP مثل الASP.net وغيرها لتنفيذ المشروع.


المتطلبات:
- اصدار الفلاش: Flash MX Professional 2004.أو النسخ الأحدث ولا بد أن تكون Professional.
- في حالة قررت عدم استخدام صفحة ال PHP الجاهزة للاستخدام في الدرس :
وأحببت تعلم كيفية تنفيذ web service server باستخدام PHP فيتطلب عليك التالي:
o وجود سيرفير يشغل ال PHP.
o عليك تحميل هذه الlibrary ووضعها في ملف المشروع داخل ملف اسمه "lib" أو أي مكان اذا كنت محترف. ( nusoap-0.7.3.zip (http://sourceforge.net/project/showfiles.php?group_id=57663)) حيث هذه open source library معدة للتعامل مع SOAP و WSDL في الPHP

المصادر:
- http://www.w3schools.com/webservices/default.asp
- ال help الخاص ب فلاش 8.





المقدمة:
رغم ان في هذا الدرس نركز على الفلاش ... إلا أن الحقيقة ان الجزء المختص بالفلاش في هذا المشروع هو جزء بسيط جدا كما سنرى.

وقد ترددت في سرد شرح عن ماهية الweb service وكيفية عملها ولكن رأيت أنه سيحيد بنا عن أهداف الدرس وبالتالي لمن لا يعرف عنها أنصح بتصفح الموقع التالي(انجليزي): http://www.w3schools.com/webservices/default.asp
ما يهمنا أن الهدف من تصميمها هو تمكين البرامج المختلفة من التواصل مع بعضها. ولذلك فأي برنامج يدعم هذه الخاصية سيتمكن من التواصل مع أي برنامج أخر. و الفلاش له خاصية التواصل باستخدام هذه الخدمة. و استخدام ال web service يمكن حصرها لهدفين:

- إعادة استخدام بعض البرامج المعدة سابقا. مثال: تخيل أنك قمت بعمل برنامج لتحويل العملات. وبعد فترة أردت ان تعمل برنامج آخر به خاصية تحويل العملات ... فلا داعي لاعادة برمجة ما قمت به .. حيث بامكانك عن طريق الweb service ان تعيد استخدام البرنامج السابق في مشروعك الجديد.
-التواصل بين مختلف البرامج بغض النظر عن اللغة أو النظام المستخدم في تصميمها.




المشروع:
لعمل مشروع يعتمد على ال web service علينا ان نعمل جزئين اساسيان:
1) server: وهنا سنعتمد على الPHP لتكوين صفحة السيرفر الخاصة للرد والاستجابة لطلبات الClient عن طريق ال web service.
2) Client: وهنا سنعتمد على الفلاش للاستفادة من الخدمات التي يقدمها ال server.

1) صفحة Server.php:
سنقوم بعمل web service لها عدد 2 methods تقوم بالتالي:
1)(getString(S,user: ستقوم باختبار المتغير الآتي من الفلاشS وبناء عليه تقوم بإرجاع التالي:
(if S=0)
- مرحبا بك في موقع سفن التعليمي (user).
(if S=1)
- تحيات hilalss (user).
(else)
- S = ? , user=?.

2) (getTimeDate(gmt: سيقوم بإرجاع array بحيث العنصر الأول منه سيرجع التاريخ ... وبالعنصر الثاني من الarray سنضع الوقت مع مراعاة فرق الساعات عن جرينيتش نمرره من الفلاش في المتغير gmt. حيث يفيد هذا الفلاش في معرفة الوقت الصحيح من السيرفير وليس من المستخدمين للفلاش .


الخطوة الأولى: قم بوضع الكود التالي في صفحة server.php (ملاحظة بإمكانك تجاهل هذا الجزء والانتقال مباشرة الى جزء الفلاش)

<?php
// load SOAP library << راعي فيها المكان الذي وضعت به
require_once("lib/nusoap.php");

// set namespace << أي اسم مميز يستخدم كتعريف للإستفادة من الخدمة
$ns="http://www.techvoicellc.com/Tutorials//";

// نكون soap سيرفر
$server = new soap_server();

// اعداد wsdl service
$server->configureWSDL('Saven7',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
//.................................................. ...................
//تعريف نوع غير معرف افتراضيا في ال wsdl
$server->wsdl->addComplexType(
'ArrayOfstring',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]')),
'xsd:string'
);


// register a web service method << هنا نسجل العمليات التي نريدها ان تتواصل
$server->register('getString', //هذا اسم العملية هنا في الكود
array('S' => 'xsd:integer','user' => 'xsd:string'), // input parameters المتغيرات المدخلة
array('myRs' => 'xsd:string'), // output parameter العمليات الخارجة
$ns, // namespace
"$ns#getString", // soapaction يتنفذ الأمر
'rpc', // style
'encoded', // use
'methods by Saven7 to return strings' // documentation هذا للوصف
);
//..................................
$server->register('getTimeDate',
array('gmt' => 'xsd:float'), // input parameters
array('TmDtAr' => 'tns:ArrayOfstring'), // output parameter
$ns, // namespace
"$ns#getTimeDate", // soapaction
'rpc', // style
'encoded', // use
'method by Saven7 to get the server time and Date as an array' // documentation
);
//--------------------------------------------------------

function getString($S, $user){

switch($S){
case 0: $myStr = "(".$user.") مرحبا بك في موقع سفن التعليمي";
break;
case 1: $myStr = "(".$user.") hilalss تحيات";
break;
default: $myStr = "S = $S , user=$user";
}
return new soapval('return','xsd:string',$myStr);
}

function getTimeDate($gmt){
$date1 = gmdate("Y-m-d",time()+($gmt*60*60));
$time1 = gmdate("H:i:s",time()+($gmt*60*60));

$dtTm = array("".$date1,"".$time1);

return new soapval('return','tns:ArrayOfstring',$dtTm);

}
//.................................................. .............

// service the methods لتنفيذ الخدمة حسب الطلب
$server->service($HTTP_RAW_POST_DATA);

?>

2) الClient : (فلاش)
الخطوة الثانية: ضع الكود التالي في الفريم الأول للفلاش :
(ملاحظة: اعتمدت في هذا الكود على الصفحة التي أعددتها مسبقا ... اذا كنت ممن قام بالخطوة الأولى عليك مراعاة ان تستبدل الوصلة فيweb service بوصلة الصفحة التي اعددتها انت).

//لا بد من تحميل هذا "الكلاس" لنتمكن من استخدام الويب سيرفيس
import mx.services.WebService;

//تكوين ويب سيرفيس للاتصال بالسيرقر
myService = new WebService("http://www.techvoicellc.com/Tutorials/server.php?wsdl");

//----------- هنا ننادي ما نشاء الحصول عليه من السيرفر -----
dateTime = myService.getTimeDate(4);
getString1 = myService.getString(0,"Hilal");
getString2 = myService.getString(1,"Hilal");
getString3 = myService.getString(2,"Hilal");

//------------- هنا نقوم بتجربة في حالة عملنا خطأ ----
testFault = myService.myWrongMethod("Hilal");

//----------هذا القسم يقوم باستلام ما طلبناه
dateTime.onResult = function(result)
{
trace("--------------------");
trace("التاريخ: "+result[0]);
trace("الوقت: "+result[1]);
trace("--------------------");
}

getString1.onResult = function(result)
{
trace("getString(0,\"Hilal\"):"+result);

}
getString2.onResult = function(result){
trace("getString(1,\"Hilal\"):"+result);
}
getString3.onResult = function(result)
{
trace("getString(2,\"Hilal\"):"+result);

}

//-------- هنا تجربه ما يمكن عمله لمعرفة الأخطاء
testFault.onFault = function(fault){
trace("fault : "+fault.faultstring);
}

أرأيتم سهولة الاتصال من قبل الفلاش ... بهذه السهولة يمكن للفلاش الاتصال بال web services ... ولكم ان تكتشفوا امكانيات الweb service بصورة أكبر بتصفح ال help الخاص بالفلاش.

وعذرا للاعتماد على ال trace لتبسيط الدرس. ولكن هل تعلمون ان هناك عدة طرق أخرى للاتصال بال web service عن طريق الفلاش .... ومن هذه الطرق هناك طريقة نستطيع الاتصال بها من دون كتابة كود action script أو بالأحرى سنكتب سطر واحد فقط للتنفيذ !!!!!!! نعم بالامكان ....

في الأخير أعتذر عن شرح الكود فقط بقليل من ال comments عليه ... أتمنى أن تكون كافية لفهم الدرس. وأترك لكم حرية التفاعل والسؤال عن أي شي مبهم وغير مفهوم لأني اخترت هذه الطريقة لتمكنكم من اكتساب مهارة أكبر من خلال التقصي ومحاولة فهم ما بين سطور الكود.


آخر ملاحظة:
طريقة استخدام ال web service أفضل من استخدام loadVars لتواصل الفلاش مع اللغات الأخرى. وهي ذات سرعة وكفاءة عالية في المعلومات البسيطة والمتوسطة ( تدعم مختلف اللغات كالعربية، ممكن تمرير الarray وال object بتوافق تام ... الخ) .... وتتميز بسهولة وسرعة تنفيذها في الفلاش ...
ولكن في حالة تمرير بيانات كبيرة جدا .... فالخيار دائما هو استخدام Flash Remoting... وهي الطريقة الأسرع والأمثل على الإطلاق...


وبالطبع لكم حرية التعقيب
خالص تحياتي
هلال

المسافر
16 Jul 2008, 12:54 AM
السلام عليكم

هلا ومرحبا بأخونا العزيز hilalss

ومن زمان ما شفنا هالطلة

تسلم على هذا الدرس المتقدم

وان شاء الله يستفيد منه الاعضاء

واتمنى انك تزور منتدى الاكشن لان فيه اسئلة كثييرة منتظرة امثالك من اصحاب الخبرة للاجابة عليها

والسلام عليكم

hilalss
16 Jul 2008, 11:27 AM
أشكر لك مرورك أخي المسافر ...

تأكد بأن قدر المستطاع أحاول التواجد و الرد .... والحمدلله فالمنتدى قدر ارتقى بأعضاءه ومحتواه ... حيث نجد اليوم أكثر من أستاذ وخبير يحاول المساعدة ... وهناك رغبه أكبر في التعلم والتعليم ... وبالطبع الكل سعيد بذلك ...

أتمنى أن يستفيد كل من يقرأ هذا الدرس ... وعذرا اذا صعبت الأمور عليهم وسهلتها علي من حيث الشرح المباشر والبسيط عن ما بين سطور الأكواد المستخدمة .... ولكن أجد هذه الطريقة هي الأنجح لمن يريد التعلم ... و سأعوض ذلك بتواجدي قدر الامكان للإجابة عن استفساراتكم .... وبهذا أتأكد من وصولنا الى الهدف وهو التعلم ... أتمنى التوفيق للجميع.

خالص تحياتي
هلال - hilalss

Kingflash
16 Jul 2008, 06:17 PM
هلا وغلا بأخوي وحبيبي وصديقي hilalss

من زمان ما شفناك (اللهم لا تحرمنا منه)

إن شاء الله تستطيع تكمل معنا وتتواصل معنا في هالمنتدى الرااااااااااااااائئئئئع

شكرا أخوي على الدرس والله العظيم حلووووووووو كثير ومفيد

أرجو من إخواني المشررفييين التثبيت للأهمية القصووووووووووووووووووى


سلامووووووووووووووووووو

hilalss
16 Jul 2008, 09:33 PM
شكرا لك عزيزي Kingflash
أتشرف بمرورك يا أستاذ الألعاب :eg:


لك خالص تحياتي
هلال

Flash Lite
16 Jul 2008, 10:28 PM
السلام عليكم


ألف ألف شكر أخي هلال


التميز عادتك كالعادة


جزاك الله خيرا ..

مع تحيتي العطرة



أخوك

hilalss
17 Jul 2008, 12:02 PM
أشكرك أخي العزيز Flash Lite


لك بالغ احترامي وتقديري
هلال - hilalss

Kingflash
28 Aug 2008, 04:21 AM
هلا أخي

ولكن في حالة تمرير بيانات كبيرة جدا .... فالخيار دائما هو استخدام Flash Remoting... وهي الطريقة الأسرع والأمثل على الإطلاق...

أخي ممكن تشرح لنا طريقة ال Flash Remoting (الأفضل في موضوع جديد )




سؤال آخر

ولكن هل تعلمون ان هناك عدة طرق أخرى للاتصال بال web service عن طريق الفلاش .... ومن هذه الطرق هناك طريقة نستطيع الاتصال بها من دون كتابة كود action script أو بالأحرى سنكتب سطر واحد فقط للتنفيذ !!!!!!! نعم بالامكان ....

ما هي هذه الطريقة ؟؟؟ على الأقل هات الإسم بتاعها
ويارريت تشرح لنا إياها


بجد هذه الأشياء مهمة (بالنسبة لي على الأقل)


شكرا على تواصلك


السلام عليكم

Kingflash
28 Aug 2008, 04:33 AM
تم التثبيت الموضوع للأهميته وحيويته

hilalss
28 Aug 2008, 01:21 PM
أهلا أخي KingFlash ....

بالنسبة للفلاش رموتينج .... أفكر أعمل عنه درس ... بس يحتاج له وقت كثير .... لأنه قد يكون معقد قليلا بالنسبة للبعض ... ولذلك أود ان يكون الدرس عنه واضح وسهل التطبيق لمعظم الفئات ... ( خلنا ننتعي من ال Webservice كمرحلة أولى كما بدأنا في السابق باستخدام loadVars ... وسيأتي دور الflash rmoting باذن الله) ,,,,,


وبالنسبة للطريقة الثانية من غير كتابة كود ... (للتنويه أقصد بها في الفلاش وليس في الPHP) ...

سأقم بوضع الطريقة قريبا ... واعذرني لا أستطيع الآن لأني في مكان به النت بطيء ..(الطريقة باستخدام الكومبوننت الجاهزة في الفلاش).

تحيات
hilalss

Kingflash
28 Aug 2008, 01:34 PM
شكرا لك أخي هلال

نستناك (نحن غير مستعجلين ) لإنه ليس لي هدف حاليا إلا تعلم الطريقة

شكرا لك

الاسطورة
10 Sep 2008, 03:06 AM
السلام عليكم
وكل عام وانت بخير اخي العزيز هلال

واسف جداً لم انتبه الى هذا الدرس القيم جداً والمفيد

وحقيقه درس قوي جداً ومتقدم حتى بالنسبه لي نوعيه هذا الدرس جديده بالنسبه لي

واحاول قدر المستطاع فهم الدرس

واتمنى من اخي العزيز ان تضع لنا درس عن Xml ولو نبذه مختصره عنه اذا سمح لك الوقت بذلك.

لك بالغ شكري وتقديري اخي الكريم

تحياتي لك وبالتوفيق لك ان شاء الله

وكل عام وانت بخير وعافيه

Kingflash
17 Sep 2008, 08:26 PM
نعم أخي نتمنى منك شرح XML واستخداماتها في الفلاش

وفيه ترى مجموعة أوامر تختص في XML مثل nodes وهكذا شغلات
إذا عندك معرفه أخي حط لنا موضوع من كيف كيفك ،، وقول لن إذا ممكن نعمل لوود وسيف Load & Save لملف XML

بنستناها من يدك


سلامي لك

hilalss
17 Sep 2008, 10:01 PM
السلام عليكم ....

تشرفنا بوجودك أخي الأسطورة ... وعذرا لتأخري في الرد ...

يبدوا انه تراكم علي طلبان حتى الآن ... الأول وعدت بتنفيذة ولم أقم بعمله بعد وهو بعرض الطريقة الثانية لربط الفلاش بالويب سيرفيس ....
والاخر طلب موضوع عن الXML ....... أتمنى أن تعطوني المزيد من الوقت لإعداد الدروس ... لا أدري ما هو الوقت المناسب الذي سأتمكن فيه من عملهما ... (كما تعرف أخي كنج فلاش ... فقط بالأمس راجع من العمرة ... والعقل الآن شوي مقفل بسبب الارهاق ...) ...

فقط سأعطيك معلومة سريعة أخي kingflash .... بأن الفلاش نعم يستطيع عمل load , save للxml .... ولكن بالنسبة في عملية الحفظ ... فإنه لا يحفظ في ملف XML خارجي ... ولكن يقوم بحفظ التغييرات في الذاكرة المؤقته الRAM ... بحيث عند قفل العرض الفلاشي ... تمسح التغييرات التي تمت على الملف ... (وفي كل الأحوال فإننا لا نغير شيئا في الملفات الخارجية ... وهذا لضمان السيكيوريتي بالنسبة للعرض الفلاشي) ....
وبالطبع تستطيع الحفظ في الملفات الخارجية باستخدام لغات مساعدة كما تعلم ...

تحيات
hilalss

Kingflash
17 Sep 2008, 11:23 PM
هلا أخي خذ وقتك كله لا نريد أن نثقل عليك

ولكن تعرف ننحن متعطشيين للمعرفة ههههههههههه

وهذا أمر ما يعجبني في الفلاش بتاع السكيورتي

هههههههههه
والله بدي أنجلط منه
ما بقدرو يساوو شيء بس يقدر الفلاش يتحكم فيه
يعني ما بقدرو يعملو بس حفظ لملف txt على الأقل (والله هذا ما يضررررررررررر )

بدي أفقع من شركة أدوبي ههههههههههههه


يلا احنا بنستنى في دروسك الرائعة جدا (ولكن بعد الراحة )

سلامي لك