المؤلف: Dflying Chen ( http://dflying.cnblogs.com/ )
في المنشور السابق (الاتصال بخدمة الويب في ASP.NET Atlas - إنشاء Mashup لاستدعاء خدمة ويب عن بعد (مثيل Yahoo! Weather)))، قدمت استخدام BridgeRestProxy لإجراء Mashup على خدمة الويب. ومع ذلك، في التطوير الفعلي، غالبًا ما لا تكون هذه الطريقة البسيطة كافية، فنحن نحتاج إلى كتابة كود البرنامج لإكمال بعض المنطق المعقد. وهذا يعني استخدام فئة وكيل معقدة مخصصة بدلاً من الفئات المضمنة في Atlas بالإضافة إلى بعض علامات XML في ملف asbx. سنأخذ اليوم مثالًا أكثر تعقيدًا: Mashup Google Search Service لتعلم كيفية استخدام فئة مخصصة لتوكيل المكالمات إلى خدمات الويب البعيدة.
أولاً، دعونا نلقي نظرة على الخدمات التي تقدمها Google: توفر لنا Google للمطورين سلسلة من واجهات برمجة التطبيقات، والتي يمكنك عرضها على http://api.google.com/ بالنسبة لواجهة برمجة تطبيقات البحث التي سنستخدمها اليوم، يمكنك أيضًا الانتقال إلى http://api.google.com/Apply للحصول على مفتاح ترخيص Google وتضمين هذا المفتاح في كل طلب إلى Google. لقد ألقيت نظرة على وثائق Google، وقالت إن كل مفتاح ترخيص يسمح فقط بـ 1000 طلب يوميًا. إذا كنت بحاجة إلى استخدام بحث Google على موقع ويب كبير، أخشى أنه سيتعين عليك إعداد مجموعة من مفاتيح الترخيص.. جوجل حقا بخيل بما فيه الكفاية -_-ب.
بعد التقدم بطلب للحصول على مفتاح الترخيص، يمكننا البدء بالطبع، إذا كانت هذه هي المرة الأولى التي تتواصل فيها مع Mashup، فقد ترغب في الرجوع إلى مقالتي هذه: الاتصال بخدمة الويب في ASP.NET Atlas - إنشاء Mashup. للاتصال بخدمة الويب البعيدة (الأساسيات والأمثلة البسيطة).
أولاً، استخدم أداة wsdl.exe التي تأتي مع Visual Studio لإنشاء رمز C# الذي يستدعي Google Web Service بناءً على عنوان wsdl الخاص به:
wsdl.exe http://api.google.com/GoogleSearch.wsdl
سيقوم بإنشاء GoogleSearchService.cs قم بإضافته إلى دليل App_Code الخاص بموقعنا على الويب. في هذه المرحلة، يمكننا بالفعل استخدام الفئات الموجودة في هذا الملف مباشرةً، ومن بينها GoogleSearchService.doGoogleSearch() هي الطريقة التي نحتاجها. لكن ألقِ نظرة على هذه الفئة الفوضوية التي تم إنشاؤها تلقائيًا، فهي تحتوي على العديد من الطرق الأخرى، وتتطلب طريقة doGoogleSearch() أيضًا العديد من المعلمات، لذلك يجب علينا تغليف هذا الملف الفوضوي أولاً وتغليف وتبسيط استدعاءاته.
في هذا البرنامج النموذجي، لكل نتيجة بحث، نحتاج فقط إلى الحصول على حقول العنوان وعنوان URL والمقتطف الخاصة بها. من أجل تقليل حركة مرور الشبكة، لا نستخدم فئة نتائج البحث التي تأتي مع GoogleSearchService.cs، ولكن نقوم بتخصيص فئة SearchResultLite التي تحتوي فقط على المحتوى الذي نحتاجه:
فئة عامة SearchResultLite
{
سلسلة خاصة _title؛
عنوان السلسلة العامة
{
الحصول على { عودة _ العنوان }
مجموعة { _title = القيمة }
}
سلسلة خاصة _url؛
عنوان URL للسلسلة العامة
{
الحصول على {إرجاع _url}
تعيين { _url = القيمة }
}
سلسلة خاصة _snippet؛
مقتطف السلسلة العامة
{
احصل على {return_snippet}
مجموعة { _snippet = القيمة }
}
SearchResultLite العامة ()
{
}
SearchResultLite العامة (عنوان السلسلة، عنوان url للسلسلة، مقتطف السلسلة)
{
_title = عنوان؛
_url = url;
_snippet = snippet;
}
}
لاحظ أن فئة SearchResultLite المذكورة أعلاه يجب أن تحتوي على مُنشئ افتراضي بدون معلمات، ويجب أن يستخدم كل حقل سمات بدلاً من الأعضاء العامين، وإلا فسيرتكب Atlas أخطاء أثناء عملية التحويل إلى كائنات JavaScript.
دعونا نلتف حول GoogleSearchService.doGoogleSearch():
الفئة العامة GoogleSearchWarpper
{
البحث العام SearchResultLite[] البحث (سلسلة lisenceKey، استعلام سلسلة)
{
GoogleSearchService s = new GoogleSearchService();
نتيجة GoogleSearchResult = s.doGoogleSearch(
مفتاح ترخيص,
استفسار،
0,
10،
خطأ شنيع،
""،
خطأ شنيع،
""،
""،
""
);
List
foreach (عنصر ResultElement في result.resultElements)
{
SearchResultLite resultLite = new SearchResultLite(elem.title, elem.URL, elem.snippet);
resultLites.Add(resultLite);
}
إرجاع نتيجةLites.ToArray();
}
}
بهذه الطريقة، نحتاج فقط إلى معلمتين عند استدعاء طريقة البحث، ولا يوجد أي جزء زائد عن الحاجة في البيانات التي يتم إرجاعها. احفظه باسم GoogleSearchWarpper.cs.
بعد ذلك، نحتاج إلى إضافة مفتاح الترخيص الذي تم تطبيقه في البداية إلى ملف web.config، والذي سيتم استخدامه في الخطوات اللاحقة:
دعونا نلقي نظرة على إعلان ملف Bridge GoogleSearchBridge.asbx:
<اسم الطريقة = "بحث">
<الإدخال>
<اسم المعلمة = "الاستعلام" />
الإدخال>
الطريقة>
لاحظ أن قيمة سمة النوع لقسم
يتم تعيين قيمة سمة قيمة LicenseKey على % appsettings: GoogleWebAPILisenceKey %. هذه طريقة كتابة جديدة تم تقديمها في ملف asbx، مما يعني أنه سيتم تعيين قيمتها إلى قسم appSettings في الويب. ملف التكوين في وقت التشغيل هو قيمة GoogleWebAPILisenceKey.
سيتم تمرير الاستعلام من العميل ويمثل الكلمة الأساسية للاستعلام.
عند هذه النقطة، يمكننا اختباره في صفحة Atlas. بالطبع، الخطوة الأولى هي إضافة ScriptManager إلى الصفحة والإشارة إلى الجسر أعلاه:
<الخدمات>
الخدمات>
أضف جزءًا من HTML للسماح للمستخدمين بإدخال الكلمات الرئيسية للاستعلام، وتشغيل الاستعلامات وعرض النتائج:
وأخيرًا، اكتب JavaScript ويمكنك رؤية استخدام Sys.StringBuilder:
function btnSearch_onclick() {
var tbQuery = new Sys.UI.TextBox($("tbQuery"));
Dflying.GoogleSearch.Search({'query': tbQuery.get_text()}, onSearchComplete);
}
وظيفة onSearchComplete(نتيجة) {
var sbResult = new Sys.StringBuilder();
لـ (var i = 0; i < result.length; ++i) {
sbResult.append("
يمكن تنزيل نموذج البرنامج هنا: