فيما يتعلق بالمشكلة عند استدعاء خدمة الويب المكتوبة بلغة C# ضمن دلفي
بادئ ذي بدء، أعتقد أنه من الضروري تقديم شرح شامل نسبيًا لتطور خدمات الويب ضمن منصة .net. ظهر الجيل الأولي من خدمات الويب في بيئة التجارة الإلكترونية، ولم يعد من السهل حل بعض المشكلات بالوسائل التقليدية ، كما هو الحال في التطبيقات، بالنسبة للاتصالات التجارية وتبادل البيانات، لم يعد من الممكن استخدام الآليات الثنائية مثل dcom وcorba، ناهيك عن أنها مقيدة بالأنظمة الأساسية الخاصة بها، على سبيل المثال، dcom (نموذج الكائنات المشتركة). لا يمكن تنفيذه إلا ضمن نظام Windows الأساسي، بينما corba (الكائنات الشائعة تطلب Broker الهندسة المعمارية) ليست سوى منتج لمنصة جافا. من الصعب عليهم تحقيق اتصال البيانات بين التطبيقات.
وفي هذا السياق، ظهرت خدمات الويب حسب ما يتطلبه العصر، وهي حل جيد للاختراق عبر اللغات والمنصات والاختراق الجيد والآمن لجدران الحماية الخاصة بالشركات. تنقسم هندستها بشكل عام إلى خمسة مستويات:
اتصالات البيانات ضمن قناة http (بروتوكول نقل النص التشعبي).
نموذج تعبير بيانات XML (لغة ترميزية قابلة للتوسيع).
تغليف بيانات الصابون (بروتوكول الوصول إلى الكائنات البسيطة)
تنسيق لغة الوصف لـ wsdl (لغة وصف خدمات الويب)
أودي (الوصف العالمي وتكامل الاكتشاف) الوصف الموحد والاكتشاف والتكامل
إن كوننا متعدد اللغات، ومتعدد المنصات، وجيدًا وآمنًا في اختراق جدران الحماية الخاصة بالشركات، يعد أمرًا كافيًا لإثارة حماسنا. ومع ذلك، هناك أيضًا مجالات تحتاج إلى تحسين، مثل:
اتصال بيانات HTTP بطيء، خاصة الاتصال الأول.
يتطلب الحمل الإضافي لخادم الويب
بعد الحديث عن معمارية خدمات الويب ومميزاتها وعيوبها، دعونا نصل إلى صلب الموضوع، وهو موضوع نقاشنا هذه المرة:
مشاكل عند استدعاء خدمة الويب ضمن دلفي
بدون مزيد من اللغط، دعنا نوضح بمثال بسيط لاختبار سمة webmethod: إنها عملية تجارية بسيطة تتمثل في إكمال عملية نقل من العميل أ إلى العميل ب.
نقوم أولاً بإنشاء خدمة ويب ضمن .net Framework1.1 في هذا الوقت، سيقوم .net تلقائيًا بإنشاء تطبيق ويب لنا.
نحن بحاجة إلى إنشاء اختبار سمات فئة، وهو ضمن اختبار سمات مساحة الاسم، ثم ترث هذه الفئة تلقائيًا System.web.services.webservice، عند الحاجة، يمكننا تعيين سمة خدمة الويب الخاصة بها، وتشمل السمات الأساسية الوصف ومساحة الاسم
[سمة خدمة الويب (مساحة الاسم = http://www.isdoo.com/services،
description=مرحبًا أنسل، هذه خدمة ويب تجريبية!)]
اختبار سمات الفئة العامة: system.web.services.webservice
{
[webmethodattribute(description=معلومات الوصف: يرث طريقة العد ويحمل الاسم بشكل زائد. التنفيذ هو تحويل الأموال من المستخدم أ إلى المستخدم ب...,
//اسم الرسالة = تغيير اسم الرسالة،
استجابة المخزن المؤقت = صحيح،
مدة التخزين المؤقت = 1000،
تمكين الدورة = صحيح،
Transactionoption=transactionoption.requiresnew)]
تحويلات السلسلة العامة (أموال مزدوجة)
{
يحاول
{
contextutil.enablecommit();// المعاملة تستخدم فقط لتشغيل قاعدة البيانات!
moneyintoa(money);
moneyoutfromb(money);
contextutil.setcomplete();
تم إرجاع المعاملة بنجاح، إجمالي +money.tostring();
}
قبض (استثناء ه)
{
contextutil.setabort();
فشلت معاملة الإرجاع! /n/r +e.message;
}
}
أموال باطلة خاصة (أموال مزدوجة)
{
sqlcommand sqlcom = new sqlcommand(تحديث مجموعة الميزانية money=money++money.tostring()+ Where name='a');
قاعدة البيانات mydatabase = قاعدة البيانات الجديدة الوصول ()؛
sqlcom.connection=mydatabase.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection. Close();
//طرح استثناء جديد (فشلت العملية عند تحويل الأموال إلى!);
}
أموال باطلة خاصة منب (أموال مزدوجة)
{
sqlcommand sqlcom = new sqlcommand(تحديث مجموعة الميزانية money=money-+money.tostring()+ Where name='b');
قاعدة البيانات mydatabase = قاعدة البيانات الجديدة الوصول ()؛
sqlcom.connection=mydatabase.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection. Close();
// طرح استثناء جديد (فشلت العملية عند تحويل الأموال من ب!)؛
}
}
ما نحتاج إلى الاهتمام به بشكل خاص هو webmethodattribute، وهو أيضًا محور ما نحتاج إلى التحدث عنه هذه المرة. طالما أضفت [webmethodattribute] إلى إحدى الطرق، حتى لو لم تكن هناك سمات فيها، فستكون خدمة الويب. ستكشف هذه الطريقة للمتصل بقطاع العملاء، فلنتحدث عن سماتها الست أدناه، بما في ذلك سمتان للمعلومات الوصفية و4 سمات وظيفية.
سمات المعلومات الوصفية:
وصف
اسم الرسالة
4 خصائص وظيفية:
com.bufferresponse
مدة التخزين المؤقت
التمكين
خيار المعاملة
من بينها، نحتاج إلى الانتباه إلى سمة اسم الرسالة. عندما تستدعي دلفي خدمة الويب التي تم تطويرها ضمن النظام الأساسي .net، إذا قمت بتعيين سمة اسم الرسالة، فسيتم الإبلاغ عن خطأ عندما يستدعيها العميل. قد يكون هذا خطأ، وربما الإصدار الأحدث سوف يحل هذه المشكلة. أما الوظائف المحددة لهذه الصفات فلن يتم وصفها بالتفصيل هنا. يمكنك قراءة الكتب ذات الصلة.
سأقوم أدناه بإدراج خطوات دلفي للاتصال بخدمة الويب:
بادئ ذي بدء، إذا قمت للتو بتطوير العميل والاتصال به، فأنت بحاجة فقط إلى إنشاء تطبيق عادي، ثم ما عليك فعله هو العثور على عنصر تحكم Soaphttpclient ضمن خدمات الويب لشريط الأدوات، ثم وضعه في نص نافذة تطبيق العميل الخاص بك. ;
ثانيًا، تحتاج إلى تعيين عنوان url أو wsdl الخاص بهذا الصابونhttpclient. هذا المحتوى هو عنوان الخدمة لخدمة الويب الخاصة بك.
على سبيل المثال، عنوان الخدمة لمثالنا الحالي هو: http://localhost/attributetesting/attributetesting.asmx
إذا كنت تريد إدخال wsdl فهو http://localhost/attributetesting/attributetesting.asmx?wsdl
هذا يكمل إعدادات التحكم.
ثم نحتاج إلى استيراد wsdl من جانب الخادم. يمكنك القيام بذلك يدويًا أو استخدام وظيفة مستورد خدمات الويب التي توفرها دلفي.
وأخيرًا، ما عليك سوى الاتصال بواجهة wsdl المستوردة. الكود المقابل لدينا هنا هو:
الإجراء tform1.bitbtn1click(sender: tobject);
فار
aa:attributetestsoap;// هذا هو كائن واجهة الفئة ضمن wsdl
رسالة: واسعة النطاق؛
ب: مزدوج؛
يبدأ
//httprio2 هو في الواقع ما يسمى بفئة الوكيل، وهي المسؤولة عن نقل البيانات وإرسال الطلبات وقبول الاستجابات.
aa:=httprio2 as attributetestsoap;
ب:=100.00;
msg:=aa.transmoney(bb);// هذه هي طريقة خدمة الويب التي تعرضها لنا من خلال الاتصال بخدمة الويب
showmessage(msg);
نهاية؛
حسنا!
التنزيلات الشائعة لكود المصدر التجاري www.html.org.cn