ما هو WSDL؟ المعنى والمثال
⚡ ملخص ذكي
WSDL (خدمات الويب Descriptلغة WSDL هي ملف قائم على XML يُعرّف تطبيق العميل بوظيفة خدمة الويب وكيفية استدعائها. يشرح هذا المورد بنية WSDL وعناصرها ورسائلها وأنواع المنافذ والروابط، بالإضافة إلى مثال للنشر.
ما هو WSDL؟
خدمات الويب Descriptلغة ايون (WSDL) هو ملف يستند إلى XML يخبر تطبيق العميل بشكل أساسي بما تفعله خدمة الويب. يتم استخدام ملف WSDL لوصف باختصار ما تفعله خدمة الويب ويمنح العميل جميع المعلومات المطلوبة للاتصال بخدمة الويب واستخدام جميع الوظائف التي توفرها خدمة الويب.
سنركز في هذا الدرس على أهم جزء في خدمات الويب، وهو ملف WSDL، أو خدمات الويب. Descriptلغة الأيونات. وهي بمثابة الاتصالtract بين خدمة الويب وأي عميل يرغب في استخدامها.
هيكل وثيقة WSDL
تُستخدم وثيقة WSDL لوصف خدمة الويب. هذا الوصف ضروري لكي تتمكن تطبيقات العميل من فهم وظيفة خدمة الويب.
- يحتوي ملف WSDL على موقع خدمة الويب، و
- الأساليب التي يتم كشفها بواسطة خدمة الويب.
قد يبدو ملف WSDL معقدًا للغاية لأي مستخدم، ولكنه يحتوي على جميع المعلومات الضرورية التي يحتاجها أي تطبيق عميل لاستخدام خدمة الويب ذات الصلة. فيما يلي البنية العامة لملف WSDL:
- تعريف
- Targetمساحة الاسم
- أنواع البيانات
- الرسائل
- نوع المنفذ
- الارتباطات
- الخدمة
من الأمور الأساسية التي يجب ملاحظتها هنا تعريف الرسائل، وهو ما يتم تمريره بواسطة بروتوكول الصابونيتم تعريفها فعليًا في مستند WSDL. يوضح مستند WSDL لتطبيق العميل أنواع رسائل SOAP التي يتم إرسالها واستقبالها بواسطة خدمة الويب.
بمعنى آخر، يُشبه ملف WSDL بطاقة بريدية تحمل عنوان موقع مُحدد. يُحدد العنوان تفاصيل المكان الذي يجب تسليم الرسالة إليه. وبالمثل، يُشبه ملف WSDL البطاقة البريدية التي تحمل عنوان خدمة الويب التي تُقدم جميع الوظائف التي يرغب بها العميل.
<!-- WSDL definition structure --> <definitions name="Guru99Service" targetNamespace=http://example.org/math/ xmlns=http://schemas.xmlsoap.org/wsdl/> <!-- abstract definitions --> <types> ... <message> ... <portType> ... <!-- concrete definitions --> <binding> ... <service> ... </definition>
فيما يلي رسم تخطيطي لبنية ملف WSDL.
هيكل WSDL
عناصر WSDL
يحتوي ملف WSDL على الأجزاء الرئيسية التالية:
- استخدم يُستخدم الوسم لتعريف جميع أنواع البيانات المعقدة التي ستُستخدم في الرسائل المتبادلة بين تطبيق العميل وخدمة الويب. هذا مهم لأنه إذا كانت خدمة الويب تتعامل مع نوع بيانات معقد، فيجب أن يكون تطبيق العميل قادرًا على معالجته. تُعد أنواع البيانات مثل الأعداد العشرية والأرقام والسلاسل النصية أنواع بيانات بسيطة، ولكن قد توفر خدمة الويب أنواع بيانات مُهيكلة. على سبيل المثال، قد يكون هناك نوع بيانات يُسمى EmployeeDataType، والذي يحتوي على عنصرين هما "EmployeeName" من نوع سلسلة نصية و"EmployeeID" من نوع عدد صحيح أو رقم. يشكل هذان العنصران معًا نوع بيانات معقد.
- استخدم تُستخدم الوسوم لتحديد الرسالة المتبادلة بين تطبيق العميل وخادم الويب. تشرح هذه الرسائل عمليات الإدخال والإخراج التي يمكن أن تُنفذها خدمة الويب. على سبيل المثال، قد تستقبل رسالةٌ مُعرّف الموظف (EmployeeID)، وتكون رسالة الإخراج اسم الموظف بناءً على مُعرّف الموظف المُقدّم.
- استخدم يتم استخدام العلامة لتغليف كل رسالة إدخال وإخراج في عملية منطقية واحدة. لذا، يمكن أن تكون هناك عملية تسمى "GetEmployee" والتي تجمع بين رسالة الإدخال الخاصة بقبول معرف الموظف من تطبيق العميل ثم إرسال اسم الموظف كرسالة إخراج.
- استخدم يُستخدم الوسم لربط العملية بنوع منفذ معين. هذا يُمكّن تطبيق العميل من الوصول إلى العمليات المرتبطة بنوع المنفذ ذي الصلة عند استدعائه. تُشبه أنواع المنافذ الواجهات، لذا إذا احتاج تطبيق العميل إلى استخدام خدمة ويب، فعليه استخدام معلومات الربط لضمان إمكانية الاتصال بالواجهة التي توفرها تلك الخدمة.
- استخدم الوسم هو اسم يُطلق على خدمة الويب نفسها. في البداية، عندما يستدعي تطبيق العميل خدمة الويب، فإنه يفعل ذلك عن طريق استدعاء اسم خدمة الويب. على سبيل المثال، يمكن العثور على خدمة الويب على عنوان مثل http://localhost/Guru99/Tutorial.asmx. سيحتوي رمز الخدمة على URL تم تعريفها، مما يخبر تطبيق العميل بأن خدمة الويب متاحة في هذا الموقع.
لماذا WSDL
تُعدّ خدمة الويب عنصرًا أساسيًا في بناء تطبيقات الويب الحديثة. ويتمثل هدفها الرئيسي في تمكين تطبيقات متعددة مبنية بلغات برمجة مختلفة من التواصل فيما بينها. على سبيل المثال، يمكننا جعل تطبيق ويب مبني بلغة .NET يتواصل مع... Java التطبيق عبر خدمة ويب.
تتضمن خدمة الويب الميزات الرئيسية التالية:
- تم بناؤه باستخدام لغة برمجة XML. تقريبًا جميع التقنيات الحديثة مثل .Net و Java لديك أوامر مقابلة لديها القدرة على العمل مع XML. ومن ثم، تم اعتبار لغة XML هي اللغة الأكثر ملاءمة لبناء خدمات الويب.
- تتواصل خدمات الويب عبر بروتوكول HTTP. يُعدّ HTTP بروتوكولًا تستخدمه جميع تطبيقات الويب. لذا، كان من المنطقي ضمان قدرة خدمات الويب على العمل عبر بروتوكول HTTP أيضًا.
- تتوافق خدمات الويب مع مواصفات لغة معينة. يتم تعيين هذه المواصفات بواسطة W3C، وهي الهيئة الإدارية لجميع معايير الويب.
- تحتوي خدمات الويب على لغة وصف تُعرف باسم WSDL، والتي تُستخدم لوصف خدمة الويب.
ملف WSDL مكتوب بلغة XML عادية. والسبب في ذلك هو إمكانية قراءته بواسطة أي لغة برمجة. فإذا كُتب تطبيق العميل بلغة .NET، فسيفهم ملف XML. وبالمثل، إذا كُتب تطبيق العميل بلغة أخرى Java إذا كانت لغة البرمجة قادرة على تفسير ملف WSDL، فسيكون ذلك كافياً أيضاً.
ملف WSDL هو ما يربط كل شيء معًا. من الرسم التوضيحي أعلاه، يمكنك أن ترى أنه يمكنك إنشاء خدمة ويب بلغة .NET. لذا، هنا يتم تنفيذ الخدمة. إذا لم يكن لديك ملف WSDL وتريد... Java يتطلب استخدام فئة لاستهلاك خدمة الويب جهدًا برمجيًا كبيرًا لتحقيق ذلك. أما الآن، مع ملف WSDL، وهو ملف XML يمكن فهمه بواسطة أي لغة برمجة، يمكنك بسهولة الحصول على Java فئة تستهلك خدمة ويب .Net. وبالتالي، يتم تقليل مقدار جهد البرمجة بشكل كبير.
جزء رسالة WSDL
يتكون WSDL من قسم يسمى "الرسائل" والذي يُشار إليه بـ العنصر. يُستخدم هذا العنصر بشكل أساسي لوصف البيانات التي يتم تبادلها بين خدمة الويب وتطبيق العميل.
ستحتوي كل خدمة ويب دائمًا على نوعين من الرسائل:
- أحدهما مخصص لإدخال خدمة الويب، والآخر مخصص لإخراج خدمة الويب.
- يتم استخدام الإدخال لوصف المعلمات التي تقبلها خدمة الويب. يعد هذا جانبًا مهمًا لتطبيق العميل حتى يعرف القيم التي سيتم إرسالها كمعلمات إلى خدمة الويب.
- النوع الآخر من الرسائل هو رسالة الإخراج التي تخبرنا بالنتائج التي توفرها خدمة الويب.
كل رسالة، بدورها، سيكون لها العنصر الذي يستخدم لوصف المعلمة المستخدمة بواسطة رسالة الإدخال والإخراج.
فيما يلي مثال بسيط على شكل رسالة خدمة ويب. تتمثل وظيفة خدمة الويب في توفير اسم "الدرس التعليمي" بمجرد إرسال "معرّف الدرس التعليمي" كمعامل إلى خدمة الويب.
- كما نرى، تحتوي خدمة الويب على رسالتين، واحدة للإدخال والأخرى للإخراج.
- تُعرف رسالة الإدخال باسم TutorialNameRequest، وتحتوي على مُعامل واحد يُسمى TutorialID. هذا المُعامل من نوع رقم، ويتم تحديده بواسطة نوع xsd:number.
- تُعرف رسالة الإخراج باسم TutorialNameResponse، وتحتوي على مُعامل واحد يُسمى TutorialName. هذا المُعامل من نوع سلسلة نصية، وهو مُحدد بواسطة نوع xsd:string.
ربط نوع المنفذ
تُستخدم المنافذ في WSDL لتحديد عملية كاملة واحدة تُقدمها خدمة الويب. في الموضوع السابق، رأينا أن خدمة الويب لدينا تُقدم رسالتين، إحداهما للإدخال تُسمى "TutorialNameRequest" والأخرى للإخراج تُسمى "TutorialNameResponse". تُشكل رسالتا الإدخال والإخراج معًا ما يُعرف بالعملية الكاملة.
يوفر WSDL عنصرًا يسمى والتي يتم استخدامها لتحديد العمليات التي توفرها خدمة الويب.
لذلك في مثالنا أعلاه يمكننا ملاحظة ما يلي:
- يُعطى اسم نوع المنفذ الذي يغلف العملية باسم "Tutorial_PortType".
- تم تسمية العملية نفسها باسم "Tutorial". لذا فإن عمليتنا توفر بشكل أساسي TutorialName إذا تم إعطاء TutorialID كمعامل إدخال.
- يلي ذلك رسالتان، واحدة للإدخال والأخرى للإخراج، والتي تشكل عمليتنا.
بالإضافة إلى العنصر، وهناك أيضا العنصر الذي يستخدم لتحديد كيفية نقل الرسائل.
- يوضح المثال أعلاه أن الربط يتكون من اسم ربط، وهو في حالتنا "TutorialSoapBinding". الربط، ببساطة، هو المعلومات التي يستخدمها تطبيق العميل لربط نفسه بخدمة الويب. بمجرد ربطه بخدمة الويب، يصبح بإمكانه استدعاء العمليات المختلفة التي توفرها خدمة الويب.
- تم تحديد طبقة النقل على أنها http:// مما يعني أن الرسائل ستنتقل عبر بروتوكول HTTP.
إنشاء ملف WSDL
يتم إنشاء ملف WSDL عند إنشاء أي خدمة ويب بأي لغة برمجة. ونظرًا لأن إنشاء ملف WSDL من الصفر أمر معقد للغاية، فإن جميع المحررات مثل Visual Studio لـ .Net و Eclipse لـ Java قم بإنشاء ملف WSDL تلقائيًا.
فيما يلي مثال لملف WSDL تم إنشاؤه في Visual Studio.
<?xml version="1.0"?> <definitions name="Tutorial" targetNamespace=http://Guru99.com/Tutorial.wsdl xmlns:tns=http://Guru99.com/Tutorial.wsdl xmlns:xsd1=http://Guru99.com/Tutorial.xsd xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace=http://Guru99.com/Tutorial.xsd xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TutorialNameRequest"> <complexType> <all> <element name="TutorialName" type="string"/> </all> </complexType> </element> <element name="TutorialIDRequest"> <complexType> <all> <element name="TutorialID" type="number"/> </all> </complexType> </element> </schema> </types> <message name="GetTutorialNameInput"> <part name="body" element="xsd1:TutorialIDRequest"/> </message> <message name="GetTutorialNameOutput"> <part name="body" element="xsd1:TutorialNameRequest"/> </message> <portType name="TutorialPortType"> <operation name="GetTutorialName"> <input message="tns:GetTutorialNameInput"/> <output message="tns:GetTutorialNameOutput"/> </operation> </portType> <binding name="TutorialSoapBinding" type="tns:TutorialPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetTutorialName"> <soap:operation soapAction="http://Guru99.com/GetTutorialName"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="TutorialService"> <documentation>TutorialService</documentation> <port name="TutorialPort" binding="tns:TutorialSoapBinding"> <soap:address location="http://Guru99.com/Tutorial"/> </port> </service> </definitions>
يبدو ملف WSDL المذكور أعلاه معقدًا للغاية لأي مستخدم. سنتناول الأجزاء المختلفة بالتفصيل في الدروس اللاحقة، ولكن دعونا الآن نلقي نظرة سريعة على وظيفة كل قسم من أقسام ملف WSDL.
نشر مثال خدمة الويب
لنلقِ نظرة الآن على مثال لكيفية نشر خدمة ويب واستخدامها باستخدام Visual Studio. في هذا المثال، سننشئ خدمة ويب باستخدام دالة WebMethod واحدة. تقبل هذه الدالة مُعاملًا من نوع عدد صحيح يُسمى "TutorialID". ثم تُعيد دالة WebMethod سلسلة نصية تُسمى "Web Services".
سنقوم بعد ذلك بإنشاء تطبيق يعمل عبر سطر الأوامر، والذي سيستهلك خدمة الويب هذه ويستدعي دالة الويب الخاصة بنا وفقًا لذلك. دعونا نلقي نظرة على الخطوات اللازمة لتنفيذ هذا المثال.
الخطوة 1) الخطوة الأولى هي إنشاء خدمة الويب الخاصة بك. الخطوات التفصيلية لكيفية أسب.نت تم شرح كيفية إنشاء مشروع ويب وخدمة ويب اضغط هنايرجى اتباع نفس الخطوات لإنشاء المشروع وخدمة الويب وفقًا لذلك. يكمن الجزء الأساسي في إدخال الكود التالي في ملف خدمات الويب.
namespace webservic_asmx { [WebService(Name = "Guru99 Web service")] public class TutorialService : System.Web.Services.WebService { [WebMethod] public string GetTutorialService(int TutorialID) { string TutorialName = "Web Services"; return TutorialName; } } }
Code التفسير:
- هنا نقوم بإنشاء WebMethod يسمى "Guru"99WebService." في طريقة الويب هذه، نقوم بتضمين معلمة عددية صحيحة يجب تمريرها كلما تم استدعاء طريقة الويب هذه.
- بعد ذلك نقوم بتعريف متغير يسمى "TutorialName" والذي سيحتفظ بقيمة سلسلة "خدمات الويب". هذه هي القيمة التي سيتم إرجاعها عند استدعاء خدمة الويب.
الخطوة 2) بعد تحديد ملف خدمات الويب، تتمثل الخطوة التالية في إنشاء مشروع عميل سيستهلك خدمة الويب هذه. لنقم بإنشاء تطبيق وحدة تحكم بسيط يستدعي خدمة الويب هذه، ونستدعي "Guruاستخدم الأمر `99WebService` لعرض مخرجات دالة الويب في سجل وحدة التحكم. اتبع الخطوات التالية لإنشاء تطبيق وحدة تحكم: انقر بزر الماوس الأيمن على ملف حل Visual Studio، ثم اختر إضافة -> مشروع جديد.
الخطوة 3) في هذه الخطوة،
- تأكد أولاً من اختيار Visual C# Windows خيار. ثم اختر خيار إنشاء تطبيق وحدة التحكم.
- أعط اسمًا لمشروعك والذي تم إعطاؤه في حالتنا باسم "DemoApplication".
بعد النقر على زر "موافق" في الشاشة أعلاه، ستتمكن من رؤية المشروع في مستكشف الحلول في Visual Studio.
الخطوة 4) في هذه الخطوة، ستُعيّن تطبيق DemoApplication Console كمشروع بدء التشغيل. يُجرى ذلك لضمان تشغيل هذا التطبيق أولًا عند تشغيل مشروع Visual Studio بالكامل. سيقوم تطبيق Console بدوره باستدعاء خدمة الويب التي سيتم تشغيلها تلقائيًا بواسطة Visual Studio. لإكمال هذه الخطوة، انقر بزر الماوس الأيمن على مشروع DemoApplication واختر خيار "تعيين كمشروع بدء التشغيل".
الخطوة 5) الخطوة التالية هي إضافة مرجع الخدمة الخاص بنا "Guruأضف خدمة الويب "99Webservice" إلى تطبيق وحدة التحكم الخاص بنا. يتم ذلك لكي يتمكن تطبيق DemoApplication من الرجوع إلى خدمة الويب وجميع طرق الويب الموجودة فيها. للقيام بذلك، انقر بزر الماوس الأيمن على ملف مشروع DemoApplication واختر خيار القائمة "إضافة" ثم "مرجع خدمة".
الخطوة 6) في هذه الخطوة، سنقوم بتوفير القيم المختلفة المطلوبة لإضافة مرجع الخدمة الخاص بنا.
- أولاً، نحتاج إلى اختيار خيار الاكتشاف. سيقوم هذا الخيار تلقائيًا باختيار ملف WSDL لخدمة الويب TutorialService الخاصة بنا.
- بعد ذلك، ينبغي أن نُعطي اسمًا لمرجع الخدمة الخاص بنا. في حالتنا، سنُعطيه اسمًا هو Guru99Webservice.
- بعد ذلك، نحتاج إلى توسيع خيار TutorialService.asmx حتى نتمكن من رؤية دالة "GetTutorialService" على الجانب الأيمن. هنا، TutorialService.asmx هو اسم ملف Visual Studio .Net الذي يحتوي على كود خدمة الويب الخاصة بنا.
- سنرى بعد ذلك طريقة الويب الخاصة بنا والتي كانت موجودة في خدمة الويب الخاصة بنا والمعروفة باسم "GetTutorialService".
عند النقر على زر "موافق"، ستتم إضافة جميع التعليمات البرمجية اللازمة للوصول إلى خدمة الويب هذه إلى تطبيق وحدة تحكم DemoApplication الخاص بنا كما هو موضح أدناه. تُظهر لقطة الشاشة أن "Guruتمت إضافة "99Webservice" بنجاح إلى تطبيق وحدة التحكم الخاص بنا.
الخطوة 7) الخطوة التالية هي إضافة الكود إلى تطبيق وحدة التحكم الخاص بنا للوصول إلى دالة الويب في خدمة الويب. افتح ملف الكود Program.cs المرفق تلقائيًا مع تطبيق وحدة التحكم، وأضف الكود التالي.
namespace DemoApplication { class Program { static void Main(string[] args) { var client = new Guru99Webservice.Guru99WebserviceSoapClient(); Console.WriteLine(client.GetTutorialService(1)); Console.ReadKey(); } } }
Code التفسير:
- الخطوة الأولى هي اختيار ملف Program.cs. هذا هو الملف الرئيسي الذي يُنشئه Visual Studio عند إنشاء تطبيق وحدة تحكم. هذا الملف هو ما يتم تنفيذه عند تشغيل تطبيق وحدة التحكم (في حالتنا، DemoApplication).
- ثم نقوم بإنشاء متغير يسمى "client" والذي سيتم تعيينه إلى نسخة من مرجع الخدمة الذي تم إنشاؤه في خطوة سابقة. في حالتنا، مرجع الخدمة هو 'Guru99Webservice.Guru99WebserviceSoapClient()'.
- ثم نستدعي دالة الويب 'GetTutorialService' في خدمة الويب TutorialService. تذكر أن دالة GetTutorialService تقبل مُعاملًا عدديًا، لذا نمرر مُعاملًا عدديًا إلى دالة الويب.
- هذا السطر الأخير مخصص فقط لضمان بقاء شاشة سجل وحدة التحكم نشطة حتى نتمكن من عرض المخرجات. سينتظر هذا الأمر إدخالاً من المستخدم.
الناتج
عند اتباع جميع الخطوات المذكورة أعلاه، وتشغيل تطبيق العرض التوضيحي، سيتم عرض المخرجات التالية.
من خلال الإخراج، يمكننا أن نرى بوضوح أن DemoApplication يستدعي خدمة الويب الخاصة بنا وأن السلسلة التي تم إرجاعها بواسطة خدمة الويب يتم عرضها في سجل وحدة التحكم الخاصة بنا.
















