WebService هي تقنية مكالمات عن بُعد تعبر لغات البرمجة وتجول منصات نظام التشغيل.
ما يسمى المكالمة عن بُعد هي طريقة يمكن فيها من برنامج على جهاز كمبيوتر استدعاء كائن على جهاز كمبيوتر آخر ب. على سبيل المثال ، نظام تمرير بطاقة POS الذي توفره UnionPay للمركز التجاري (باستخدام أسئلة تفاعلية لتعميق فهم الجميع لهذه التكنولوجيا).
ما هو استخدام تقنية المكالمات عن بُعد؟ هل يتم استدعاء رمز طريقة التحويل لجهاز POS في المركز التجاري على خادم البنك أو على جهاز POS في المركز التجاري؟ تحت أي ظروف يمكن استخدام تقنية الاتصال عن بُعد؟ على سبيل المثال ، يعرض Amazon ، ونظام التنبؤ بالطقس ، و Taobao ، و Campus Network ، و Baidu ، وما إلى ذلك.
تعني ما يسمى لغة البرمجة المتقاطعة ومنصة التبادل المتقاطع أن برنامج الخادم مكتوب في Java ، بينما يمكن كتابة برنامج العميل بلغات برمجة أخرى ، والعكس بالعكس! منصة نظام التشغيل المتقاطعة تعني أن برامج الخادم وبرامج العميل يمكن أن تعمل على أنظمة تشغيل مختلفة.
بالإضافة إلى خدمة الويب ، تشمل تقنيات الاتصال عن بُعد الشائعة RMI (Remotemethodinvoke) و Corba. نظرًا لخصائص لغة البرمجة عبر المنصات والبرمجة المتقاطعة لخدمة الويب ، فهي تستخدم على نطاق أوسع من التقنيتين الأخريين ، ولكن لها أداء أقل قليلاً.
الخطوات المعتادة عند استخدام JDK لإجراء مكالمات WebService هي كما يلي:
// 1. إنشاء javax.xml.ws.service مثيل javax.xml.ws.service service = javax.xml.ws.service.create (wsdl ، servicename) ؛ // 2. احصل على الوكيل لواجهة الخدمة المقابلة من خلال مثيل الخدمة HelloService HelloService = Service.getPort (PortName ، HelloService.Class) ؛ // 3. اتصل بالطريقة المقابلة للخدمة HelloService.Sayhello ("Ell")في الخطوة 1 أعلاه ، أثناء إنشاء مثيل خدمة ، سيتم بناء كائن من تفويض الخدمة داخل الخدمة لتعيين مندوب السمة إلى الانتظار الداخلي. ثم في الخطوة الثانية ، سيتم استخدام DeLegate لإنشاء كائن وكيل لواجهة الخدمة ، وسيقوم أيضًا بتكليف واجهات BindingProvider والواجهات القابلة للإغلاق. بعد ذلك ، عندما يتم بدء طلب الواجهة فعليًا في الخطوة الثالثة ، سيتم بدء طلب HTTP داخليًا. عند بدء طلب HTTP ، سيتم الحصول على معلمات المهلة من نتيجة عودة getRequestContext () من bindingprovider ، المقابلة إلى com.sun.xml.internal.ws.connection.timeout و com.sun.xml.internal.ws.request.timeout على التوالي. السابق هو الوقت المهلة لإنشاء الاتصال ، والأخير هو الوقت المهلة للحصول على استجابة الطلب ، والتي هي بالميلي ثانية. إذا لم يتم تحديد المهلة المقابلة أو أن المهلة المحددة هي 0 ، فهذا يعني أن المهلة لن تنتهي أبدًا. لذلك من أجل تحديد وقت المهلة ، يمكننا أن نبدأ بـ BindingProvider. على سبيل المثال:
عميل الفئة العامة {public static void main (string [] args) يرمي الاستثناء {String TargetNamesPace = "http://test.elim.com/ws" ؛ url ("http: // localhost: 8888/hello") ؛ // سيتم إنشاء كائن نوع servicedelegate داخليًا لتعيينه إلى خدمة سمة DeviteService = service.create (wsdl ، servicename) ؛ // سيستخدم المندوب لإنشاء كائن بروكسي للخدمة ، وسيؤدي أيضًا إلى قيامه بتوفير المولد المتواصل. HelloService HelloService = service.getport (portname ، helloservice.class) ؛ bindingProvider BindingProvider = (bindingProvider) helloservice ؛ map <string ، object> requestContext = bindingProvider.getRequestContex مهلة إنشاء اتصال هي 10 ثوان من requestContext.put ("com.sun.xml.internal.ws.request.timeout" ، 15 * 1000) ؛ // حدد مهلة الاستجابة للطلب أن يكون 15 ثانية // عند استدعاء طريقة الواجهة ، سيتم بدء طلب HTTP داخليًا. عند بدء طلب HTTP ، سيتم الحصول على معلمات المهلة من نتيجة عودة BindingProvider's getRequestContext () ، // المقابلة لـ com.sun.xml.internal.ws.connection.timeout و com.sun.xml.internal.ws.request.timeouters على التوالي. // السابق هو مهلة إنشاء اتصال ، والأخير هو المهلة للحصول على استجابة الطلب ، والوحدة هي مللي ثانية. إذا لم يتم تحديد المهلة المقابلة أو أن المهلة المحددة هي 0 ، فهذا يعني أن المهلة لن تنتهي أبدًا. System.out.println (HelloService.Sayhello ("lead")) ؛}} المثال الكامل هو كما يلي:
واجهة الخدمة:
webservice (portName = "HelloService" ، serviceName = "HelloService" ، TargetNamesPace = "http://test.elim.com/ws") الواجهة العامة HelloService {String Sealhello (اسم السلسلة) ؛}تطبيق واجهة الخدمة:
WebService (portName = "HelloService" ، serviceName = "HelloService" ، TargetNamesPace = "http://test.elim.com/ws") public class helloServiceImplsplements helloservice {private random random () ؛ Random.NextInt (21)) ؛ // نوم عشوائي لمدة 5-25 ثانية} catch (InterruptedException e) {E.PrintStackTrace () ؛} إرجاع "Hello" + name ؛}}رمز الخادم:
خادم الفئة العامة {public static void main (string [] args) {endpoint.publish ("http: // localhost: 8888/hello" ، new HellOserviceImpl ()) ؛}}ينام رمز الخادم المذكور أعلاه بشكل عشوائي لمدة 5-25 ثانية ، في حين أن المهلة المحددة من قبل العميل هي 15 ثانية ، لذلك أثناء الاختبار ، سترى أن مكالمة الخدمة ستنتهي أحيانًا وأحيانًا ستستجيب بشكل طبيعي.
لخص
ما سبق هو كل التفسير التفصيلي لرمز مهلة برمجة ويب برمجة Java ، وآمل أن يكون مفيدًا للجميع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!