![]() |
|
استغلال Web Service من خلال SOAP في دلفي - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي الأخرى (https://delphi4arab.net/forum/forumdisplay.php?fid=4) +--- قسم : برمجة الويب بدلفي وDelphi .NET و Oxygen (https://delphi4arab.net/forum/forumdisplay.php?fid=29) +--- الموضوع : استغلال Web Service من خلال SOAP في دلفي (/showthread.php?tid=2016) |
استغلال Web Service من خلال SOAP في دلفي - kachwahed - 16-05-2010 بسم الله الرحمن الرحيم
السلام عليكم ورحمة اللهفي المرفقات مثال بسيط جدا لتوضيح فكرة استغلال الخدمات المجانية التي توفرها المواقع الـ Web Services مثال ذلك: خدمات تحويل وحدات القياس، الترجمة، خوارزميات شهيرة... وغير ذلك ما فائدة هذه الخدمات، إذ يمكن برمجة ذلك؟ بعض الخدمات لا يمكن برمجتها أو تحتاج إلى تحديث كل مدة معينة، أو أنها تحتاج إلى مساحة تخزين لقاعدة بيانات ضخمة...من أمثلة ذلك: خدمات تحويل العملات، حالة الطقس، الأخبار ... وغيرها من هذه المواقع: كود : http://www.webservicex.net/WCF/Default.aspxكود : http://www.xmethods.net/ve2/index.poتوفر إصدارات دلفي مكونات SOAP لاستغلال Web Service عبر بروتوكول HTTP من خلال ملف WSDL الخدمة الذي يستخدم تقنية XML... اخترت كمثال بسيط لتوضيح الفكرة خدمة NumberConversion لتحويل الأرقام إلى حروف بالإنجليزي: كود : http://www.xmethods.net/ve2/ViewListing.po?key=uuid:037CC74B-E3CF-8082-CB97-87F52A283DEAوهنا عرض فيديو (AVI) (وجدته في اسطوانة c++builder :laugh يشرح الفكرة بوضوح:كود : http://megaupper.com/files/1NKEOJ2F/SPM17.rarاستغلال Web Service من خلال SOAP في دلفي - ابن فلسطين - 17-06-2010 بارك الله فيك اخي الكريم kachwahed على موضوعك الرائع وإن شاء الله ينتفع الكثير به . دمت بود. استغلال Web Service من خلال SOAP في دلفي - زكيري عبدالعالي - 25-06-2011 بســم الله الـرحمــن الرحيــم ملاحظ : انا لم اقم الا بجمع وتنقية الدروس من عدة مواقع بها معومات متبعثرة راجيا من الله ان يستفيد منها اخواننا المسلمين ماقمت الا بجمع و ترتيب و تجريب اكواد و تصحيح وتغييرات طفيفة اذا حقوق هذه الموسوعة لكل الروابط التي ساكتبها في اخرالدرس Web Services مقدمة مبدئياً خدمات ويب أو ما يطلق عليها اسم Web Service هي عبارة عن برا مج دلفي عاديةولكنها ليس لها واجهة المقصود هنا بالواجهة هي واجهة الاستخدام طريقة العمل تتلخص وظيفة استخدام ال web services بإمكانية الاستفادة من ال Methods الموجودة بال web server داخل برنامج الزبون وباستخدام برتوكول ال SOAP وهو اختصار ل Simple Object Access Protocol يتم نقل ال Result من ال web Services server إلى ال Client بعد تحويلها إلى ال XML - extensible Markup Language حيث تنقل عبر برتوكول ال HTTP إلى جهاز الزبون والهدف من استخدامه هو تسهيل وصول ال Data من ال web server إلى ال Client من خلال ال firewalls والبيئات المختلفة إذ أن جميع بيئات الشبكات تدعم برتوكول ال HTTP والذي يعمل على البورت 80 . ولا تختلف لغة ال XML عن ال HTML إذ تستخدم نفس القواعد في ال HTML وهي مجموعة من الElements وال Attributes مثل ال </> <> لكن تتميز بمرونة اكبر . اييستطيع المستخدمون الوصول الى هذه المعلومات بواسطة Interface معين ، حيث يتلق أمر أو طلب Request ثم يستجيب لها عن طريق http protocol اعتماداً على معايير ْXML والتي تؤمن بالتالي أن يفهمها أو تفهمها ملايين البرامج والأجهزة ومواقع الإنترنت ببساطة تامة . وواحد من أشهر التطبيقات لذلك هي خدمات ويب الخاصة بالطقس ، حيث تطلب منها الطقس في مدينة معين لتعود لك بدرجة الحرارة مثلاً ، وكل ذلك أن يكون لها واجهة استخدام اضافة إلى أنها تكون موجودة على الإنترنت وكما أسلفنا فخدمات ويب تعتمد على XML كمعيار لتمثيل البيانات ، ما يعني أن جميع البرامج في جميع الأماكن قادرة على التعامل معها وفهمها بغض النظر عن نظام التشغيل أو لغة البرمجة. وبما أن الخدمات برامج كما أسلفنا سابقاً ، فإن السيرفر الذي سيستضفيها لا بد أن يدعم هذا النوع من البرمجة ، وإذا أردت أن تجرب خدمتك الخاصة على جهازك الشخصي فتأكد من أنك قم بتحميل و اب سرفر معين IIS و Apache او واب سرفر انشاءته بنفسك. خادم الويب و الدلفي نستطيع من خلال الدلفي الوصل او برمجة خادم الويب بعده طرق و كل الطرق توجب توفر بعض الادةات او المكونات .
اما عن خادم HTTP فمكننا استعمال احد المكونات في الدلفي لتكن مثلا مكونات البروتكول SOAP SOAP= HTTP + XML==2]Simple Object Access Protocol اعمال تطبيقية 1-المثال الاول كتابه خدمة وبب ترسل الكلمة إقتباس :HelloWorldاول ما نبدأ له هو انشار مجلد خيالي على مسوى خادم المويب IIS [b] 1-Creating a virtual directory[/b] كود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig01_WindowsComponentWizard.PNGبعد تثبية ننشأ iis المجلد Delphi2009WS كمايلي كود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig02_NewVirtualDirectory.PNGكود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig03_VirtualDirName.PNGننشا مجلد حقيقي في المسار Delphi2009WS كود : C:\Inetpub\wwwrootكود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig04_PhysicalDirName.PNGودائما على مستوى IIS نفعل الخاصية Execute (such as ISAPI applications or CGI) كود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig05_Permissions.PNGبســم الله الـرحمــن الرحيــم 2-برمجة خدمه الويب اذا نفتح مشروع جديد في الدلفي نختار Other ثم من القائمه تختار كود : Web Service ->SOAP Server Applicationوانا اخترت CGI وسيكون لنا درس عليها ان شاء الله في هذه الموسوعة نحدد CGI application كما يلي كود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig07_NewAppType.PNGكود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig08_CreateInterface.PNGوفي مثالنا نكتب WebService1 استغلال Web Service من خلال SOAP في دلفي - S.M.Abdelhak - 25-06-2011 السلام عليكم أخ زكيري عبد العالي انا ليس لدي خبرة في برمجة الـ Web Service لكن لدي سآل هل يمكن ارسال النتائج من الـ Web Service دون طلب من الـ Client بمعنى لنفرض Client يكون منتضر هل يمكن لصفحة Web Service ان ترسل له شيئ دون اي يطلب ذلك بمعنى ينتضر و حسب و بارك الله فيك استغلال Web Service من خلال SOAP في دلفي - زكيري عبدالعالي - 27-06-2011 إقتباس :هل يمكن ارسال النتائج من الـ Web Service دون طلب من الـ ClientWeb Service iخدمة واب هي مجرد خدة وكيف للخدمة ان تكون خدمة دون طلب لكن يمكن لطالب الخدمة ان يكون برنامج وليس الزبون في حذ ذاته اي ان البرنامج يطلب كل دقيقة ويسجلها في مكان ما ثم الزبون يسترج المعلومات هذه كود : http://www.arabteam2000-forum.com/uploads/monthly_06_2009/post-1034-1245606611.jpgاستغلال Web Service من خلال SOAP في دلفي - زكيري عبدالعالي - 27-06-2011 نغير اسم المشروع الى Delphi2009WS_1.dproj ،حفضه في المجلد Source كود : http://www.arabteam2000-forum.com/uploads/monthly_06_2009/post-1034-1245607702.jpgيعتبر هذا الملف الوحدة التي نجد فيها interface الخاصة بالمشروع و التي يجب ان نعرف او نصرح فيها عن جميع الوظائف المستعملة في المشروع كود : { Interface invocable Iservice1 }
unit service1Intf;
interface
uses InvokeRegistry, Types, XSBuiltIns;
type
{ Les interfaces invocables doivent dériver de IInvokable }
Iservice1 = interface(IInvokable)
['{E4F6BF94-1745-4498-BBA2-9F6003FBED4E}']
function ShwoHelloWorld():string; stdcall;
{ Les méthodes de l'interface invocable ne doivent pas utiliser la }
{ convention d'appel par défaut ; stdcall est conseillé }
end;
implementation
initialization
{ Les interfaces invocables doivent être recensées }
InvRegistry.RegisterInterface(TypeInfo(Iservice1));
end.service1Impl.pas هي الوحدة التي نكتب فيها اكواد الوظائف . ,في نقوم بimplementation للواجهة service1Intf كود : { Fichier d'implémentation invocable pour Tservice1 implémentant Iservice1 }
unit service1Impl;
interface
uses InvokeRegistry, Types, XSBuiltIns, service1Intf;
type
{ Tservice1 }
Tservice1 = class(TInvokableClass, Iservice1)
public
function ShwoHelloWorld():string; stdcall;
end;
implementation
function Tservice1.ShwoHelloWorld():string;
begin
Result:= 'Hello World';
end;
initialization
{ les classes invocables doivent être recensées }
InvRegistry.RegisterInvokableClass(Tservice1);
end.تجربة المثال الاول ننقل الملف الناتج الى Delphi2009WS_1.exe C:\Inetpub\wwwroot\Delphi2009WS نكتب في IE http://localhost/Del...phi2009WS_1.exe و الان اصبحت الخدمت جاهزة كود : http://www.arabteam2000-forum.com/uploads/monthly_06_2009/post-1034-1245609241.jpgاستغلال Web Service من خلال SOAP في دلفي - زكيري عبدالعالي - 27-06-2011 2- برمجة الزبون ان تطبيق الزبون اما ان يكون تطيب ويب او وندوزعادي ويتم استغلال مجوموعة الميتود او الوظافة التي كتبناها في خدمه الويب باتباع الخطوات التالية أ*-ننشأ تطبيق جدبد VCL به نافذة واحدة *-نضيف الكلاسات او الوحدات التالي بواسطتها نتصل بالخادم كود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig18_NewItems_WSDLImporter.PNGبعد الموافقة سممكننا الدلفي من انشاء WSDL Importer wizard والتي يجب اعطاءها رابطة الخدمة التي انشئناها ولتكن http://localhost/Del...phi2009WS_1.exe هذا مسار الملف التنفيذي لتطبق الخدمة لكن نحن بحاجة الى الملف الناتج من هذه التعلمة الذي قام بانشائه SOAP اذن نظيف الى الرابطة http://localhost:808.../wsdl/Iservice1 حيث ان Iservice1 هو اسم الخدم التي انشاناها سايقا كود : http://bdntv.codegear.com/pix/PawelGlowacki/20081210/Fig19_WSDLImporter_URL.PNGنضغط على زر التالي نتحصل على نافذه تعرض لنا كل كل الوذظائف الموجودة في الخدمة و في مثالنا استعملنا سوى واحدة كما نرى الكود سورس الذي كتبه الدلفي اليا في هذه العملية . كود : http://www.arabteam2000-forum.com/uploads/monthly_06_2009/post-1034-1245696057.jpgكود : unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls
;
type
TForm3 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form3: TForm3;
implementation{$R *.dfm}
uses Iservice11;
procedure TForm3.Button1Click(Sender: TObject);
begin
edit1.Text:=GetIservice1.ShwoHelloWorld();
end;
end.هنا بحول الله قد اكمالنا اول مثال على خدمه الويب في الدلفي win32 يمكن ان نعمل على ISAPI كما ذكرة سابقا وهي بنفس الكريقة الا ان المتحصل عليه هو ملف dll ولكن بالدلفي بريسم هي اسهل و اسرع لانه يعتمد على .NET كود : http://www.arabteam2000-forum.com/uploads/monthly_06_2009/post-1034-1245696637.jpgاستغلال Web Service من خلال SOAP في دلفي - زكيري عبدالعالي - 27-06-2011 الطريقة الثانية وبستعمال مكوناة INDY في هذه الطريقة لا تعتبر خدمت الواب حسب الشرح السابق لكل من SAOP بكن بما انها تستعمل ملفات اكسمل + http فيمكن ان نحكم عنها بانها خدمت ويب كيف ذللك ومتى نحتاج هذه الطريقة مثلا عندك برنا مجين مختلفين التطبيق الاول يقوم بعمليات الاضافة التغيير في القاعدة و البرنامج الثاني نجد به الة حاسبة تقوم باجراء الكثيير من الحسابات على المعطيات التي في القاعدة و لترجع لنا نتيجة في وقت عير معلوم اى حسب نوع العملية يطلب منك كمبرمج ان تعرض ما يقوم به التطبيق الثاني في التطبق الاول كيف تعمل الحل نضع ملف او جدول ثم استرحع المعلومات من واجهة التطبيق 2 و في التطبيق 2 اضع timer تعرض محتوى الجدول نعم صحيح ولكن عندي افضل لاني استعمل الذاكرة و لا اخش تلف الملف او فقذ معلومة ما اضيف خدمت الى التطبيق 2 ومن التطبق 1 اعرض نتيجتها كيف ذلك كود : http://www.arabteam2000-forum.com/uploads/monthly_06_2009/post-1034-1246186368.jpgفي هذا المثال سننشأ خادم ويب جديد ليس له علاقة ب iis او الاباش وليكن على المنفذ8081 العنوان هو كود : http://localhost:8081/كود : [b]
[/b]defaultport :8081 للمكون IdHTTPServer1الهدف من هذا الكود هو قراءة الرقم الممر في url البحث في القاعدة ارسالة النتيجة في شكل اكسمل كود : procedure TForm3.IdHTTPServer1CommandGet(AContext: TIdContext;ARequestInfo: TIdHTTPRequestInfo
; AResponseInfo: TIdHTTPResponseInfo);
var
vid,str : string;
vQuery :TADOQuery;
begin
str:='';
if ARequestInfo.Params.Count >0 then
vid:=ARequestInfo.Params.Values['id'];
TRY
vQuery := TADOQuery.Create(nil);
vQuery.Connection:=ADOConnection1;
vQuery.SQL.Text := FORMAT([color= #0000ff;]'SELECT * FROM [table] WHERE id = %S'[/color],[vid]);
TRY
vQuery.Open;
str:= ' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' ';
while not vQuery.Eof do
begin
str:= str + FORMAT(
' ',[vQuery.FieldByName('id').AsString,
vQuery.FieldByName('name').AsString,
vQuery.FieldByName('not').AsString
]
);
vQuery.Next;
end;
str:= str +' ';
EXCEPT ON E:Exception DO
ShowMessage(e.Message);
END;
FINALLY
AResponseInfo.ContentText:=str;
vQuery.close;
vQuery.Free;
END;
end;بهذا انتهينا من برمجة الخادم و الخدمت لواردنا عرض النتيجة لابدا ان نقوم يقراءة الاكسمال الناتج وعرضه في شكل html في المتصفح مثلا وضعها فيclientdataset استغلال Web Service من خلال SOAP في دلفي - زكيري عبدالعالي - 27-06-2011 برمجة الزبون2- بعدوضع المكونات التي في الصور نقوم بوضع الكود التالي على الزر الهدف قراءة الرقم المحرر من طرف المستخدم ارساله الى خادم الويب استقبال النتيجة الممثلة في شكل xml وضعها في memo وضعها فيclientdataset] كود : procedure TForm3.Button1Click(Sender: TObject);
var
s : TMemoryStream;
AStream : TFileStream;
begin
s:=TMemoryStream.Create;
TRY
TRY
idHTTP1.Get('http://localhost:8081/?id='+edit1.Text,s);
EXCEPT ON E:Exception DO
BEGIN
showmessage('Connexion au serveur impossible!' +#13+E.message);
exit;
END;
END;
s.Seek(0, soFromBeginning);//S.position:=0;
Memo1.Lines.LoadFromStream(s);
ClientDataSet1.Close;
ClientDataSet1.LoadFromStream(s);
TRY
ClientDataSet1.Open;
EXCEPT ON E:Exception DO
exit;
END;
FINALLY
s.Free;
end;
end;
هكذا انتهينا من webservice قراء ممتعة مع الموسوعة العربية للدلفياستغلال Web Service من خلال SOAP في دلفي - زكيري عبدالعالي - 27-06-2011 كود : http://www.webservicex.net/ws/default.aspxكود : Top Web Services
Stock Quote
Currency Convertor
Global Weather
London Gold And Silver Fixing
Real Time Market Data
SendSMSWorld
OFAC SDN and Blocked Persons
Translation Engine
ABA Lookup
SendSMSIndia
More.. |