المؤلف: Dflying Chen ( http://dflying.cnblogs.com/ )
في المقالة السابقة (الاتصال بخدمة الويب في ASP.NET Atlas - إنشاء Mashup للاتصال بخدمة الويب عن بعد (المعرفة الأساسية ومثال بسيط))، قدمت بعض المعرفة الأساسية حول Mashup لخدمة الويب عن بعد في Atlas وقدمت مثالًا أساسيًا وهذا غير مفيد على الإطلاق. بالعودة إلى هذا الموضوع اليوم، سأقدم مثالًا أكثر تعقيدًا ولكنه مفيد إلى حد ما - Yahoo!
كفى هراء، دعونا نتعرف أولاً على خدمة Yahoo! Weather: توفر Yahoo! خدمة التنبؤ بالطقس على موقعها الإلكتروني ( http://weather.yahoo.com/ )، كما أنها توفر واجهة خدمة ويب ( http:/) /developer.yahoo.com/weather/ )
من صفحتي الويب أعلاه، يمكننا معرفة أن عنوان URL لخدمة الطقس التي تقدمها Yahoo! هو http://xml.weather.yahoo.com/forecastrss . تحتوي الخدمة أيضًا على معلمتين:
p: رمز الموقع حيث سيتم الاستعلام عن الطقس (يمكنك التحقق من هذا الرمز في أماكن مختلفة على http://weather.yahoo.com/ ).
u: وحدة درجة الحرارة في النتيجة التي تم إرجاعها، وتمثل f فهرنهايت، وتمثل c درجة مئوية.
يبدو أن خدمة Yahoo! Weather بسيطة جدًا، فلنختبر ما إذا كانت تعمل بشكل جيد. انتقل أولاً إلى http://weather.yahoo.com/ واكتشف أن رمز موقع شنغهاي هو CHXX0116. ثم أدخل http://xml.weather.yahoo.com/forecastrss?p=CHXX0116&u=c في المتصفح. حسنًا، يتم إرجاع ملف XML التالي غير المعقد للغاية:
نتيجة XML لخدمة الطقس من Yahoo
<القناة>
http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html
<وصف>ياهو الطقس لشنغهاي، CH
<صورة>
<العنوان>ياهو الطقسالعنوان>
<العرض>142العرض>
<الارتفاع>18الارتفاع>
http://weather.yahoo.com/
الصورة>
<العنصر>
http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html
<وصف>
" />
الظروف الحالية:
ضباب، 21 درجة مئوية
التوقعات:
الخميس - سحب رعدية متفرقة العظمى: 25 منخفضة: 20
الجمعة - صباحًا زخات مطر عالية: 26 منخفضة: 18
توقعات كاملة على Yahoo! الطقس
(مقدمة من قناة الطقس)
]]>
وصف>
البند>
القناة>
يمكننا أن نرى أن المعلومات التي يقدمها شاملة للغاية (حتى أوقات شروق الشمس وغروبها... )، دعنا نكتب صفحة asbx Bridge لمزج هذه الخدمة.
أولاً، بالإشارة إلى عبارة asbx في المقالة Calling Web Service in ASP.NET Atlas - إنشاء Mashup لاستدعاء خدمة الويب عن بعد (المعرفة الأساسية ومثال بسيط)، يمكننا كتابة الفقرة التالية:
ترميز
<الإدخال>
<اسم المعلمة = "p" />
<اسم المعلمة = "u" value = "c" />
الإدخال>
الطريقة>
الجسر>
في:
تسمح لنا سمات مساحة الاسم وclassName الخاصة بـ
تحدد سمة ServiceUrl الخاصة بـ
تحدد طريقة GetWeather المعلمتين p وu المذكورتين أعلاه. لقد حددنا القيمة الافتراضية للمعلمة u على أنها c (تمثل درجة مئوية)، وسيتم تمرير المعلمة p بواسطة المتصل.
هذه الخطوة في الواقع كافية. سيتلقى العميل سلسلة XML الموضحة في المتصفح أعلاه، ويمكن معالجتها وعرضها على العميل. لكن معالجة XML للعميل ليست بهذه السهولة أو الكفاءة، كما أن نقل الكثير من المعلومات غير الضرورية عبر الشبكة يعد أيضًا مضيعة للوقت. لذلك نستخدم هنا المحول المدمج في asbx لمعالجة XML هذا واستخراج المحتوى الذي نهتم به وإرساله إلى العميل في شكل JSON. قم بإضافة الفقرة التالية إلى القسم
<البيانات>
<اسم السمة = "المحدد" value = "القناة" />
<اسم القاموس = "namespaceMapping">
<اسم العنصر = "yweather" value=" http://xml.weather.yahoo.com/ns/rss/1.0 " />
القاموس>
<اسم القاموس = "العقد المختارة">
<اسم العنصر = "العنوان" value = "العنوان" />
<اسم العنصر = "الوصف" القيمة = "العنصر/الوصف" />
<اسم العنصر = "CurrentCondition" value = "item/yweather:condition/@text" />
القاموس>
البيانات>
تحويل>
التحويلات>
تشير عبارة
الاسم هو مقطع سمة للمحدد، وسمة القيمة المحددة هي تعبير XPath، الذي سيحدد مقطع البيانات الذي سيتم استخدامه بواسطة XPathBridgeTransformer بأكمله.
الاسم هو مقطع قاموس من namespaceMapping، والذي يحدد تعيين مساحة الاسم في ملف XML هذا. إذا استخدمنا مساحة اسم معينة في عملية اختيار العقدة التالية، فيجب أن يكون إعلانها هنا. نضيف هنا خريطة إلى yweather، لأنه سيتم استخدامها أدناه.
الاسم هو مقطع قاموس من العقد المحددة، حيث تكون سمة القيمة لكل عنصر عبارة عن سلسلة XPath، تُستخدم لتحديد القيمة المقابلة من XML، ويتم استخدام سمة الاسم لتحديد اسم السمة المقابل في JavaScript. كمثال هنا، حصلت على ثلاثة أجزاء فقط من المحتوى. يمكنك أن ترى أن تعيين مساحة الاسم المحدد أعلاه يُستخدم في XPath الخاص بـ CurrentCondition.
لن أخوض في تفاصيل حول XPath، يمكن للأصدقاء المهتمين به أو غير المطلعين عليه أن يبحثوا عنه في Google بأنفسهم. هناك العديد من الموارد عبر الإنترنت. لست على دراية بالأنواع الأخرى من المحولات وسأتحدث عنها إذا واجهتها في المستقبل. ملف YahooWeatherBridge.asbx المكتمل هو كما يلي:
<الإدخال>
<اسم المعلمة = "p" />
<اسم المعلمة = "u" value = "c" />
الإدخال>
<التحويلات>
<البيانات>
<اسم السمة = "المحدد" value = "القناة" />
<اسم القاموس = "namespaceMapping">
<اسم العنصر = "yweather" value=" http://xml.weather.yahoo.com/ns/rss/1.0 " />
القاموس>
<اسم القاموس = "العقد المختارة">
<اسم العنصر = "العنوان" value = "العنوان" />
<اسم العنصر = "الوصف" القيمة = "العنصر/الوصف" />
<اسم العنصر = "CurrentCondition" value = "item/yweather:condition/@text" />
القاموس>
البيانات>
تحويل>
التحويلات>
الطريقة>
الجسر>
الآن قم بإنشاء صفحة ASP.NET للاختبار أولاً، لا يزال هناك ScriptManager يتكرر ألف مرة، وإشارة إلى Bridge:
<الخدمات>
الخدمات>
ثم هناك عنصر تحديد HTML، الذي يسرد العديد من المدن ورموز المدن المقابلة:
<اختر معرف = "مكان">
حدد>
زر HTML يُستخدم لبدء استدعاء الخدمة:
يتم استخدام جزء من HTML لعرض النتيجة:
ثم يأتي JavaScript. يمكنك أن ترى أنه يتم استدعاء Mashup من خلال Dflying.YahooWeatherService.GetWeather()، ويتم إخراج القيمة المحولة إلى الصفحة بعد إرجاع الطريقة: function getWeather_onclick() {.
// عنصر تحكم "تحديد" أطلس جديد
var place = new Sys.UI.Select($('place'));
// استدعاء طريقة الجسر
Dflying.YahooWeatherService.GetWeather({'p': place.get_selectedValue()}, onGetComplete);
}
دالة onGetComplete(نتيجة) {
$('result').style.display = "block";
$('title').innerHTML = result[0].Title;
$('description').innerHTML = result[0].Description;
}