تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[سلسلة التحكم] {3} - خدمة الويب (Web Service)
#1
بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

والصلاة والسلام على اشرف الخلق محمد وعلى اله الطيبين الطاهرين



--


اهلا وسهلا بكم اخواني في المقالة الثالث من [سلسلة التحكم]

هذا المقال لايتحدث بشكل عام عن التحكم ، بل سنتحدث عن شيئ يسمى Web Service

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










صفر :- اجزاء المقالة


اولا :- التعريف ب WebService
ثانيا :- إنشاء WebService
ثالثا :- كتابة WebService وتجريبها
رابعا :- رفع الWebService على استضافة Somee
خامسا :- استدعاء محتويات الWebService
سادسا :- المراجع & الخاتمة












اولا :- التعريف ب WebService



Web Service او بالعربية (خدمة الويب) هي تطبيق من تطبيقات الويب ،

لايوجد لها واجهة رسومية ، ولازم تكون منصبة على Host (مضيف) لكي تعمل ،

وظيفتها هي استقبال الطلبات وتعالجها على الHost (اي يتم تنفيذ الاكواد على Host)

وترجع لك ب (الناتج) < في حالة كانت دالة طبعا




كيف تعمل WebService ؟؟

شاهد الصورة :-




العلاقة كما ترى تكون بين طرفين ، طرف العميل < طبعا ليس بالضرورة ان يكون عميل واحد

يتعامل مع الخدمة (WebService) ممكن ان يتعامل مع الخدمة 1000000 عميل او اكثر

طبعا حسب تحمل الHost لذلك .


سنقوم في هذا المقال بطرح بكتابة WebService فيها 3 دوال :

أ- AddSerial : حفظ سيريال
ب- IsHaveSerial : التأكد من السيريال (هل اضفناه سابقا او لا)
جـ- GetExternalIP : جلب الIP



هذه الدوال تحل بعض التساؤلات في هذا المنتدى ، فقبل عدة ايام قام احد الاعضاء

بطرح سؤال عن كيفية جلب ال Public ip من دون الاعتماد على مواقع نفس WhatsMyIp

فالاعتماد على مواقع مثل WhatsMyIp ليس عمليا .. فلو افترضنا ان الموقع خلاص اغلقوه ولم يعد يعمل .. سيتوقف برنامجك بالتأكيد

ولكن في خدمة الويب سنقوم نحن بأنفسنا بتصميم خدمة تجلب الايبي لنا

ونرفعها على استضافة .. فيمكننا تعديل الخدمة متى اردنا واضافة ميزات ك جلب تاريخ اليوم والكثير

وايضا لو تعطلت الاستضافة ماعليك سوا نقل الخدمة الى استضافة ثانية وتنزيل ابديت بسيط

لبرنامجك لتغيير رابط الاستضافة فقط ، ناهيك عن سهووووولة جلب ماتريده من الخدمة












ثانيا :- إنشاء WebService


سنقوم الان بإنشاء خدمة ويب بواسطة Visual Web Developer

(طبعا بإمكانك إنشاء الخدمة بواسطة Visual Studio)



--


خطوات إنشاء خدمة الويب :-

1- إنشاء مشروع جديد من نوع ASP.NET Empty Web Application
2- قم بإضافة WebService من خلال Project > Add new item > Web Service



خطوات إنشاء خدمة الويب (بالصور) :-

1


2



--

خلاص الحين أنشأنا Web Service جاهزة للعمل مباشرة على الLocal Host

اي انه سيتم استضافتها على جهازنا ، وليس على استضافة عالمية

لاحقا سنقوم برفعها على استضافة عالمية حتى يستطيع اي شخص الوصول لها عبر الانترنت

ولكن الان سنقوم بالعمل على Local host لتجريب الخدمة وتنقيحها












ثالثا :- كتابة WebService وتجريبها


بعد إنشاء الخدمة كما فعلنا في الجزء السابق ، سينتج لنا ملف كما في الصورة



هذا الملف تكتب فيه كود الخدمة سواء كان الكود (دالة او خاصية او مفوض ...) كل هذا تكتبه في هذا الملف

لكن إنتبه ، لايحق لك سوا مشاركة الدوال في خدمة الويب .

اعتقد الجملة مو مفهومة ، مو مشكلة نواصل وبتفهم

لاحظ عندما قمنا بإنشاء الخدمة ، وجدنا دالة باسم hello world


PHP كود :
[WebMethod]
        public 
string HelloWorld()
        {
            return 
"Hello World";
        } 



كما تلاحظ توجد مواصفة اعلى الدالة باسم WebMethod ، هذه المواصفة تمكن

اي عميل من طلب هذه الدالة عبر الانترنت ، طيب لو اردنا عمل دالة عادية (اي لايمكن لأحد طلبها عبر الانترنت)

ببساطة نكتب الدالة بدون [WebMethod]

لو فكرت تسوي خاصية بهذا الشكل مثلا :

PHP كود :
[WebMethod]
        public 
string Test getset; } 


فورا سيحصل خطأ سيقول لك ان WebMethod وهي المواصفة التي تسمح لك بمشاركة الدوال عبر الانترنت

مخصصة فقط للدوال او الاجراءات ، ولايجوز استعمالها للخصائص

اذن لايمكنك مشاركة الخصائص عبر الانترنت ، الحل هو استعمال دالتين بهذه الطريقة
PHP كود :
public string name getset; }
       

        [
WebMethod]
        public 
string Get()
        {
            return 
num
        
}

        [
WebMethod]
        public 
void Setstring num)
        {
            
name num;
        } 

الخاصية name لن يتم مشاركتها . ولكن يمكنك اسناد والاستعلام عن قيمتها باستعمال

دالتين من نوع WebMethod يعني سيتم مشاركتها . وبذلك قمنا بعمل خاصية بطريقة

غير مباشرة.




نرجع للدالة HelloWorld الي أنشاها البرنامج افتراضيا .

وظيفة هذه الدالة هو ارجاع نص "Hello World" عندما يتم استدعائها



--

كيف نستدعي دوال الWeb Service ؟؟ :-

1- من خلال المتصفح (فقط على الLocal host)
2- من خلال برنامج على سطح المكتب



--


1- من خلال المتصفح :-


قم بتشغيل الخدمة كما في الصورة :



سترى ظهور الدالة Hello World كما في الصورة ، نقوم بالضغط عليها :



بعدها سيتم توجيهنا إلى هذه الصفحة



نضغط Invoke وتعني أستدعاء الدالة HelloWorld ، ستظهر لك هذه الصورة



وهكذا قمنا بطلب الدالة HelloWorld من خلال المتصفح .

ننتقل للجزء الاهم وهو طلب الدالة من خلال برنامجنا على سطح المكتب .





2- من خلال برنامج على سطح المكتب :-


قم بإنشاء مشروع Windows Application ، ثم قم بإضافة زر على الفورم :



الان روح الى toolbar واختار Project ثم Add Service Reference :



ستظهر لك نافذة تطلب رابط الخدمة :



للحصول على رابط الخدمة ، قم بتشغيل الخدمة وستحصل على الرابط من المتصفح :



بعد كتابة الرابط والضغط على GO ، قم بكتابة اي Namespace وليكن FirstService



خلاص إحنا الحين اضفنا الخدمة الى برنامجنا ، باقي علينا نستدعي الدالة Hello World

ندخل على حدث click للزر الي اضفناه سابقا ونكتب الnamespce الي كتبناه في الخطوة السابقة

انا كتبت FirstService :



اختار الclass الي اخرها SoapClient ، ثم قم بإنشاء Instance كالتالي :
PHP كود :
FirstService.MyServiceSoapClient service = new FirstService.MyServiceSoapClient(); 


بعدها بكل بساطة وسهولة تقدر تسدعي الدالة HelloWorld وكأنها جزء من مشروعك :




خلاص عرفنا الحين كيف نتعامل مع دالة من خلال برنامجنا . (طبعا لازم تكون الدالة تحتوي على المواصفة WebMethod) .


عرفنا الحين كيف نتعامل مع الدوال ، قلنا في بداية المقال اننا سنقوم ببرمجة خدمة ويب

تقوم بحفظ سيريال وجلب الايبي الخارجي ثم سنقوم برفعهم على استضافة ليتمكن جميع

الناس من الوصول لها من خلال برنامجك (لما ترفعها على استضافة ماتقدر تتعامل مع الخدمة الا عن طريق برنامجك)

الان قم بكتابة دالة باسم AddSerial واخرى IsHaveSerial واخرى GetMyIP . سيكون الكود بهذا الشكل:
PHP كود :
[WebMethod]
        public 
void AddSerial(string serial)
        {
            
Application.Set(serial,"null");
        }

        [
WebMethod]
        public 
bool IsHaveSerial(string serial)
        {
            if (
Application.AllKeys.Contains(serial))
            {
                return 
true;
            }
            return 
false;
        }

        [
WebMethod]
        public 
string GetMyIP()
        {
           return 
HttpContext.Current.Request.UserHostAddress;
        } 


ملاحظة : الطريقة الي استخدمتها غير عملية في حفظ السيريالات .. حيث استخدام قاعدة بيانات ك SQL

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

بس لازم بعد ماتسوي القاعدة ترفعها على الاستضافة . ولكن الان نحن مبتدأين وسنقوم

على الاقل باستعمال هذه الطريقة التي تحفظ السيريال في الخدمة >>
(بالضبط مثل Setting في برامج سطح المكتب ولكن قد تختفي البيانات بعد فترة لان Application.set تحفظ البيانات في ذاكرة الHost).



والان سنقوم برفع الخدمة على الاستضافة وسنستدعي الدوال من برنامجنا











رابعا :- رفع الWebService على استضافة Somee



في الجزء السابق قمنا بعمل خدمة فيها 3 دوال ، الاولى لجلب الExternal IP الخاص بنا

والثانية لتسجيل سيريال ، والثالثة لفحص السيريال هل هو موجود او لا

وهتان الدالتان تحلان بعض التساؤلات في هذا المنتدى


كيف احصل على الايبي الخارجي لجهازي ؟؟ حيث ستعمل الخدمة مثل المبدأ المذكور في المشاركة هنا
كيف اسجل البرنامج لمرة واحدة (اي بعد استعمال السيريال ، لايمكن لاي شخص استعماله مرة اخرى)


وهذه الخدمة ستحل كل هذه التساؤلات .


في السابق إنشأنا خدمة تعمل على Local host يعني ان الخدمة ستعمل على جهازك فقط

طيب لو قررت تنشر برنامجك على المستخدمين ماالعمل ؟؟

ببساطة نرفع الخدمة على استضافة ، وانا بدل ماشرح بالصور قمت بعمل شرح فيديو

طبعا تجاهلت تصوير طريقة التسجيل في الموقع (Somee.com) ، لأن بصراحة كمبرمجين

امر مخجل ان اقوم بشرح كيفية التسجيل . لو حبيت تشوف الطريقة ابحث في اليوتيوب .



طريقة رفع الخدمة على استضافة Somee.com :-






او على اليوتيوب مباشرة
إقتباس :http://www.youtube.com/watch?v=-FWs7LaeS80










خامسا :- استدعاء محتويات الWebService


بعد أن قمنا برفع الاستضافة ، سنقوم باستعمال دوالها من خلال برنامجنا

الطريقة قمنا بشرحها في الجزء الثالث ولكن هذه المرة "بالفيديو"







او على اليوتيوب مباشرة
إقتباس :http://www.youtube.com/watch?v=xnoUcFQC4EQ



طبعا البرنامج المستخدم في الفيديو + الخدمة الي سويناها تلاقونها في المرفقات
البرنامج جاهز يمكنك تجريبه فهو مربوط بالخدمة المركبة على Somee Wink












سابعا :- المراجع & الخاتمة


المراجع المعتمد عليها في هذه المقالة :-

خدمة ويب - ويكيبيديا، الموسوعة الحرة

HOW TO: Write a Simple Web Service by Using Visual C# .NET


--


أتمنى أن تستفيدو من هذه التقنية الراائعة جدا

وتطورو الامثلة لتلبي احتياجتكم فمجال هذه التقنية واسع جدا ويتم استعماله

في العديد من التطبيقات حاليا (خاصة البرامج التي تعتمد على الانترنت في تسجيلها ، Skype، والعديد العديد غيرها)

شكرا للمتابعة وسنلقاكم إن شاء الله في الاسبوع القادم في مقالة بسيطة جدا

للتحكم عن بعد بواسطة خدمة الويب ، نلقاكم بخير .





إنتهى


الملفات المرفقة
.zip   UsingService(Application).zip (الحجم : 92.3 ك ب / التحميلات : 170)
.zip   MyFirstService(service).zip (الحجم : 19.64 ك ب / التحميلات : 133)
الرد }}}}
#2
السلام عليكم

صراحة استمتعت بالمقالة من مبدع مثلك أنار قسم لغة C#.NET وجزاك الله خير الجزاء

بانتظار المزيد من ابداعاتكIdea

تحياتي
الرد }}}}
تم الشكر بواسطة: الشاكي لله , @@أبورائد@@
#3
مقالة اكثر من رائعة يا اخى ابورائد

دائما متفوق بمقالاتك المتميزة

-----------------------
Software Developer

Microsoft Partner

الرد }}}}
تم الشكر بواسطة: الشاكي لله
#4
(23-10-13, 10:12 PM)Sajad كتب : السلام عليكم

صراحة استمتعت بالمقالة من مبدع مثلك أنار قسم لغة C#.NET وجزاك الله خير الجزاء

بانتظار المزيد من ابداعاتكIdea

تحياتي

شكرا استاذي ..

انت وجودك نور جميع الاقسام

وهذي السلسلة لاشيئ من مقالاتك التي كانت تملأ قسم السي شارب سابقا

وإن شاء الله بقي القليل على تنزيل المنتدى القديم (حوالي 5 اجزاء) وسأبدأ بتفيذ برنامج النشر الالي على هذا المنتدى.

تحياتي


(23-10-13, 11:07 PM)sherif khalid كتب :
مقالة اكثر من رائعة يا اخى ابورائد

دائما متفوق بمقالاتك المتميزة

شكرا على المرور اخوي ابو شريف

واتمنى انك استفدت من المقالة

بالمناسبة انا "ابو جاسم" وليس "ابو رائد" Cool هههههه
الرد }}}}
تم الشكر بواسطة:
#5
بالنسبة لموضوع الامن او Security

كيف لا تجعل احد يستعمل خدمتك

فلو حصل شخص على رابط خدمتك فبساطة يمكنه تصميم form application ليتمكن

من تنفيذ دوال الخدمة .. وبالتالي يمكن ان يضيف سيريال جديد وغيره من العبث

موضوع السيكيورتي فيه طرق كثيرة جدااا ، وبما انني لم اركز على هذا الجانب ابدا

سأدعك تقرأ مقالة كاملة من مايكروسوفت تتحدث عن كيفيات حماية خدمتك

http://msdn.microsoft.com/en-us/library/ff648667.aspx

او ممكن تبحث في قوقل باسم How to secure web service ، وبالتأكيد ستحصل على الكثير من الاجوبة.

ودائما لاتجعل احد يحصل على رابط خدمتك .

-

اعذروني فلم إعطي هذا الموضوع حقه ، فأنا لان مشغول جدا مع تقنية اخرى ولايوجد عندي وقت لقراءة مقالة عن هذا الامر وكتابة مقالة اخرى
الرد }}}}
تم الشكر بواسطة:
#6
السلام عليكم ورحمة الله وبركاته


أسجل إعجابي الشديد لهذا الشخص (الشاكي لله) لما يتميز به من عقلية برمجية إحترافية

أسأل الله أن يزيدك من فضله




السلام عليكم ورحمة الله وبركاته
 
 
@@@ سامحوني، منقطع نهائياً @@@

 
الرد }}}}
تم الشكر بواسطة: الشاكي لله
#7
درس رائع
فى انتظار المزيد من ابداعاتك
الرد }}}}
تم الشكر بواسطة: الشاكي لله
#8
ما شاء الله عنك يا اخي موضوع رائع

وانا راح استخدم هذه الاداة في الايام القادمة

بارك الله فيك

ويعطيك العافية
الرد }}}}
تم الشكر بواسطة: الشاكي لله
#9
الله يعطيك العافيههه
(( نحن قوم أعزنا الله بالإسلام فمهما ابتغينا العزة بغيره أذلنا الله )) .. 











الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سلسلة التحكم] {2} - التحكم بواسطة Remoting الشاكي لله 8 3,449 06-12-16, 04:22 PM
آخر رد: الشاكي لله
  [سلسلة التعامل مع الويب] تحليل الصفحات باستخدام HtmlAgilityPack الشاكي لله 9 1,243 25-09-16, 12:19 PM
آخر رد: ابراهيم كركوكي
  [سلسلة التحكم] {5} - التحكم بالمصباح بواسطة الـ USB و Arduino الشاكي لله 11 9,799 02-06-16, 11:28 AM
آخر رد: CLARO
  تجميعية مقالات [سلسلة التحكم] الشاكي لله 8 1,332 02-06-16, 11:25 AM
آخر رد: CLARO
  [سلسلة ادوات المبرمج] {2} - اداة تحليل صفحات الويب HAPXPathFinder الشاكي لله 9 2,015 02-06-16, 11:24 AM
آخر رد: CLARO
  [سلسلة التعامل مع الويب] - ارسال الطلبات HttpWebRequset الشاكي لله 14 4,845 02-06-16, 11:21 AM
آخر رد: CLARO
  [سلسلة التحكم] {1} - طرق التحكم في البرامج الشاكي لله 7 3,230 12-02-16, 10:16 PM
آخر رد: nani49
  [سلسلة التحكم] {6} - التحكم في البرامج بطريقة SendMessage الشاكي لله 3 1,136 12-02-16, 02:01 PM
آخر رد: nani49
  [سلسلة ادوات المبرمج] {1} - اداة مراقبة الريجستري RegFromApp الشاكي لله 1 1,655 02-01-16, 09:17 PM
آخر رد: الماجيك مسعد
  [سلسلة التحكم] {4} - التحكم عن بعد بواسطة خدمة الويب الشاكي لله 5 2,338 17-03-14, 09:46 PM
آخر رد: as206em

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم